Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in / Register
Toggle navigation
V
volunteer_service
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
licc
volunteer_service
Commits
741523ea
Commit
741523ea
authored
Mar 26, 2021
by
cy
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
支付,广告填加标题字段
parent
805089bc
Show whitespace changes
Inline
Side-by-side
Showing
19 changed files
with
561 additions
and
186 deletions
+561
-186
BannerMapper.xml
wisenergy-mapper/src/main/resources/mapper/BannerMapper.xml
+4
-2
PayRecordMapper.xml
...ergy-mapper/src/main/resources/mapper/PayRecordMapper.xml
+2
-0
Banner.java
...gy-model/src/main/java/cn/wisenergy/model/app/Banner.java
+6
-0
BannerDto.java
...model/src/main/java/cn/wisenergy/model/dto/BannerDto.java
+6
-0
pom.xml
wisenergy-service/pom.xml
+6
-0
AliPayService.java
...src/main/java/cn/wisenergy/service/app/AliPayService.java
+11
-1
TestWxPayService.java
.../main/java/cn/wisenergy/service/app/TestWxPayService.java
+4
-0
AliPayServiceImpl.java
...java/cn/wisenergy/service/app/impl/AliPayServiceImpl.java
+167
-57
TestWxPayServiceImpl.java
...a/cn/wisenergy/service/app/impl/TestWxPayServiceImpl.java
+126
-75
UserLimitServiceImpl.java
...a/cn/wisenergy/service/app/impl/UserLimitServiceImpl.java
+1
-1
WxPayServiceImpl.java
.../java/cn/wisenergy/service/app/impl/WxPayServiceImpl.java
+3
-3
Common.java
...ice/src/main/java/cn/wisenergy/service/common/Common.java
+22
-30
VolunteerManager.java
...in/java/cn/wisenergy/service/common/VolunteerManager.java
+3
-0
WxPayUtil.java
...ce/src/main/java/cn/wisenergy/service/util/WxPayUtil.java
+160
-5
WxCommon.java
...ce/src/main/java/cn/wisenergy/service/wxpay/WxCommon.java
+2
-2
wisenergy-service.iml
wisenergy-service/wisenergy-service.iml
+3
-0
PayController.java
.../cn/wisenergy/web/admin/controller/app/PayController.java
+21
-9
application-dev.yml
wisenergy-web-admin/src/main/resources/application-dev.yml
+11
-1
wisenergy-web-admin.iml
wisenergy-web-admin/wisenergy-web-admin.iml
+3
-0
No files found.
wisenergy-mapper/src/main/resources/mapper/BannerMapper.xml
View file @
741523ea
...
@@ -12,6 +12,7 @@
...
@@ -12,6 +12,7 @@
<result
column=
"image"
property=
"image"
/>
<result
column=
"image"
property=
"image"
/>
<result
column=
"create_time"
property=
"createTime"
/>
<result
column=
"create_time"
property=
"createTime"
/>
<result
column=
"update_time"
property=
"updateTime"
/>
<result
column=
"update_time"
property=
"updateTime"
/>
<result
column=
"title"
property=
"title"
/>
</resultMap>
</resultMap>
<sql
id=
"table"
>
<sql
id=
"table"
>
...
@@ -24,11 +25,11 @@
...
@@ -24,11 +25,11 @@
</sql>
</sql>
<sql
id=
"cols_exclude_id"
>
<sql
id=
"cols_exclude_id"
>
company_name,status, website,is_have_image,type,image, create_time,update_time
company_name,status, website,is_have_image,type,image, create_time,update_time
,title
</sql>
</sql>
<sql
id=
"vals"
>
<sql
id=
"vals"
>
#{companyName},#{status},#{website},#{isHaveImage},#{type},#{image},now(),now()
#{companyName},#{status},#{website},#{isHaveImage},#{type},#{image},now(),now()
,#{title}
</sql>
</sql>
<sql
id=
"updateCondition"
>
<sql
id=
"updateCondition"
>
...
@@ -38,6 +39,7 @@
...
@@ -38,6 +39,7 @@
<if
test=
"isHaveImage != null"
>
is_have_image =#{isHaveImage},
</if>
<if
test=
"isHaveImage != null"
>
is_have_image =#{isHaveImage},
</if>
<if
test=
"type != null"
>
type =#{type},
</if>
<if
test=
"type != null"
>
type =#{type},
</if>
<if
test=
"image != null"
>
image =#{image},
</if>
<if
test=
"image != null"
>
image =#{image},
</if>
<if
test=
"title != null"
>
title =#{title},
</if>
update_time =now()
update_time =now()
</sql>
</sql>
...
...
wisenergy-mapper/src/main/resources/mapper/PayRecordMapper.xml
View file @
741523ea
...
@@ -71,6 +71,7 @@
...
@@ -71,6 +71,7 @@
<if
test=
"userId != null"
>
<if
test=
"userId != null"
>
user_id=#{userId}
user_id=#{userId}
</if>
</if>
and result=0
order by create_time desc
order by create_time desc
limit #{startNum},#{endNum}
limit #{startNum},#{endNum}
</where>
</where>
...
@@ -85,6 +86,7 @@
...
@@ -85,6 +86,7 @@
<if
test=
"userId != null"
>
<if
test=
"userId != null"
>
user_id=#{userId}
user_id=#{userId}
</if>
</if>
and result=0
</where>
</where>
</select>
</select>
...
...
wisenergy-model/src/main/java/cn/wisenergy/model/app/Banner.java
View file @
741523ea
...
@@ -71,4 +71,10 @@ public class Banner implements Serializable {
...
@@ -71,4 +71,10 @@ public class Banner implements Serializable {
*/
*/
@ApiModelProperty
(
value
=
"更新时间"
,
name
=
"updateTime"
)
@ApiModelProperty
(
value
=
"更新时间"
,
name
=
"updateTime"
)
private
Date
updateTime
;
private
Date
updateTime
;
/**
* 标题
*/
@ApiModelProperty
(
value
=
"标题"
,
name
=
"title"
)
private
String
title
;
}
}
wisenergy-model/src/main/java/cn/wisenergy/model/dto/BannerDto.java
View file @
741523ea
...
@@ -49,4 +49,10 @@ public class BannerDto {
...
@@ -49,4 +49,10 @@ public class BannerDto {
*/
*/
@ApiModelProperty
(
value
=
"更新时间"
,
name
=
"updateTime"
)
@ApiModelProperty
(
value
=
"更新时间"
,
name
=
"updateTime"
)
private
Date
updateTime
;
private
Date
updateTime
;
/**
* 标题
*/
@ApiModelProperty
(
value
=
"标题"
,
name
=
"title"
)
private
String
title
;
}
}
wisenergy-service/pom.xml
View file @
741523ea
...
@@ -53,6 +53,12 @@
...
@@ -53,6 +53,12 @@
<artifactId>
okhttp
</artifactId>
<artifactId>
okhttp
</artifactId>
<version>
3.6.0
</version>
<version>
3.6.0
</version>
</dependency>
</dependency>
<!-- 微信支付 sdk -->
<dependency>
<groupId>
com.github.wxpay
</groupId>
<artifactId>
wxpay-sdk
</artifactId>
<version>
0.0.3
</version>
</dependency>
<dependency>
<dependency>
<groupId>
com.github.wechatpay-apiv3
</groupId>
<groupId>
com.github.wechatpay-apiv3
</groupId>
...
...
wisenergy-service/src/main/java/cn/wisenergy/service/app/AliPayService.java
View file @
741523ea
...
@@ -6,6 +6,7 @@ import cn.wisenergy.model.dto.PayQueryDto;
...
@@ -6,6 +6,7 @@ import cn.wisenergy.model.dto.PayQueryDto;
import
javax.servlet.http.HttpServletRequest
;
import
javax.servlet.http.HttpServletRequest
;
import
javax.servlet.http.HttpServletResponse
;
import
javax.servlet.http.HttpServletResponse
;
import
java.io.IOException
;
public
interface
AliPayService
{
public
interface
AliPayService
{
...
@@ -18,6 +19,15 @@ public interface AliPayService {
...
@@ -18,6 +19,15 @@ public interface AliPayService {
*/
*/
R
<
String
>
doPost
(
PayPageDto
payPageDto
,
HttpServletRequest
request
,
HttpServletResponse
httpResponse
);
R
<
String
>
doPost
(
PayPageDto
payPageDto
,
HttpServletRequest
request
,
HttpServletResponse
httpResponse
);
/***
* 手机网页端支付宝支付接口
* @param payPageDto
* @param request
* @param httpResponse
* @return
*/
R
<
String
>
wapAliPay
(
PayPageDto
payPageDto
,
HttpServletRequest
request
,
HttpServletResponse
httpResponse
);
...
@@ -34,5 +44,5 @@ public interface AliPayService {
...
@@ -34,5 +44,5 @@ public interface AliPayService {
* @param request
* @param request
* @return
* @return
*/
*/
R
<
String
>
aliPayCallBack
(
HttpServletResponse
response
,
HttpServletRequest
request
)
;
void
aliPayCallBack
(
HttpServletResponse
response
,
HttpServletRequest
request
)
throws
IOException
,
Exception
;
}
}
wisenergy-service/src/main/java/cn/wisenergy/service/app/TestWxPayService.java
View file @
741523ea
...
@@ -2,6 +2,7 @@ package cn.wisenergy.service.app;
...
@@ -2,6 +2,7 @@ package cn.wisenergy.service.app;
import
cn.wisenergy.common.utils.R
;
import
cn.wisenergy.common.utils.R
;
import
cn.wisenergy.model.dto.PayPageDto
;
import
cn.wisenergy.model.dto.PayPageDto
;
import
com.fasterxml.jackson.core.JsonProcessingException
;
import
javax.servlet.http.HttpServletRequest
;
import
javax.servlet.http.HttpServletRequest
;
import
javax.servlet.http.HttpServletResponse
;
import
javax.servlet.http.HttpServletResponse
;
...
@@ -18,6 +19,9 @@ public interface TestWxPayService {
...
@@ -18,6 +19,9 @@ public interface TestWxPayService {
*/
*/
R
<
String
>
wxPay
(
PayPageDto
payPageDto
,
HttpServletResponse
response
);
R
<
String
>
wxPay
(
PayPageDto
payPageDto
,
HttpServletResponse
response
);
R
<
String
>
h5WxPay
(
PayPageDto
payPageDto
,
HttpServletRequest
request
,
HttpServletResponse
response
)
throws
JsonProcessingException
;
R
<
String
>
WxPayApplets
(
PayPageDto
payPageDto
,
HttpServletRequest
request
,
HttpServletResponse
response
)
throws
JsonProcessingException
;
/***
/***
*测试-支付成功回调
*测试-支付成功回调
* @param request
* @param request
...
...
wisenergy-service/src/main/java/cn/wisenergy/service/app/impl/AliPayServiceImpl.java
View file @
741523ea
...
@@ -10,21 +10,32 @@ import cn.wisenergy.model.vo.AddLimitVo;
...
@@ -10,21 +10,32 @@ import cn.wisenergy.model.vo.AddLimitVo;
import
cn.wisenergy.service.app.AliPayService
;
import
cn.wisenergy.service.app.AliPayService
;
import
cn.wisenergy.service.app.UserLimitService
;
import
cn.wisenergy.service.app.UserLimitService
;
import
cn.wisenergy.service.common.Common
;
import
cn.wisenergy.service.common.Common
;
import
com.alibaba.fastjson.JSON
;
import
com.alipay.api.AlipayApiException
;
import
com.alipay.api.AlipayClient
;
import
com.alipay.api.AlipayClient
;
import
com.alipay.api.AlipayResponse
;
import
com.alipay.api.DefaultAlipayClient
;
import
com.alipay.api.DefaultAlipayClient
;
import
com.alipay.api.domain.AlipayTradeWapPayModel
;
import
com.alipay.api.internal.util.AlipaySignature
;
import
com.alipay.api.internal.util.AlipaySignature
;
import
com.alipay.api.request.AlipayTradePagePayRequest
;
import
com.alipay.api.request.AlipayTradePagePayRequest
;
import
com.alipay.api.request.AlipayTradeWapPayRequest
;
import
com.alipay.api.response.AlipayTradePagePayResponse
;
import
com.alipay.api.response.AlipayTradePagePayResponse
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
lombok.extern.slf4j.Slf4j
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.stereotype.Service
;
import
org.springframework.stereotype.Service
;
import
springfox.documentation.schema.Entry
;
import
javax.servlet.http.HttpServletRequest
;
import
javax.servlet.http.HttpServletRequest
;
import
javax.servlet.http.HttpServletResponse
;
import
javax.servlet.http.HttpServletResponse
;
import
java.io.IOException
;
import
java.io.PrintWriter
;
import
java.math.BigDecimal
;
import
java.util.HashMap
;
import
java.util.HashMap
;
import
java.util.Iterator
;
import
java.util.Iterator
;
import
java.util.Map
;
import
java.util.Map
;
import
java.util.Set
;
@Slf4j
@Slf4j
@Service
@Service
...
@@ -33,26 +44,45 @@ public class AliPayServiceImpl implements AliPayService {
...
@@ -33,26 +44,45 @@ public class AliPayServiceImpl implements AliPayService {
@Autowired
@Autowired
private
UserLimitService
userLimitService
;
private
UserLimitService
userLimitService
;
@Autowired
@Autowired
private
PayRecordMapper
payRecordMapper
;
private
PayRecordMapper
payRecordMapper
;
//appid
@Value
(
"${aliPay.APP_ID}"
)
private
String
APP_ID
;
//公钥
@Value
(
"${aliPay.ALIPAY_PUBLIC_KEY}"
)
private
String
ALIPAY_PUBLIC_KEY
;
//密钥
@Value
(
"${aliPay.PRIVATE_KEY}"
)
private
String
PRIVATE_KEY
;
/***
* pc端支付宝支付
* @param payPageDto
* @param request
* @param httpResponse
* @return
*/
@Override
@Override
public
R
<
String
>
doPost
(
PayPageDto
payPageDto
,
HttpServletRequest
request
,
HttpServletResponse
httpResponse
)
{
public
R
<
String
>
doPost
(
PayPageDto
payPageDto
,
HttpServletRequest
request
,
HttpServletResponse
httpResponse
)
{
if
(
null
==
payPageDto
||
null
==
payPageDto
.
getTotal
())
{
if
(
null
==
payPageDto
||
null
==
payPageDto
.
getTotal
())
{
return
R
.
error
(
"人参不能为空!"
);
return
R
.
error
(
"人参不能为空!"
);
}
}
AlipayClient
alipayClient
=
new
DefaultAlipayClient
(
Common
.
PAY_URL
_CS
,
Common
.
APP_ID_CS
,
Common
.
PRIVATE_KEY_CS
,
"json"
,
"UTF-8"
,
Common
.
ALIPAY_PUBLIC_KEY_CS
,
"RSA2"
);
AlipayClient
alipayClient
=
new
DefaultAlipayClient
(
Common
.
PAY_URL
,
APP_ID
,
PRIVATE_KEY
,
"json"
,
CHARSET
,
ALIPAY_PUBLIC_KEY
,
"RSA2"
);
AlipayTradePagePayRequest
alipayRequest
=
new
AlipayTradePagePayRequest
();
AlipayTradePagePayRequest
alipayRequest
=
new
AlipayTradePagePayRequest
();
String
tradeNo
=
"21"
+
System
.
currentTimeMillis
();
String
tradeNo
=
"21"
+
System
.
currentTimeMillis
();
Double
amount
=
0.01
;
//支付成功跳转地址
alipayRequest
.
setReturnUrl
(
Common
.
RETURN_URL_PC
);
//支付回调地址
alipayRequest
.
setNotifyUrl
(
Common
.
NOTIFY_URL
);
//alipayRequest.setNotifyUrl(" http://tcdwak.natappfree.cc/pay/aliPayCallBack.do");
//创建API对应的request
alipayRequest
.
setReturnUrl
(
"http://domain.com/CallBack/return_url.jsp"
);
//在公共参数中设置回跳和通知地址
alipayRequest
.
setNotifyUrl
(
"http://x6kmrr.natappfree.cc/pay/aliPayCallBack.do"
);
alipayRequest
.
setBizContent
(
"{"
+
alipayRequest
.
setBizContent
(
"{"
+
"\"out_trade_no\":\""
+
tradeNo
+
"\","
+
"\"out_trade_no\":\""
+
tradeNo
+
"\","
+
"\"total_amount\":"
+
payPageDto
.
getTotal
()
+
","
+
"\"total_amount\":"
+
amount
+
","
+
"\"subject\":\"充值\","
+
"\"subject\":\"充值\","
+
"\"body\":\"充值\","
+
"\"body\":\"充值\","
+
"\"product_code\":\"FAST_INSTANT_TRADE_PAY\""
+
"\"product_code\":\"FAST_INSTANT_TRADE_PAY\""
+
...
@@ -68,7 +98,7 @@ public class AliPayServiceImpl implements AliPayService {
...
@@ -68,7 +98,7 @@ public class AliPayServiceImpl implements AliPayService {
httpResponse
.
getWriter
().
write
(
form
);
httpResponse
.
getWriter
().
write
(
form
);
httpResponse
.
getWriter
().
flush
();
httpResponse
.
getWriter
().
flush
();
httpResponse
.
getWriter
().
close
();
httpResponse
.
getWriter
().
close
();
if
(
response
.
isSuccess
())
{
if
(
response
.
isSuccess
())
{
System
.
out
.
println
(
"调用成功"
);
System
.
out
.
println
(
"调用成功"
);
//生成预支付订单,充值结果设为失败(result=1)
//生成预支付订单,充值结果设为失败(result=1)
PayRecord
payRecord
=
new
PayRecord
();
PayRecord
payRecord
=
new
PayRecord
();
...
@@ -78,73 +108,153 @@ public class AliPayServiceImpl implements AliPayService {
...
@@ -78,73 +108,153 @@ public class AliPayServiceImpl implements AliPayService {
payRecord
.
setType
(
payPageDto
.
getPayType
());
payRecord
.
setType
(
payPageDto
.
getPayType
());
payRecord
.
setUserId
(
payPageDto
.
getUserId
());
payRecord
.
setUserId
(
payPageDto
.
getUserId
());
payRecordMapper
.
add
(
payRecord
);
payRecordMapper
.
add
(
payRecord
);
return
R
.
ok
(
0
,
form
);
return
R
.
ok
(
"0"
,
form
);
}
else
{
return
R
.
error
(
"调用失败"
);
}
}
catch
(
Exception
e
)
{
return
R
.
ok
(
1
,
"调用失败"
);
}
}
/***
* 手机网页支付宝支付
* @param payPageDto
* @param request
* @param httpResponse
* @return
*/
@Override
public
R
<
String
>
wapAliPay
(
PayPageDto
payPageDto
,
HttpServletRequest
request
,
HttpServletResponse
httpResponse
)
{
if
(
null
==
payPageDto
||
null
==
payPageDto
.
getTotal
())
{
return
R
.
error
(
"人参不能为空!"
);
}
AlipayClient
alipayClient
=
new
DefaultAlipayClient
(
Common
.
PAY_URL
,
APP_ID
,
PRIVATE_KEY
,
"json"
,
CHARSET
,
ALIPAY_PUBLIC_KEY
,
"RSA2"
);
AlipayTradeWapPayRequest
alipayRequest
=
new
AlipayTradeWapPayRequest
();
String
tradeNo
=
"21"
+
System
.
currentTimeMillis
();
Double
amount
=
0.01
;
//支付成功跳转地址
alipayRequest
.
setReturnUrl
(
Common
.
RETURN_URL_WAP
);
//支付后回调地址
alipayRequest
.
setNotifyUrl
(
Common
.
NOTIFY_URL
);
alipayRequest
.
setBizContent
(
"{"
+
"\"out_trade_no\":\""
+
tradeNo
+
"\","
+
"\"total_amount\":"
+
amount
+
","
+
"\"subject\":\"充值\","
+
"\"body\":\"充值\","
+
"\"product_code\":\"QUICK_WAP_WAY\""
+
"}"
);
String
form
=
""
;
//调用SDK生成表单
try
{
AlipayResponse
response
=
alipayClient
.
pageExecute
(
alipayRequest
);
form
=
response
.
getBody
();
System
.
out
.
println
(
form
);
httpResponse
.
setContentType
(
"text/html;charset=UTF-8"
);
//直接将完整的表单html输出到页面
httpResponse
.
getWriter
().
write
(
form
);
httpResponse
.
getWriter
().
flush
();
httpResponse
.
getWriter
().
close
();
if
(
response
.
isSuccess
())
{
System
.
out
.
println
(
"调用成功"
);
//生成预支付订单,充值结果设为失败(result=1)
PayRecord
payRecord
=
new
PayRecord
();
payRecord
.
setMoney
(
payPageDto
.
getTotal
());
payRecord
.
setResult
(
1
);
payRecord
.
setTradeNo
(
tradeNo
);
payRecord
.
setType
(
payPageDto
.
getPayType
());
payRecord
.
setUserId
(
payPageDto
.
getUserId
());
payRecordMapper
.
add
(
payRecord
);
return
R
.
ok
(
"0"
,
form
);
}
else
{
}
else
{
System
.
out
.
println
(
"调用失败"
);
System
.
out
.
println
(
"调用失败"
);
return
R
.
error
(
"调用失败"
);
return
R
.
error
(
"调用失败"
);
}
}
}
catch
(
Exception
e
)
{
}
catch
(
Exception
e
)
{
return
R
.
ok
(
1
,
"调用失败"
);
return
R
.
ok
(
1
,
"调用失败"
);
}
}
}
}
@Override
@Override
public
R
<
String
>
query
(
PayQueryDto
payQueryDto
)
{
public
R
<
String
>
query
(
PayQueryDto
payQueryDto
)
{
return
null
;
return
null
;
}
}
/***
* 支付后回调方法
* @param response
* @param request
* @throws Exception
*/
@Override
@Override
public
R
<
String
>
aliPayCallBack
(
HttpServletResponse
response
,
HttpServletRequest
request
)
{
public
void
aliPayCallBack
(
HttpServletResponse
response
,
HttpServletRequest
request
)
throws
Exception
{
System
.
out
.
println
(
"支付宝回调成功"
);
PrintWriter
out
=
response
.
getWriter
(
);
try
{
System
.
out
.
println
(
"进入支付宝回调"
);
//获取支付宝POST过来反馈信息
//获取支付宝POST过来反馈信息
Map
<
String
,
String
>
params
=
new
HashMap
<
String
,
String
>();
Map
<
String
,
String
>
params
=
convertRequestParamsToMap
(
request
);
// 将异步通知中收到的待验证所有参数都存放到map中
Map
requestParams
=
request
.
getParameterMap
();
log
.
info
(
"支付宝回调,{}"
,
JSON
.
toJSONString
(
params
));
for
(
Iterator
iter
=
requestParams
.
keySet
().
iterator
();
iter
.
hasNext
();)
{
// 验证
String
name
=
(
String
)
iter
.
next
();
boolean
flag
=
AlipaySignature
.
rsaCheckV1
(
params
,
ALIPAY_PUBLIC_KEY
,
CHARSET
,
"RSA2"
);
String
[]
values
=
(
String
[])
requestParams
.
get
(
name
);
String
valueStr
=
""
;
for
(
int
i
=
0
;
i
<
values
.
length
;
i
++)
{
valueStr
=
(
i
==
values
.
length
-
1
)
?
valueStr
+
values
[
i
]
:
valueStr
+
values
[
i
]
+
","
;
}
//乱码解决,这段代码在出现乱码时使用。
//valueStr = new String(valueStr.getBytes("ISO-8859-1"), "utf-8");
params
.
put
(
name
,
valueStr
);
}
boolean
flag
=
AlipaySignature
.
rsaCheckV1
(
params
,
Common
.
ALIPAY_PUBLIC_KEY_CS
,
CHARSET
,
"RSA2"
);
// 获取支付宝的通知返回参数
// 获取支付宝的通知返回参数
String
order_no
=
request
.
getParameter
(
"out_trade_no"
);
// 获取订单号
String
order_no
=
request
.
getParameter
(
"out_trade_no"
);
// 获取订单号
if
(
flag
==
true
)
{
// 验证成功
String
trade_status
=
request
.
getParameter
(
"trade_status"
);
//获取订单状态
try
{
// 验证成功
if
(!
flag
||
!
"TRADE_SUCCESS"
.
equals
(
trade_status
))
{
out
.
print
(
"failure"
);
return
;
}
//返回成功后修改订单充值结果为0,保存查询次数
//返回成功后修改订单充值结果为0,保存查询次数
QueryWrapper
<
PayRecord
>
queryWrapper
=
new
QueryWrapper
<>();
QueryWrapper
<
PayRecord
>
queryWrapper
=
new
QueryWrapper
<>();
queryWrapper
.
eq
(
"trade_no"
,
order_no
);
queryWrapper
.
eq
(
"trade_no"
,
order_no
);
PayRecord
payRecord
=
payRecordMapper
.
selectOne
(
queryWrapper
);
PayRecord
payRecord
=
payRecordMapper
.
selectOne
(
queryWrapper
);
AddLimitVo
addLimitVo
=
new
AddLimitVo
();
AddLimitVo
addLimitVo
=
new
AddLimitVo
();
addLimitVo
.
setTradeNo
(
order_no
);
addLimitVo
.
setTradeNo
(
order_no
);
addLimitVo
.
setPayMoney
(
payRecord
.
getMoney
());
addLimitVo
.
setPayMoney
(
payRecord
.
getMoney
());
addLimitVo
.
setPayType
(
2
);
addLimitVo
.
setPayType
(
1
);
addLimitVo
.
setUserId
(
payRecord
.
getUserId
());
addLimitVo
.
setUserId
(
payRecord
.
getUserId
());
if
(
payRecord
.
getResult
()
!=
1
)
{
out
.
print
(
"failure"
);
return
;
}
R
<
Boolean
>
booleanR
=
userLimitService
.
addLimit
(
addLimitVo
);
R
<
Boolean
>
booleanR
=
userLimitService
.
addLimit
(
addLimitVo
);
if
(
booleanR
.
getCode
()==
1
)
{
if
(
booleanR
.
getCode
()
!=
0
)
{
return
R
.
error
(
"用户查询次数添加失败"
);
out
.
print
(
"failure"
);
return
;
}
out
.
print
(
"success"
);
}
}
return
R
.
ok
(
0
,
"充值成功"
);
}
catch
(
Exception
e
)
{
/***
System
.
out
.
println
(
"支付宝支付异常"
);
* 将request中的参数转换成Map
e
.
printStackTrace
();
* @param request
return
R
.
error
(
"支付宝支付异常"
);
* @return
*/
private
static
Map
<
String
,
String
>
convertRequestParamsToMap
(
HttpServletRequest
request
)
{
Map
<
String
,
String
>
retMap
=
new
HashMap
<
String
,
String
>();
Set
<
Map
.
Entry
<
String
,
String
[]>>
entries
=
request
.
getParameterMap
().
entrySet
();
for
(
Map
.
Entry
<
String
,
String
[]>
entry
:
entries
)
{
String
name
=
entry
.
getKey
();
String
[]
values
=
entry
.
getValue
();
int
valLen
=
values
.
length
;
if
(
valLen
==
1
)
{
retMap
.
put
(
name
,
values
[
0
]);
}
else
if
(
valLen
>
1
)
{
StringBuilder
sb
=
new
StringBuilder
();
for
(
String
val
:
values
)
{
sb
.
append
(
","
).
append
(
val
);
}
}
retMap
.
put
(
name
,
sb
.
toString
().
substring
(
1
));
}
else
{
retMap
.
put
(
name
,
""
);
}
}
response
.
getWriter
().
write
(
"success"
);
return
R
.
ok
(
0
,
"支付宝订单支付成功"
);
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
return
R
.
error
(
"支付宝支付异常"
);
}
}
return
retMap
;
}
}
}
}
wisenergy-service/src/main/java/cn/wisenergy/service/app/impl/TestWxPayServiceImpl.java
View file @
741523ea
package
cn
.
wisenergy
.
service
.
app
.
impl
;
package
cn
.
wisenergy
.
service
.
app
.
impl
;
import
cn.wisenergy.common.utils.Md5Util
;
import
cn.wisenergy.common.utils.R
;
import
cn.wisenergy.common.utils.R
;
import
cn.wisenergy.mapper.PayRecordMapper
;
import
cn.wisenergy.mapper.PayRecordMapper
;
import
cn.wisenergy.mapper.PriceMapper
;
import
cn.wisenergy.model.app.PayRecord
;
import
cn.wisenergy.model.app.PayRecord
;
import
cn.wisenergy.model.dto.PayPageDto
;
import
cn.wisenergy.model.dto.PayPageDto
;
import
cn.wisenergy.model.vo.AddLimitVo
;
import
cn.wisenergy.model.vo.AddLimitVo
;
import
cn.wisenergy.service.app.TestWxPayService
;
import
cn.wisenergy.service.app.TestWxPayService
;
import
cn.wisenergy.service.app.UserLimitService
;
import
cn.wisenergy.service.app.UserLimitService
;
import
cn.wisenergy.service.util.MapToXmlUtils
;
import
cn.wisenergy.service.util.MapToXmlUtils
;
import
cn.wisenergy.service.
wxpay.WxCommon
;
import
cn.wisenergy.service.
util.WxPayUtil
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
io.swagger.models.auth.I
n
;
import
com.fasterxml.jackson.core.JsonProcessingExceptio
n
;
import
lombok.extern.slf4j.Slf4j
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.lang.RandomStringUtils
;
import
org.apache.commons.lang.RandomStringUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
org.springframework.stereotype.Service
;
import
springfox.documentation.spring.web.json.Json
;
import
javax.servlet.ServletOutputStream
;
import
javax.servlet.ServletOutputStream
;
import
javax.servlet.http.HttpServletRequest
;
import
javax.servlet.http.HttpServletRequest
;
...
@@ -24,7 +23,7 @@ import javax.servlet.http.HttpServletResponse;
...
@@ -24,7 +23,7 @@ import javax.servlet.http.HttpServletResponse;
import
java.io.*
;
import
java.io.*
;
import
java.net.HttpURLConnection
;
import
java.net.HttpURLConnection
;
import
java.net.URL
;
import
java.net.URL
;
import
java.
text.DecimalFormat
;
import
java.
net.URLEncoder
;
import
java.util.*
;
import
java.util.*
;
...
@@ -34,14 +33,16 @@ import java.util.*;
...
@@ -34,14 +33,16 @@ import java.util.*;
@Service
@Service
@Slf4j
@Slf4j
public
class
TestWxPayServiceImpl
implements
TestWxPayService
{
public
class
TestWxPayServiceImpl
implements
TestWxPayService
{
//统一下单接口链接
public
static
String
basePath
=
"https://api.mch.weixin.qq.com/pay/unifiedorder"
;
public
static
String
basePath
=
"https://api.mch.weixin.qq.com/pay/unifiedorder"
;
@Autowired
@Autowired
private
UserLimitService
userLimitService
;
private
UserLimitService
userLimitService
;
@Autowired
@Autowired
private
PayRecordMapper
payRecordMapper
;
private
PayRecordMapper
payRecordMapper
;
/***
/***
*
支付
*
pc微信支付总流程
* @param payPageDto
* @param payPageDto
* @param response
* @param response
* @return
* @return
...
@@ -54,6 +55,20 @@ public class TestWxPayServiceImpl implements TestWxPayService {
...
@@ -54,6 +55,20 @@ public class TestWxPayServiceImpl implements TestWxPayService {
ServletOutputStream
sos
=
null
;
ServletOutputStream
sos
=
null
;
String
tradeNo
=
"21"
+
System
.
currentTimeMillis
();
String
tradeNo
=
"21"
+
System
.
currentTimeMillis
();
//生成预支付订单,充值结果设为失败(result=1)
//生成预支付订单,充值结果设为失败(result=1)
try
{
//生成【统一下单API】所需参数的接口
String
orderInfo
=
WxPayUtil
.
createOrderInfo
(
payPageDto
,
tradeNo
);
System
.
out
.
println
(
orderInfo
);
//调用统一下单接口
Map
<
String
,
String
>
map
=
unifiedOrder
(
orderInfo
);
String
return_msg
=
map
.
get
(
"return_msg"
);
//返回信息
String
return_code
=
map
.
get
(
"return_code"
);
//状态码
String
result_code
=
map
.
get
(
"result_code"
);
//业务结果
String
code_url
=
map
.
get
(
"code_url"
);
System
.
out
.
println
(
"return_msg:"
+
return_msg
);
log
.
info
(
"支付返回信息:"
+
return_msg
,
return_code
);
if
(
null
!=
map
&&
"SUCCESS"
.
equals
(
return_code
)
&&
"SUCCESS"
.
equals
(
result_code
))
{
PayRecord
payRecord
=
new
PayRecord
();
PayRecord
payRecord
=
new
PayRecord
();
payRecord
.
setMoney
(
payPageDto
.
getTotal
());
payRecord
.
setMoney
(
payPageDto
.
getTotal
());
payRecord
.
setResult
(
1
);
payRecord
.
setResult
(
1
);
...
@@ -61,10 +76,7 @@ public class TestWxPayServiceImpl implements TestWxPayService {
...
@@ -61,10 +76,7 @@ public class TestWxPayServiceImpl implements TestWxPayService {
payRecord
.
setType
(
payPageDto
.
getPayType
());
payRecord
.
setType
(
payPageDto
.
getPayType
());
payRecord
.
setUserId
(
payPageDto
.
getUserId
());
payRecord
.
setUserId
(
payPageDto
.
getUserId
());
payRecordMapper
.
add
(
payRecord
);
payRecordMapper
.
add
(
payRecord
);
try
{
}
String
orderInfo
=
createOrderInfo
(
payPageDto
,
tradeNo
);
//生成【统一下单API】所需参数的接口
System
.
out
.
println
(
orderInfo
);
String
code_url
=
unifiedOrder
(
orderInfo
);
//调用统一下单接口
sos
=
response
.
getOutputStream
();
sos
=
response
.
getOutputStream
();
//QRCodeUtil.encode(code_url, sos);//调用生成二维码的方法
//QRCodeUtil.encode(code_url, sos);//调用生成二维码的方法
System
.
out
.
println
(
"code_url:"
+
code_url
);
System
.
out
.
println
(
"code_url:"
+
code_url
);
...
@@ -76,44 +88,117 @@ public class TestWxPayServiceImpl implements TestWxPayService {
...
@@ -76,44 +88,117 @@ public class TestWxPayServiceImpl implements TestWxPayService {
}
}
/***
/***
* 生成统一下单格式的订单,生成一个XML格式的字符串
* h5微信支付总流程
* @param payPageDto
* @param request
* @param response
* @return
* @return
* @throws
UnsupportedEncod
ingException
* @throws
JsonProcess
ingException
*/
*/
public
String
createOrderInfo
(
PayPageDto
payPageDto
,
String
tradeNo
)
throws
UnsupportedEncodingException
{
@Override
public
R
<
String
>
h5WxPay
(
PayPageDto
payPageDto
,
HttpServletRequest
request
,
HttpServletResponse
response
)
{
if
(
null
==
payPageDto
||
null
==
payPageDto
.
getTotal
()){
return
R
.
error
(
"入参不能为空"
);
}
ServletOutputStream
sos
=
null
;
String
tradeNo
=
"21"
+
System
.
currentTimeMillis
();
//生成预支付订单,充值结果设为失败(result=1)
try
{
//生成【统一下单API】所需参数的接口
String
orderInfo
=
WxPayUtil
.
createOrderInfoH5
(
payPageDto
,
tradeNo
,
request
);
System
.
out
.
println
(
orderInfo
);
//调用统一下单接口
Map
<
String
,
String
>
map
=
unifiedOrder
(
orderInfo
);
String
return_msg
=
map
.
get
(
"return_msg"
);
//返回信息
String
return_code
=
map
.
get
(
"return_code"
);
//状态码
String
result_code
=
map
.
get
(
"result_code"
);
//业务结果
String
urlString
=
URLEncoder
.
encode
(
"http://www.baidu.com"
,
"GBK"
);
String
mweb_url
=
map
.
get
(
"mweb_url"
)+
"&redirect_url="
+
urlString
;
log
.
info
(
"支付返回信息:"
,
return_msg
,
"状态码:"
,
return_code
);
if
(
null
!=
map
&&
"SUCCESS"
.
equals
(
return_code
)
&&
"SUCCESS"
.
equals
(
result_code
))
{
PayRecord
payRecord
=
new
PayRecord
();
payRecord
.
setMoney
(
payPageDto
.
getTotal
());
payRecord
.
setResult
(
1
);
payRecord
.
setTradeNo
(
tradeNo
);
payRecord
.
setType
(
payPageDto
.
getPayType
());
payRecord
.
setUserId
(
payPageDto
.
getUserId
());
payRecordMapper
.
add
(
payRecord
);
}
System
.
out
.
println
(
"mweb_url:"
+
mweb_url
);
return
R
.
ok
(
"0"
,
mweb_url
);
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
return
R
.
error
(
"获取mweb_url失败"
);
}
}
/***
* 小程序微信支付总流程
* @param payPageDto
* @param request
* @param response
* @return
* @throws JsonProcessingException
*/
@Override
public
R
<
String
>
WxPayApplets
(
PayPageDto
payPageDto
,
HttpServletRequest
request
,
HttpServletResponse
response
)
{
if
(
null
==
payPageDto
||
null
==
payPageDto
.
getTotal
()){
return
R
.
error
(
"入参不能为空"
);
}
//随机字符串
String
nonce_str
=
RandomStringUtils
.
randomAlphanumeric
(
16
);
String
nonce_str
=
RandomStringUtils
.
randomAlphanumeric
(
16
);
String
tradeNo
=
"21"
+
System
.
currentTimeMillis
();
//生成预支付订单,充值结果设为失败(result=1)
try
{
//生成【统一下单API】所需参数的接口
String
orderInfo
=
WxPayUtil
.
createOrderInfoWx
(
payPageDto
,
tradeNo
,
request
,
nonce_str
);
System
.
out
.
println
(
orderInfo
);
//调用统一下单接口
Map
<
String
,
String
>
map
=
unifiedOrder
(
orderInfo
);
String
return_msg
=
map
.
get
(
"return_msg"
);
//返回信息
String
return_code
=
map
.
get
(
"return_code"
);
//状态码
String
result_code
=
map
.
get
(
"result_code"
);
//业务结果
SortedMap
<
String
,
String
>
parameters
=
new
TreeMap
<
String
,
String
>();
log
.
info
(
"支付返回信息:"
,
return_msg
,
"状态码:"
,
return_code
);
parameters
.
put
(
"appid"
,
WxCommon
.
APP_ID
);
if
(
null
!=
map
&&
"SUCCESS"
.
equals
(
return_code
)
&&
"SUCCESS"
.
equals
(
result_code
))
{
parameters
.
put
(
"mch_id"
,
WxCommon
.
MCHID
);
PayRecord
payRecord
=
new
PayRecord
();
parameters
.
put
(
"body"
,
"充值"
);
payRecord
.
setMoney
(
payPageDto
.
getTotal
());
parameters
.
put
(
"out_trade_no"
,
tradeNo
);
payRecord
.
setResult
(
1
);
parameters
.
put
(
"nonce_str"
,
nonce_str
);
payRecord
.
setTradeNo
(
tradeNo
);
DecimalFormat
df
=
new
DecimalFormat
(
"#"
);
payRecord
.
setType
(
payPageDto
.
getPayType
());
parameters
.
put
(
"total_fee"
,
df
.
format
((
payPageDto
.
getTotal
())*
100
));
payRecord
.
setUserId
(
payPageDto
.
getUserId
());
parameters
.
put
(
"notify_url"
,
WxCommon
.
NOTIFY_URL
);
payRecordMapper
.
add
(
payRecord
);
parameters
.
put
(
"trade_type"
,
"NATIVE"
);
SortedMap
<
String
,
String
>
mapParams
=
new
TreeMap
<
String
,
String
>();
mapParams
.
put
(
"return_code"
,
return_code
);
mapParams
.
put
(
"return_msg"
,
return_msg
);
String
prepay_id
=
map
.
get
(
"prepay_id"
);
//返回的预付单信息 小程序端使用
mapParams
.
put
(
"nonceStr"
,
nonce_str
);
mapParams
.
put
(
"package"
,
"prepay_id="
+
prepay_id
);
Long
timeStamp
=
new
Date
().
getTime
();
mapParams
.
put
(
"timeStamp"
,
timeStamp
+
""
);
//这边要将返回的时间戳转化成字符串,不然小程序端调用wx.requestPayment方法会报签名错误
String
characterEncoding
=
"UTF-8"
;
String
characterEncoding
=
"UTF-8"
;
String
sign
=
createSign
(
characterEncoding
,
parameters
);
String
paySign
=
WxPayUtil
.
createSign
(
characterEncoding
,
mapParams
);
parameters
.
put
(
"sign"
,
sign
);
//签名
mapParams
.
put
(
"paySign"
,
paySign
);
//将订单对象转为xml格式
mapParams
.
put
(
"appid"
,
""
);
String
s
=
null
;
try
{
return
MapToXmlUtils
.
mapToXml
(
parameters
);
//maptoXml方法是微信sdk自带的方法
}
System
.
out
.
println
(
"mweb_url:"
);
return
R
.
ok
(
"0"
);
}
catch
(
Exception
e
)
{
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
e
.
printStackTrace
();
return
R
.
error
(
"获取mweb_url失败"
);
}
}
return
new
String
(
s
.
getBytes
(
"UTF-8"
));
}
}
/***
/***
* 统一下单
*
微信
统一下单
* @param info
* @param info
* @return
* @return
* @throws Exception
* @throws Exception
*/
*/
public
String
unifiedOrder
(
String
info
)
throws
Exception
{
public
Map
<
String
,
String
>
unifiedOrder
(
String
info
)
throws
Exception
{
HttpURLConnection
conn
=
(
HttpURLConnection
)
new
URL
(
basePath
).
openConnection
();
HttpURLConnection
conn
=
(
HttpURLConnection
)
new
URL
(
basePath
).
openConnection
();
//加入数据
//加入数据
conn
.
setRequestMethod
(
"POST"
);
conn
.
setRequestMethod
(
"POST"
);
...
@@ -133,47 +218,13 @@ public class TestWxPayServiceImpl implements TestWxPayService {
...
@@ -133,47 +218,13 @@ public class TestWxPayServiceImpl implements TestWxPayService {
sb
.
append
(
line
);
sb
.
append
(
line
);
}
}
Map
<
String
,
String
>
map
=
MapToXmlUtils
.
xmlToMap
(
sb
.
toString
());
Map
<
String
,
String
>
map
=
MapToXmlUtils
.
xmlToMap
(
sb
.
toString
());
//返回的部分字段
return
map
;
String
return_msg
=
map
.
get
(
"return_msg"
);
//返回信息
String
return_code
=
map
.
get
(
"return_code"
);
//状态码
String
result_code
=
map
.
get
(
"result_code"
);
//业务结果
String
code_url
=
map
.
get
(
"code_url"
);
//根据微信文档return_code 和result_code都为SUCCESS的时候才会返回code_url
if
(
null
!=
map
&&
"SUCCESS"
.
equals
(
return_code
)
&&
"SUCCESS"
.
equals
(
result_code
))
{
return
code_url
;
}
else
{
System
.
out
.
println
(
return_msg
);
return
null
;
}
}
}
/***
* 生成签名
* @param characterEncoding
* @param parameters
* @return
*/
public
static
String
createSign
(
String
characterEncoding
,
SortedMap
<
String
,
String
>
parameters
){
StringBuffer
sb
=
new
StringBuffer
();
Set
es
=
parameters
.
entrySet
();
//所有参与传参的参数按照accsii排序(升序)
Iterator
it
=
es
.
iterator
();
while
(
it
.
hasNext
())
{
Map
.
Entry
entry
=
(
Map
.
Entry
)
it
.
next
();
String
k
=
(
String
)
entry
.
getKey
();
Object
v
=
entry
.
getValue
();
if
(
null
!=
v
&&
!
""
.
equals
(
v
)
&&
!
"sign"
.
equals
(
k
)
&&
!
"key"
.
equals
(
k
))
{
sb
.
append
(
k
+
"="
+
v
+
"&"
);
}
}
sb
.
append
(
"key="
+
WxCommon
.
PRIVATE_KEY
);
String
sign
=
Md5Util
.
MD5Encode
(
sb
.
toString
(),
characterEncoding
).
toUpperCase
();
System
.
out
.
println
(
"签名:"
+
sign
);
return
sign
;
}
/***
/***
* 支付成功回调
*
微信
支付成功回调
* @param request
* @param request
* @param response
* @param response
* @return
* @return
...
...
wisenergy-service/src/main/java/cn/wisenergy/service/app/impl/UserLimitServiceImpl.java
View file @
741523ea
...
@@ -124,7 +124,7 @@ public class UserLimitServiceImpl extends ServiceImpl<UserLimitMapper, UserLimit
...
@@ -124,7 +124,7 @@ public class UserLimitServiceImpl extends ServiceImpl<UserLimitMapper, UserLimit
//增加用户总查询次数
//增加用户总查询次数
Integer
total
=
userLimit
.
getTotalLimit
()
+
price
.
getUseLimit
();
Integer
total
=
userLimit
.
getTotalLimit
()
+
price
.
getUseLimit
();
userLimit
.
setUseLimit
(
usableNumber
);
userLimit
.
setUs
abl
eLimit
(
usableNumber
);
userLimit
.
setTotalLimit
(
total
);
userLimit
.
setTotalLimit
(
total
);
//更新充值卡状态和用户查询次数及增加充值记录
//更新充值卡状态和用户查询次数及增加充值记录
...
...
wisenergy-service/src/main/java/cn/wisenergy/service/app/impl/WxPayServiceImpl.java
View file @
741523ea
...
@@ -107,7 +107,7 @@ public class WxPayServiceImpl implements WxPayService {
...
@@ -107,7 +107,7 @@ public class WxPayServiceImpl implements WxPayService {
String
nonceStr
=
UUID
.
randomUUID
().
toString
().
replace
(
"-"
,
""
);
String
nonceStr
=
UUID
.
randomUUID
().
toString
().
replace
(
"-"
,
""
);
String
method
=
"POST"
;
String
method
=
"POST"
;
String
tradeNo
=
"21"
+
System
.
currentTimeMillis
();
String
tradeNo
=
"21"
+
System
.
currentTimeMillis
();
HttpUrl
httpurl
=
HttpUrl
.
parse
(
WxCommon
.
WX_PAY_URL
);
HttpUrl
httpurl
=
HttpUrl
.
parse
(
WxCommon
.
WX_PAY_URL
_pc
);
//构造签名参数
//构造签名参数
JSONObject
jsonObject
=
new
JSONObject
();
JSONObject
jsonObject
=
new
JSONObject
();
...
@@ -162,13 +162,13 @@ public class WxPayServiceImpl implements WxPayService {
...
@@ -162,13 +162,13 @@ public class WxPayServiceImpl implements WxPayService {
@Override
@Override
public
R
<
String
>
wx_Pay
(
PayPageDto
payPageDto
)
throws
IOException
,
NoSuchAlgorithmException
,
SignatureException
,
InvalidKeySpecException
,
InvalidKeyException
,
IllegalBlockSizeException
{
public
R
<
String
>
wx_Pay
(
PayPageDto
payPageDto
)
throws
IOException
,
NoSuchAlgorithmException
,
SignatureException
,
InvalidKeySpecException
,
InvalidKeyException
,
IllegalBlockSizeException
{
HttpPost
httpPost
=
new
HttpPost
(
WxCommon
.
WX_PAY_URL
);
HttpPost
httpPost
=
new
HttpPost
(
WxCommon
.
WX_PAY_URL
_pc
);
long
timestamp
=
System
.
currentTimeMillis
()
/
1000
;
long
timestamp
=
System
.
currentTimeMillis
()
/
1000
;
String
nonceStr
=
UUID
.
randomUUID
().
toString
().
replace
(
"-"
,
""
);
String
nonceStr
=
UUID
.
randomUUID
().
toString
().
replace
(
"-"
,
""
);
String
method
=
"POST"
;
String
method
=
"POST"
;
String
tradeNo
=
"21"
+
System
.
currentTimeMillis
();
String
tradeNo
=
"21"
+
System
.
currentTimeMillis
();
HttpUrl
httpurl
=
HttpUrl
.
parse
(
WxCommon
.
WX_PAY_URL
);
HttpUrl
httpurl
=
HttpUrl
.
parse
(
WxCommon
.
WX_PAY_URL
_pc
);
// 请求body参数
// 请求body参数
String
reqdata
=
"{"
String
reqdata
=
"{"
...
...
wisenergy-service/src/main/java/cn/wisenergy/service/common/Common.java
View file @
741523ea
...
@@ -30,44 +30,36 @@ public class Common {
...
@@ -30,44 +30,36 @@ public class Common {
public
static
final
long
SMS_TIMEOUT
=
1200
;
public
static
final
long
SMS_TIMEOUT
=
1200
;
/**
/**
* 支付宝
支付
app_id
* 支付宝
--
app_id
*/
*/
public
static
final
String
PAY_URL
=
"https://openapi.alipay.com/gateway.do"
;
public
static
final
String
PAY_URL
=
"https://openapi.alipay.com/gateway.do"
;
public
static
final
String
APP_ID
=
"2021002126609937"
;
/***
public
static
final
String
ALIPAY_PUBLIC_KEY
=
"MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2cUDFyw7sLp"
+
* 支付宝--回调地址
"TpICDURNefRfzr7I7qO5Spq6HwdyFbVv5m6wVzt3fXYTcDrVUuzfbV7+rrXqnvk7LNOp10qPtUyHyZKO2jTBBcUK5H0RPNz"
+
*/
"s1XInKaSTAznGH8dEAk6yQiwhSDpQzwoOq1Ool2MQocdkcBWwAMEcEUByIbJ4ABsrwXdmkgu2hDHR/GgLvarUp1zOXfZkaTK//L"
+
"1GUI5uCI+/omcqMPDIOwd8DfcNr0TKlXfAEixp9eVuU/b09b7vW7O9Vh+w0gmy5FN+BWX/JaRRL1DhRqbHl7Sl4/oGu1yjfQA5U"
+
public
static
final
String
NOTIFY_URL
=
"http://111.203.232.171:8997/pay/aliPayCallBack.do"
;
"8jXBgd+QjwdUiAXVwPdESS/AUbPWE517eH5FtQIDAQAB"
;
/***
public
static
final
String
PRIVATE_KEY
=
"MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQDAzZQsv"
+
* 支付宝--pc端支付成功跳转地址
"7wKd/01D8YPqrMcevfi0rS81H4NObDkF/Y37ii+/V1vlzODiTQajeCWOM42kijTSFHiietwx7PRa57GI/BzhRbs3MeK"
+
*/
"fvOkFVhUHklfOb9vT9E/y9TE7oWmbQVJThcytXerJbC95LDchJtBxQula/wmp0pwgkwFHM5IxNbT1Oh9UWKBn6"
+
public
static
final
String
RETURN_URL_PC
=
"http://111.203.232.171:8999/wallet"
;
"OoOuHhgFhO19l9+X4hJtb/rjKl8/K4ULrlxPfrnX75tbJryBS1VnkxiWyHTara1WkRDIKmLRSrHeDG1hh1NKMOA"
+
"5jc2sfNOEuMhsgC1FY9sxd/Ap3dBp3TP3drAYpshaweYQwK9PyQ8b/TYgccIclgsJJ0BxMtAgMBAAECggEAD6sl"
+
/***
"VZWnZHpn234SrIdE0xWzO33ALnBeZhjAJWlFGzqBmTPh+gWhrBjkYRwSmmK3b3vlUXZZIT3wIlQ4ataCKrwU+G"
+
* 支付宝--手机网页支付成功跳转地址
"5idJFkrf6vMjCB4yQq9lAtHJCyAqs/+VkhB2touJJeFELnHMONX4FMVj94lpm63pCuBz4lMIuGPgwfP46Lgiuy4"
+
*/
"xOhcczcr3jwUmaVJvvDVtDJ477gsr/P/HhidCVwBE+vPovFmZ/cbI8ud31Ta2P7VFvrJKheL36GEJ1c1cHE7gcS"
+
public
static
final
String
RETURN_URL_WAP
=
"http://111.203.232.171:8999/#/history"
;
"P7KsuzXfQP/6KjqM6QhWHem0s0vOUaplPrPhEArhmfhjqukD/U2lBTHzmE7iUlmPHEQRbQdwJIk4SQKBgQDgjd"
+
"+VxxJ8pYigvyDK+OiXwA8hKwMiQGhA1XexjBnf2rTEimBwMNU87lKmsgCRsv26DAiVyPqiA5R2nPL3N4Sk8k7f"
+
"KD6gRBzC1/91XtI2HsljdGZemW1V/4D5o2Su9lmsPl3UV8U54izp5JzerXB+5sULpfKyKf5iVJtb+a7adwKBgQ"
+
"DbzXJXGMGc052StU4CwKeKElhTdB8uYbeML2Em0bwh1jZXwD/s2X7m8LAkOB2xaKQqrxjipcArIeAylI7xeEx24"
+
"MVDk3C3BnZaZoiuvvWr0caGQHE0JHvtpCrs2xoXm7wMNsVLjc345ssEQM0ytVXsx/PcA1WwwrBAQNFiH4fEewK"
+
"BgQDKBbm+lYADViXKgMlu8mrHg8nYzEqgeROSKLrrqCDrLWduXxQOO1DM5ZjEUeaDLmZpCER9BXi/Y7sgz2kjk"
+
"vYqM7lTuXBGXaEGhq9Ul/9FI4OJj4I934jnUtxlO2PsqMPaW62syV4uClbgAoZDLATGlrV2GlFziqZLLtUq9UI"
+
"jVwKBgQCmZGSGYotO+TNz+CRSGR27fB+5LVLdfcPBL6zQAj31L4B79WFvH0bd9J6jDIgN4TVFyr9/9BIBlOdv4t5"
+
"DFdpss8MhYOAW7aFy1ePqxUydAXTT9Ly9yFC4mWqVW1fpP0+fv2ajx3mBTtWpJpUwKe4eDVAh4bRg10EtouPe8B"
+
"eLOQKBgQCwsHZbrfgm8qrAhhoqPkxHHUDcQVhWpcBrv49ghpPLTsEPrOnYsFMCKb0nJc2goJ"
+
"BQIT4QMu62i1jOInaIZyrf/1H3WuWhjI3SjObHiz1a0rmuCrFMPCpnAVlIYJvmAyrGJIvSSLEN33mUZnq1z4REgjn0FlzS0FMOVDRVAeMm7w=="
;
/**
/**
* 沙箱 --支付宝
支付app_id
* 沙箱 --支付宝
*/
*/
public
static
final
String
APP_ID_CS
=
"2016101300675128"
;
public
static
final
String
APP_ID_CS
=
"2016101300675128"
;
public
static
final
String
PAY_URL_CS
=
"https://openapi.alipaydev.com/gateway.do"
;
public
static
final
String
ALIPAY_PUBLIC_KEY_CS
=
"MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQE"
+
public
static
final
String
ALIPAY_PUBLIC_KEY_CS
=
"MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQE"
+
"AovyCboYeJzNSUjBJmMss2NHo4JgAnn+cqnEUZFEeIO0u1JDGsxE3NLYwU54fM8OQunf3S6RxzIjZ/9jAaUtu"
+
"AovyCboYeJzNSUjBJmMss2NHo4JgAnn+cqnEUZFEeIO0u1JDGsxE3NLYwU54fM8OQunf3S6RxzIjZ/9jAaUtu"
+
"LjVmJBAa3ac5leHpm5LKWl0olKYER3qZTJQFgoRymfZHzVqqDoVsnFJScfsNR7XDD9bsFiHa9R+c+fI+pPapHK"
+
"LjVmJBAa3ac5leHpm5LKWl0olKYER3qZTJQFgoRymfZHzVqqDoVsnFJScfsNR7XDD9bsFiHa9R+c+fI+pPapHK"
+
...
@@ -95,5 +87,5 @@ public class Common {
...
@@ -95,5 +87,5 @@ public class Common {
"TFmmjrgNNXMiqhVZBxVf+GwwHdI0Rz8OukagIHeCHdG6nwu2aW+B9NsDhusiXjwU1rb28l6KNHRZqQ74PVREYyU"
+
"TFmmjrgNNXMiqhVZBxVf+GwwHdI0Rz8OukagIHeCHdG6nwu2aW+B9NsDhusiXjwU1rb28l6KNHRZqQ74PVREYyU"
+
"hTc2T2fobY0qmPBy2CIrO3gL4skn+ZZLHaUeK3sinQ="
;
"hTc2T2fobY0qmPBy2CIrO3gL4skn+ZZLHaUeK3sinQ="
;
public
static
final
String
PAY_URL_CS
=
"https://openapi.alipaydev.com/gateway.do"
;
}
}
wisenergy-service/src/main/java/cn/wisenergy/service/common/VolunteerManager.java
View file @
741523ea
...
@@ -20,6 +20,7 @@ import org.springframework.stereotype.Component;
...
@@ -20,6 +20,7 @@ import org.springframework.stereotype.Component;
import
org.springframework.transaction.annotation.Transactional
;
import
org.springframework.transaction.annotation.Transactional
;
import
java.util.ArrayList
;
import
java.util.ArrayList
;
import
java.util.Date
;
import
java.util.List
;
import
java.util.List
;
import
java.util.stream.Collectors
;
import
java.util.stream.Collectors
;
...
@@ -168,8 +169,10 @@ public class VolunteerManager {
...
@@ -168,8 +169,10 @@ public class VolunteerManager {
QueryWrapper
<
PayRecord
>
queryWrapper
=
new
QueryWrapper
<>();
QueryWrapper
<
PayRecord
>
queryWrapper
=
new
QueryWrapper
<>();
queryWrapper
.
eq
(
"trade_no"
,
payRecord
.
getTradeNo
());
queryWrapper
.
eq
(
"trade_no"
,
payRecord
.
getTradeNo
());
PayRecord
byTradeNo
=
payRecordMapper
.
selectOne
(
queryWrapper
);
PayRecord
byTradeNo
=
payRecordMapper
.
selectOne
(
queryWrapper
);
payRecord
.
setId
(
byTradeNo
.
getId
());
int
pay
=
0
;
int
pay
=
0
;
if
(
null
!=
byTradeNo
){
if
(
null
!=
byTradeNo
){
payRecord
.
setUpdateTime
(
new
Date
());
pay
=
payRecordMapper
.
updateById
(
payRecord
);
pay
=
payRecordMapper
.
updateById
(
payRecord
);
}
else
{
}
else
{
pay
=
payRecordMapper
.
add
(
payRecord
);
pay
=
payRecordMapper
.
add
(
payRecord
);
...
...
wisenergy-service/src/main/java/cn/wisenergy/service/util/WxPayUtil.java
View file @
741523ea
package
cn
.
wisenergy
.
service
.
util
;
package
cn
.
wisenergy
.
service
.
util
;
import
cn.wisenergy.common.utils.Md5Util
;
import
cn.wisenergy.model.dto.PayPageDto
;
import
cn.wisenergy.model.dto.PayPageDto
;
import
cn.wisenergy.service.httpClient.WechatPayHttpClientBuilder
;
import
cn.wisenergy.service.httpClient.WechatPayHttpClientBuilder
;
import
cn.wisenergy.service.httpClient.auth.AutoUpdateCertificatesVerifier
;
import
cn.wisenergy.service.httpClient.auth.AutoUpdateCertificatesVerifier
;
...
@@ -9,8 +10,9 @@ import cn.wisenergy.service.httpClient.auth.WechatPay2Credentials;
...
@@ -9,8 +10,9 @@ import cn.wisenergy.service.httpClient.auth.WechatPay2Credentials;
import
cn.wisenergy.service.httpClient.auth.WechatPay2Validator
;
import
cn.wisenergy.service.httpClient.auth.WechatPay2Validator
;
import
cn.wisenergy.service.httpClient.util.PemUtil
;
import
cn.wisenergy.service.httpClient.util.PemUtil
;
import
cn.wisenergy.service.wxpay.WxCommon
;
import
cn.wisenergy.service.wxpay.WxCommon
;
import
com.
alibaba.fastjson.JSONObject
;
import
com.
fasterxml.jackson.core.JsonProcessingException
;
import
okhttp3.HttpUrl
;
import
okhttp3.HttpUrl
;
import
org.apache.commons.lang.RandomStringUtils
;
import
org.apache.http.HttpEntity
;
import
org.apache.http.HttpEntity
;
import
org.apache.http.client.methods.CloseableHttpResponse
;
import
org.apache.http.client.methods.CloseableHttpResponse
;
import
org.apache.http.client.methods.HttpPost
;
import
org.apache.http.client.methods.HttpPost
;
...
@@ -19,7 +21,9 @@ import org.apache.http.entity.StringEntity;
...
@@ -19,7 +21,9 @@ import org.apache.http.entity.StringEntity;
import
org.apache.http.impl.client.CloseableHttpClient
;
import
org.apache.http.impl.client.CloseableHttpClient
;
import
org.apache.http.util.EntityUtils
;
import
org.apache.http.util.EntityUtils
;
import
org.junit.After
;
import
org.junit.After
;
import
org.springframework.beans.factory.annotation.Value
;
import
javax.servlet.http.HttpServletRequest
;
import
java.io.ByteArrayInputStream
;
import
java.io.ByteArrayInputStream
;
import
java.io.IOException
;
import
java.io.IOException
;
import
java.io.UnsupportedEncodingException
;
import
java.io.UnsupportedEncodingException
;
...
@@ -28,11 +32,17 @@ import java.security.NoSuchAlgorithmException;
...
@@ -28,11 +32,17 @@ import java.security.NoSuchAlgorithmException;
import
java.security.PrivateKey
;
import
java.security.PrivateKey
;
import
java.security.SignatureException
;
import
java.security.SignatureException
;
import
java.security.spec.InvalidKeySpecException
;
import
java.security.spec.InvalidKeySpecException
;
import
java.util.UUID
;
import
java.text.DecimalFormat
;
import
java.util.*
;
public
class
WxPayUtil
{
public
class
WxPayUtil
{
@Value
(
"${wxPay.APP_ID}"
)
private
static
String
appid
;
@Value
(
"${wxPay.MCH_ID}"
)
private
static
String
mchid
;
@Value
(
"${wxPay.PRIVATE_KEY}"
)
private
static
String
key
;
/**
/**
* 商户号
* 商户号
*/
*/
...
@@ -80,13 +90,13 @@ public class WxPayUtil {
...
@@ -80,13 +90,13 @@ public class WxPayUtil {
}
}
public
static
void
main
(
String
[]
args
)
throws
IOException
,
NoSuchAlgorithmException
,
SignatureException
,
InvalidKeySpecException
,
InvalidKeyException
{
public
static
void
main
(
String
[]
args
)
throws
IOException
,
NoSuchAlgorithmException
,
SignatureException
,
InvalidKeySpecException
,
InvalidKeyException
{
HttpPost
httpPost
=
new
HttpPost
(
WxCommon
.
WX_PAY_URL
);
HttpPost
httpPost
=
new
HttpPost
(
WxCommon
.
WX_PAY_URL
_pc
);
long
timestamp
=
System
.
currentTimeMillis
()
/
1000
;
long
timestamp
=
System
.
currentTimeMillis
()
/
1000
;
String
nonceStr
=
UUID
.
randomUUID
().
toString
().
replace
(
"-"
,
""
);
String
nonceStr
=
UUID
.
randomUUID
().
toString
().
replace
(
"-"
,
""
);
String
method
=
"POST"
;
String
method
=
"POST"
;
String
tradeNo
=
"21"
+
System
.
currentTimeMillis
();
String
tradeNo
=
"21"
+
System
.
currentTimeMillis
();
HttpUrl
httpurl
=
HttpUrl
.
parse
(
WxCommon
.
WX_PAY_URL
);
HttpUrl
httpurl
=
HttpUrl
.
parse
(
WxCommon
.
WX_PAY_URL
_pc
);
// 请求body参数
// 请求body参数
String
reqdata
=
"{"
String
reqdata
=
"{"
...
@@ -169,4 +179,149 @@ public class WxPayUtil {
...
@@ -169,4 +179,149 @@ public class WxPayUtil {
response
.
close
();
response
.
close
();
}
}
}
}
/***
* pc端生成统一下单格式的订单,生成一个XML格式的字符串
* @return
* @throws UnsupportedEncodingException
*/
public
static
String
createOrderInfo
(
PayPageDto
payPageDto
,
String
tradeNo
)
throws
UnsupportedEncodingException
{
String
nonce_str
=
RandomStringUtils
.
randomAlphanumeric
(
16
);
SortedMap
<
String
,
String
>
parameters
=
new
TreeMap
<
String
,
String
>();
parameters
.
put
(
"appid"
,
WxCommon
.
APP_ID
);
parameters
.
put
(
"mchid"
,
mchId
);
parameters
.
put
(
"body"
,
"充值"
);
parameters
.
put
(
"out_trade_no"
,
tradeNo
);
parameters
.
put
(
"nonce_str"
,
nonce_str
);
DecimalFormat
df
=
new
DecimalFormat
(
"#"
);
//parameters.put("total_fee", df.format(payPageDto.getTotal()*100));
parameters
.
put
(
"total_fee"
,
df
.
format
(
1
));
parameters
.
put
(
"notify_url"
,
WxCommon
.
NOTIFY_URL
);
parameters
.
put
(
"trade_type"
,
"NATIVE"
);
String
characterEncoding
=
"UTF-8"
;
String
sign
=
createSign
(
characterEncoding
,
parameters
);
parameters
.
put
(
"sign"
,
sign
);
//签名
//将订单对象转为xml格式
String
s
=
null
;
try
{
return
MapToXmlUtils
.
mapToXml
(
parameters
);
//maptoXml方法是微信sdk自带的方法
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
return
new
String
(
s
.
getBytes
(
"UTF-8"
));
}
/***
* h5生成统一下单格式的订单,生成一个XML格式的字符串
* @return
* @throws UnsupportedEncodingException
*/
public
static
String
createOrderInfoH5
(
PayPageDto
payPageDto
,
String
tradeNo
,
HttpServletRequest
request
)
throws
UnsupportedEncodingException
,
JsonProcessingException
{
String
nonce_str
=
RandomStringUtils
.
randomAlphanumeric
(
16
);
String
sceneInfo
=
"{'h5_info':{'type':'WAP','wap_url': 'http://111.203.232.171:8999/','wap_name': '充值'}}"
;
String
spbill_create_ip
=
getRealIp
(
request
);
SortedMap
<
String
,
String
>
parameters
=
new
TreeMap
<
String
,
String
>();
parameters
.
put
(
"appid"
,
appid
);
parameters
.
put
(
"mchid"
,
mchid
);
parameters
.
put
(
"body"
,
"充值"
);
parameters
.
put
(
"out_trade_no"
,
tradeNo
);
parameters
.
put
(
"nonce_str"
,
nonce_str
);
DecimalFormat
df
=
new
DecimalFormat
(
"#"
);
//parameters.put("total_fee", df.format(payPageDto.getTotal()*100));
parameters
.
put
(
"total_fee"
,
df
.
format
(
1
));
parameters
.
put
(
"notify_url"
,
WxCommon
.
NOTIFY_URL
);
parameters
.
put
(
"trade_type"
,
"MWEB"
);
parameters
.
put
(
"scene_info"
,
sceneInfo
);
parameters
.
put
(
"spbill_create_ip"
,
spbill_create_ip
);
String
characterEncoding
=
"UTF-8"
;
String
sign
=
createSign
(
characterEncoding
,
parameters
);
parameters
.
put
(
"sign"
,
sign
);
//签名
//将订单对象转为xml格式
String
s
=
null
;
try
{
return
MapToXmlUtils
.
mapToXml
(
parameters
);
//maptoXml方法是微信sdk自带的方法
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
return
new
String
(
s
.
getBytes
(
"UTF-8"
));
}
/***
* 小程序生成统一下单格式的订单,生成一个XML格式的字符串
* @return
* @throws UnsupportedEncodingException
*/
public
static
String
createOrderInfoWx
(
PayPageDto
payPageDto
,
String
tradeNo
,
HttpServletRequest
request
,
String
nonce_str
)
throws
UnsupportedEncodingException
,
JsonProcessingException
{
SortedMap
<
String
,
String
>
parameters
=
new
TreeMap
<
String
,
String
>();
parameters
.
put
(
"appid"
,
appid
);
parameters
.
put
(
"mchid"
,
mchid
);
parameters
.
put
(
"body"
,
"充值"
);
parameters
.
put
(
"out_trade_no"
,
tradeNo
);
parameters
.
put
(
"nonce_str"
,
nonce_str
);
DecimalFormat
df
=
new
DecimalFormat
(
"#"
);
//parameters.put("total_fee", df.format(payPageDto.getTotal()*100));
parameters
.
put
(
"total_fee"
,
df
.
format
(
1
));
parameters
.
put
(
"notify_url"
,
WxCommon
.
NOTIFY_URL
);
parameters
.
put
(
"trade_type"
,
"JSAPI"
);
String
characterEncoding
=
"UTF-8"
;
String
sign
=
createSign
(
characterEncoding
,
parameters
);
parameters
.
put
(
"sign"
,
sign
);
//签名
//将订单对象转为xml格式
String
s
=
null
;
try
{
return
MapToXmlUtils
.
mapToXml
(
parameters
);
//maptoXml方法是微信sdk自带的方法
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
return
new
String
(
s
.
getBytes
(
"UTF-8"
));
}
/***
* 生成签名
* @param characterEncoding
* @param parameters
* @return
*/
public
static
String
createSign
(
String
characterEncoding
,
SortedMap
<
String
,
String
>
parameters
){
StringBuffer
sb
=
new
StringBuffer
();
Set
es
=
parameters
.
entrySet
();
//所有参与传参的参数按照accsii排序(升序)
Iterator
it
=
es
.
iterator
();
while
(
it
.
hasNext
())
{
Map
.
Entry
entry
=
(
Map
.
Entry
)
it
.
next
();
String
k
=
(
String
)
entry
.
getKey
();
Object
v
=
entry
.
getValue
();
if
(
null
!=
v
&&
!
""
.
equals
(
v
)
&&
!
"sign"
.
equals
(
k
)
&&
!
"key"
.
equals
(
k
))
{
sb
.
append
(
k
+
"="
+
v
+
"&"
);
}
}
sb
.
append
(
"key="
+
WxCommon
.
PRIVATE_KEY
);
String
sign
=
Md5Util
.
MD5Encode
(
sb
.
toString
(),
characterEncoding
).
toUpperCase
();
System
.
out
.
println
(
"签名:"
+
sign
);
return
sign
;
}
/**
* 获取真实ip地址 通过阿帕奇代理的也能获取到真实ip
* @param request
* @return
*/
public
static
String
getRealIp
(
HttpServletRequest
request
)
{
String
ip
=
request
.
getHeader
(
"x-forwarded-for"
);
if
(
ip
==
null
||
ip
.
length
()
==
0
||
"unknown"
.
equalsIgnoreCase
(
ip
))
{
ip
=
request
.
getHeader
(
"Proxy-Client-IP"
);
}
if
(
ip
==
null
||
ip
.
length
()
==
0
||
"unknown"
.
equalsIgnoreCase
(
ip
))
{
ip
=
request
.
getHeader
(
"WL-Proxy-Client-IP"
);
}
if
(
ip
==
null
||
ip
.
length
()
==
0
||
"unknown"
.
equalsIgnoreCase
(
ip
))
{
ip
=
request
.
getRemoteAddr
();
}
return
ip
;
}
}
}
wisenergy-service/src/main/java/cn/wisenergy/service/wxpay/WxCommon.java
View file @
741523ea
...
@@ -12,9 +12,9 @@ public class WxCommon {
...
@@ -12,9 +12,9 @@ public class WxCommon {
public
static
final
String
MCHID
=
"1606042985"
;
public
static
final
String
MCHID
=
"1606042985"
;
public
static
final
String
NOTIFY_URL
=
"http://
www.baodu.com
"
;
public
static
final
String
NOTIFY_URL
=
"http://
http://tcdwak.natappfree.cc/pay/wxPayCallBack.do
"
;
public
static
final
String
WX_PAY_URL
=
"https://api.mch.weixin.qq.com/v3/pay/transactions/native"
;
public
static
final
String
WX_PAY_URL
_pc
=
"https://api.mch.weixin.qq.com/v3/pay/transactions/native"
;
public
static
final
String
WX_PAY_QUERY
=
"https://api.mch.weixin.qq.com/v3/pay/transactions/out-trade-no/"
;
public
static
final
String
WX_PAY_QUERY
=
"https://api.mch.weixin.qq.com/v3/pay/transactions/out-trade-no/"
;
...
...
wisenergy-service/wisenergy-service.iml
View file @
741523ea
...
@@ -49,6 +49,8 @@
...
@@ -49,6 +49,8 @@
<orderEntry
type=
"library"
name=
"Maven: org.springframework:spring-expression:5.1.7.RELEASE"
level=
"project"
/>
<orderEntry
type=
"library"
name=
"Maven: org.springframework:spring-expression:5.1.7.RELEASE"
level=
"project"
/>
<orderEntry
type=
"library"
name=
"Maven: org.springframework.boot:spring-boot-starter-undertow:2.1.5.RELEASE"
level=
"project"
/>
<orderEntry
type=
"library"
name=
"Maven: org.springframework.boot:spring-boot-starter-undertow:2.1.5.RELEASE"
level=
"project"
/>
<orderEntry
type=
"library"
name=
"Maven: io.undertow:undertow-core:2.0.20.Final"
level=
"project"
/>
<orderEntry
type=
"library"
name=
"Maven: io.undertow:undertow-core:2.0.20.Final"
level=
"project"
/>
<orderEntry
type=
"library"
name=
"Maven: org.jboss.xnio:xnio-api:3.3.8.Final"
level=
"project"
/>
<orderEntry
type=
"library"
scope=
"RUNTIME"
name=
"Maven: org.jboss.xnio:xnio-nio:3.3.8.Final"
level=
"project"
/>
<orderEntry
type=
"library"
name=
"Maven: io.undertow:undertow-servlet:2.0.20.Final"
level=
"project"
/>
<orderEntry
type=
"library"
name=
"Maven: io.undertow:undertow-servlet:2.0.20.Final"
level=
"project"
/>
<orderEntry
type=
"library"
name=
"Maven: org.jboss.spec.javax.annotation:jboss-annotations-api_1.2_spec:1.0.2.Final"
level=
"project"
/>
<orderEntry
type=
"library"
name=
"Maven: org.jboss.spec.javax.annotation:jboss-annotations-api_1.2_spec:1.0.2.Final"
level=
"project"
/>
<orderEntry
type=
"library"
name=
"Maven: io.undertow:undertow-websockets-jsr:2.0.20.Final"
level=
"project"
/>
<orderEntry
type=
"library"
name=
"Maven: io.undertow:undertow-websockets-jsr:2.0.20.Final"
level=
"project"
/>
...
@@ -162,6 +164,7 @@
...
@@ -162,6 +164,7 @@
<orderEntry
type=
"library"
name=
"Maven: org.bouncycastle:bcprov-jdk15on:1.62"
level=
"project"
/>
<orderEntry
type=
"library"
name=
"Maven: org.bouncycastle:bcprov-jdk15on:1.62"
level=
"project"
/>
<orderEntry
type=
"library"
name=
"Maven: com.squareup.okhttp3:okhttp:3.6.0"
level=
"project"
/>
<orderEntry
type=
"library"
name=
"Maven: com.squareup.okhttp3:okhttp:3.6.0"
level=
"project"
/>
<orderEntry
type=
"library"
name=
"Maven: com.squareup.okio:okio:1.11.0"
level=
"project"
/>
<orderEntry
type=
"library"
name=
"Maven: com.squareup.okio:okio:1.11.0"
level=
"project"
/>
<orderEntry
type=
"library"
name=
"Maven: com.github.wxpay:wxpay-sdk:0.0.3"
level=
"project"
/>
<orderEntry
type=
"library"
name=
"Maven: com.github.wechatpay-apiv3:wechatpay-apache-httpclient:0.2.1"
level=
"project"
/>
<orderEntry
type=
"library"
name=
"Maven: com.github.wechatpay-apiv3:wechatpay-apache-httpclient:0.2.1"
level=
"project"
/>
<orderEntry
type=
"library"
scope=
"RUNTIME"
name=
"Maven: org.apache.httpcomponents:httpmime:4.5.8"
level=
"project"
/>
<orderEntry
type=
"library"
scope=
"RUNTIME"
name=
"Maven: org.apache.httpcomponents:httpmime:4.5.8"
level=
"project"
/>
<orderEntry
type=
"library"
name=
"Maven: com.fasterxml.jackson.core:jackson-databind:2.9.8"
level=
"project"
/>
<orderEntry
type=
"library"
name=
"Maven: com.fasterxml.jackson.core:jackson-databind:2.9.8"
level=
"project"
/>
...
...
wisenergy-web-admin/src/main/java/cn/wisenergy/web/admin/controller/app/PayController.java
View file @
741523ea
...
@@ -12,6 +12,7 @@ import com.alipay.api.AlipayClient;
...
@@ -12,6 +12,7 @@ import com.alipay.api.AlipayClient;
import
com.alipay.api.DefaultAlipayClient
;
import
com.alipay.api.DefaultAlipayClient
;
import
com.alipay.api.request.AlipayTradeQueryRequest
;
import
com.alipay.api.request.AlipayTradeQueryRequest
;
import
com.alipay.api.response.AlipayTradeQueryResponse
;
import
com.alipay.api.response.AlipayTradeQueryResponse
;
import
com.fasterxml.jackson.core.JsonProcessingException
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiImplicitParam
;
import
io.swagger.annotations.ApiImplicitParam
;
import
io.swagger.annotations.ApiOperation
;
import
io.swagger.annotations.ApiOperation
;
...
@@ -54,14 +55,20 @@ public class PayController {
...
@@ -54,14 +55,20 @@ public class PayController {
@ApiOperation
(
value
=
"PC支付宝-支付接口"
,
notes
=
"PC支付宝-支付接口"
,
httpMethod
=
"POST"
)
@ApiOperation
(
value
=
"PC支付宝-支付接口"
,
notes
=
"PC支付宝-支付接口"
,
httpMethod
=
"POST"
)
@ApiImplicitParam
(
name
=
"payPageDto"
,
value
=
"参数"
,
dataType
=
"PayPageDto"
)
@ApiImplicitParam
(
name
=
"payPageDto"
,
value
=
"参数"
,
dataType
=
"PayPageDto"
)
@PostMapping
(
"/page"
)
@PostMapping
(
"/page"
)
//
public R<String> doPost(@RequestBody PayPageDto payPageDto, HttpServletRequest request, HttpServletResponse httpResponse) {
public
R
<
String
>
doPost
(
@RequestBody
PayPageDto
payPageDto
,
HttpServletRequest
request
,
HttpServletResponse
httpResponse
)
{
public
R
<
String
>
doPost
(
Integer
userId
,
Integer
payType
,
Integer
total_amount
,
HttpServletRequest
request
,
HttpServletResponse
httpResponse
)
{
/*
public R<String> doPost(Integer userId,Integer payType,Integer total_amount, HttpServletRequest request, HttpServletResponse httpResponse) {
PayPageDto payPageDto = new PayPageDto();
PayPageDto payPageDto = new PayPageDto();
payPageDto.setTotal(total_amount);
payPageDto.setTotal(total_amount);
payPageDto.setUserId(userId);
payPageDto.setUserId(userId);
payPageDto
.
setPayType
(
payType
);
payPageDto.setPayType(payType);
*/
return
aliPayService
.
doPost
(
payPageDto
,
request
,
httpResponse
);
return
aliPayService
.
doPost
(
payPageDto
,
request
,
httpResponse
);
}
}
@ApiOperation
(
value
=
"手机网页支付宝-支付接口"
,
notes
=
"手机网页支付宝-支付接口"
,
httpMethod
=
"POST"
)
@ApiImplicitParam
(
name
=
"payPageDto"
,
value
=
"参数"
,
dataType
=
"PayPageDto"
)
@PostMapping
(
"/wapAliPay"
)
public
R
<
String
>
wapAliPay
(
@RequestBody
PayPageDto
payPageDto
,
HttpServletRequest
request
,
HttpServletResponse
httpResponse
)
{
return
aliPayService
.
wapAliPay
(
payPageDto
,
request
,
httpResponse
);
}
@ApiOperation
(
value
=
"PC支付宝-交易查询"
,
notes
=
"PC支付宝-交易查询"
,
httpMethod
=
"POST"
)
@ApiOperation
(
value
=
"PC支付宝-交易查询"
,
notes
=
"PC支付宝-交易查询"
,
httpMethod
=
"POST"
)
@ApiImplicitParam
(
name
=
"payQueryDto"
,
value
=
"查询参数"
,
dataType
=
"PayQueryDto"
)
@ApiImplicitParam
(
name
=
"payQueryDto"
,
value
=
"查询参数"
,
dataType
=
"PayQueryDto"
)
...
@@ -84,15 +91,15 @@ public class PayController {
...
@@ -84,15 +91,15 @@ public class PayController {
*/
*/
@ApiOperation
(
value
=
"支付回调"
,
notes
=
"支付回调"
,
httpMethod
=
"POST"
)
@ApiOperation
(
value
=
"支付回调"
,
notes
=
"支付回调"
,
httpMethod
=
"POST"
)
@RequestMapping
(
value
=
"/aliPayCallBack.do"
)
@RequestMapping
(
value
=
"/aliPayCallBack.do"
)
public
R
<
String
>
aliPayCallBack
(
HttpServletResponse
response
,
HttpServletRequest
request
)
{
public
void
aliPayCallBack
(
HttpServletResponse
response
,
HttpServletRequest
request
)
throws
Exception
{
return
aliPayService
.
aliPayCallBack
(
response
,
request
);
aliPayService
.
aliPayCallBack
(
response
,
request
);
}
}
@ApiOperation
(
value
=
"微行支付-统一下单测试"
,
notes
=
"微行支付-统一下单"
,
httpMethod
=
"POST"
)
@ApiOperation
(
value
=
"微行支付-统一下单测试"
,
notes
=
"微行支付-统一下单"
,
httpMethod
=
"POST"
)
@ApiImplicitParam
(
name
=
"payPageDto"
,
value
=
"支付入参"
,
dataType
=
"PayPageDto"
)
@ApiImplicitParam
(
name
=
"payPageDto"
,
value
=
"支付入参"
,
dataType
=
"PayPageDto"
)
@PostMapping
(
"/wxPayTest"
)
@PostMapping
(
"/wxPayTest"
)
public
R
<
String
>
wxPayTest
(
@RequestBody
PayPageDto
payPageDto
)
throws
AlipayApiException
,
UnsupportedEncodingException
,
InvalidKeySpecException
,
NoSuchAlgorithmException
,
InvalidKeyException
,
SignatureException
{
public
R
<
String
>
wxPayTest
(
@RequestBody
PayPageDto
payPageDto
)
throws
UnsupportedEncodingException
,
InvalidKeySpecException
,
NoSuchAlgorithmException
,
InvalidKeyException
,
SignatureException
{
return
wxPayService
.
wxPay
(
payPageDto
);
return
wxPayService
.
wxPay
(
payPageDto
);
}
}
...
@@ -100,18 +107,17 @@ public class PayController {
...
@@ -100,18 +107,17 @@ public class PayController {
@ApiOperation
(
value
=
"微信支付-交易查询"
,
notes
=
"微信支付-交易查询"
,
httpMethod
=
"POST"
)
@ApiOperation
(
value
=
"微信支付-交易查询"
,
notes
=
"微信支付-交易查询"
,
httpMethod
=
"POST"
)
@ApiImplicitParam
(
name
=
"payQueryDto"
,
value
=
"查询参数"
,
dataType
=
"PayQueryDto"
)
@ApiImplicitParam
(
name
=
"payQueryDto"
,
value
=
"查询参数"
,
dataType
=
"PayQueryDto"
)
@PostMapping
(
"/queryWx"
)
@PostMapping
(
"/queryWx"
)
public
R
<
String
>
queryWx
(
@RequestBody
PayQueryDto
payQueryDto
)
throws
AlipayApiException
,
InvalidKeySpecException
,
SignatureException
,
NoSuchAlgorithmException
,
InvalidKeyException
,
UnsupportedEncodingException
{
public
R
<
String
>
queryWx
(
@RequestBody
PayQueryDto
payQueryDto
)
throws
InvalidKeySpecException
,
SignatureException
,
NoSuchAlgorithmException
,
InvalidKeyException
,
UnsupportedEncodingException
{
if
(
null
==
payQueryDto
||
StringUtils
.
isBlank
(
payQueryDto
.
getOutTradeNo
()))
{
if
(
null
==
payQueryDto
||
StringUtils
.
isBlank
(
payQueryDto
.
getOutTradeNo
()))
{
return
R
.
error
(
"操作错误!"
);
return
R
.
error
(
"操作错误!"
);
}
}
return
wxPayService
.
queryWx
(
payQueryDto
);
return
wxPayService
.
queryWx
(
payQueryDto
);
}
}
@ApiOperation
(
value
=
"测试-微行支付-统一下单"
,
notes
=
"测试-微行支付-统一下单"
,
httpMethod
=
"POST"
)
@ApiOperation
(
value
=
"测试-微行支付-统一下单"
,
notes
=
"测试-微行支付-统一下单"
,
httpMethod
=
"POST"
)
@ApiImplicitParam
(
name
=
"payPageDto"
,
value
=
"支付入参"
,
dataType
=
"PayPageDto"
)
@ApiImplicitParam
(
name
=
"payPageDto"
,
value
=
"支付入参"
,
dataType
=
"PayPageDto"
)
@PostMapping
(
"/wx_Pay"
)
@PostMapping
(
"/wx_Pay"
)
public
R
<
String
>
wx_Pay
(
@RequestBody
PayPageDto
payPageDto
)
throws
AlipayApiException
,
IOException
,
InvalidKeySpecException
,
NoSuchAlgorithmException
,
InvalidKeyException
,
SignatureException
,
IllegalBlockSizeException
{
public
R
<
String
>
wx_Pay
(
@RequestBody
PayPageDto
payPageDto
)
throws
IOException
,
InvalidKeySpecException
,
NoSuchAlgorithmException
,
InvalidKeyException
,
SignatureException
,
IllegalBlockSizeException
{
return
wxPayService
.
wx_Pay
(
payPageDto
);
return
wxPayService
.
wx_Pay
(
payPageDto
);
}
}
...
@@ -122,6 +128,12 @@ public class PayController {
...
@@ -122,6 +128,12 @@ public class PayController {
return
testWxPayService
.
wxPay
(
payPageDto
,
response
);
return
testWxPayService
.
wxPay
(
payPageDto
,
response
);
}
}
@ApiOperation
(
value
=
"h5微行支付-统一下单"
,
notes
=
"h5微行支付-统一下单"
,
httpMethod
=
"POST"
)
@ApiImplicitParam
(
name
=
"payPageDto"
,
value
=
"支付入参"
,
dataType
=
"PayPageDto"
)
@PostMapping
(
"/h5WxPay"
)
public
R
<
String
>
h5WxPay
(
@RequestBody
PayPageDto
payPageDto
,
HttpServletRequest
request
,
HttpServletResponse
response
)
throws
JsonProcessingException
{
return
testWxPayService
.
h5WxPay
(
payPageDto
,
request
,
response
);
}
/**
/**
* 微信回调函数
* 微信回调函数
* 支付成功后微信服务器会调用此方法
* 支付成功后微信服务器会调用此方法
...
...
wisenergy-web-admin/src/main/resources/application-dev.yml
View file @
741523ea
...
@@ -69,3 +69,13 @@ jwt:
...
@@ -69,3 +69,13 @@ jwt:
expire
:
14400
expire
:
14400
logging
:
logging
:
config
:
classpath:logback-spring.xml
config
:
classpath:logback-spring.xml
#支付宝支付appid、支付宝公钥、应用私钥
aliPay
:
APP_ID
:
2021002126609937
ALIPAY_PUBLIC_KEY
:
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2cUDFyw7sLpTpICDURNefRfzr7I7qO5Spq6HwdyFbVv5m6wVzt3fXYTcDrVUuzfbV7+rrXqnvk7LNOp10qPtUyHyZKO2jTBBcUK5H0RPNzs1XInKaSTAznGH8dEAk6yQiwhSDpQzwoOq1Ool2MQocdkcBWwAMEcEUByIbJ4ABsrwXdmkgu2hDHR/GgLvarUp1zOXfZkaTK//L1GUI5uCI+/omcqMPDIOwd8DfcNr0TKlXfAEixp9eVuU/b09b7vW7O9Vh+w0gmy5FN+BWX/JaRRL1DhRqbHl7Sl4/oGu1yjfQA5U8jXBgd+QjwdUiAXVwPdESS/AUbPWE517eH5FtQIDAQAB
PRIVATE_KEY
:
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCA9/p6UJH2kpTumbyRt/gdAOUnRJQ0VRQj/o0GtJ9ECweSIk6+8K81CAGcfmdeB6ZfteXZlKr9SGf3hkwuOz5oOJb5GAmKgv60T6zrBm5/MSVYhDY935eCYjFSj59w2120kvtWvq94Km3TkvAstrbSwBgpS4eutZ2qg1U4h5j6H3v+PB6RxyOsugarEYQ6TxCTr/CWHWU9G28yXSaQ66S3rsxl5aSpUCY+lUwIEVmZ9SyAa+g4FV3EfRitssiKMdCuli46YQ0/uxc59igCdgd4uxygswYgUGfP4HLQ5wEGPn7H4Q5IxSlxPvc60fYxgkRo9NMZgAljRohGdKP2u6jjAgMBAAECggEAGRakbljwHCRlvoi/qyU7qgC7k0j+/7MxSNNDAfPvK6Btp5ru8KwHmWxmS9g3KY6ZafMLtKj8HmuQdhF1DmVN/Z5MmEZ5zK0w+UiqncnRgwK/fhmyJ5Uwdxe8+o+f96dk8jTJmhVcMycl2Eu0Vy5wIE1oJdhgm7cO5dXIpUeTlcx09F3v2xx4lvmJTQvzPxgFYMbB7M8ijEQvkeXdBw7fAlA+izl8Paovgv6tu/dikImZZZgoHKZugZbz3orxpZWiIXzoB9SymBo+lWkeGMj55hlKV9sXTrf5pM6vd5JYmzfYoF/bcO7k4NJ0Elddz3EHe/0IX8M90rAH9WFSdLGseQKBgQDMkEPUfrWP/Z6nE76muUQE4y3OH0ckLacbCEI+RseVNqSKIs+TrzhQllvb/V/foeiv6SLBvmyWbO3AX+Gh9GuedLyRTct/K9o1J3Q4GAa8jGJeoi1uYPPAfqt3BMv05/i1jIvTePUrxp1NV7u0/i9QmV4R1it0+abs2Ro8Q3XqZwKBgQChZa3UBe4FbaTBWVToU4lW5KdEv93gm6iKQiHWI4yTXaJJlPOo8Hx9+/REeaxOIsaW6XZLyarNuh+cThTv4GLJKjogjcq9B1oNWgS6Z41CJZIkW/IFgjZvHh3n+SD3pTijA9y7usgu/R0OsVwrlAMyMvl7JdIMRYXFckRhb1v4JQKBgQC3+Ao4gZfRnjpfcd9k23rzlkfsdq6pN7FwGzZQAaGebNz/Kh1aaRuRRhfouW7OlTLJeTZ73UCU6/PJrbEi0Mk0YTHwz3DytsJwSUI47EqqqOoSx3FqMiEk/gZAbHzsjO5cf8CEd+St8Noo43z5Yhu1NainC+BbO+ZGXV0900GpgwKBgEEx2nK/5nLo5Fl55VNnkx23hV2/BzhYiE85AYQHnhxVAV4pvfcrFY6qfPRAFfsGDyQcsD1S/BzYJzazT7/J6v2JgituO0v6MUUdbLWDaMskdBEd1vikrapbBweSWd/PLL6kq8BlZcGdWuR5flrYEiZv8tjs4Rk16CBm1PpqykLFAoGASgkWQocPk0PYnEr1anXeiabc+/hMj4cZv3ynGv7NU9hUkZszMDKutG63y3nZ1QJPtfcF7xgTKpABfdIMCbAzKzDpd2znFg/bTxCV23GV6SNSWU+R8WC+30jw5o3W++wcILmd83L4IWLXUo6+GI0wqDBNOYG+nDLs1gWfBvX4UbI=
#微信支付appid、mchid、密钥
wxPay
:
APP_ID
:
wx7d8f4502a2bfa865
MCH_ID
:
1606042985
PRIVATE_KEY
:
efef4a06a1654e0f78d113377ea37aed
\ No newline at end of file
wisenergy-web-admin/wisenergy-web-admin.iml
View file @
741523ea
...
@@ -51,6 +51,8 @@
...
@@ -51,6 +51,8 @@
<orderEntry
type=
"library"
name=
"Maven: org.springframework:spring-expression:5.1.7.RELEASE"
level=
"project"
/>
<orderEntry
type=
"library"
name=
"Maven: org.springframework:spring-expression:5.1.7.RELEASE"
level=
"project"
/>
<orderEntry
type=
"library"
name=
"Maven: org.springframework.boot:spring-boot-starter-undertow:2.1.5.RELEASE"
level=
"project"
/>
<orderEntry
type=
"library"
name=
"Maven: org.springframework.boot:spring-boot-starter-undertow:2.1.5.RELEASE"
level=
"project"
/>
<orderEntry
type=
"library"
name=
"Maven: io.undertow:undertow-core:2.0.20.Final"
level=
"project"
/>
<orderEntry
type=
"library"
name=
"Maven: io.undertow:undertow-core:2.0.20.Final"
level=
"project"
/>
<orderEntry
type=
"library"
name=
"Maven: org.jboss.xnio:xnio-api:3.3.8.Final"
level=
"project"
/>
<orderEntry
type=
"library"
scope=
"RUNTIME"
name=
"Maven: org.jboss.xnio:xnio-nio:3.3.8.Final"
level=
"project"
/>
<orderEntry
type=
"library"
name=
"Maven: io.undertow:undertow-servlet:2.0.20.Final"
level=
"project"
/>
<orderEntry
type=
"library"
name=
"Maven: io.undertow:undertow-servlet:2.0.20.Final"
level=
"project"
/>
<orderEntry
type=
"library"
name=
"Maven: org.jboss.spec.javax.annotation:jboss-annotations-api_1.2_spec:1.0.2.Final"
level=
"project"
/>
<orderEntry
type=
"library"
name=
"Maven: org.jboss.spec.javax.annotation:jboss-annotations-api_1.2_spec:1.0.2.Final"
level=
"project"
/>
<orderEntry
type=
"library"
name=
"Maven: io.undertow:undertow-websockets-jsr:2.0.20.Final"
level=
"project"
/>
<orderEntry
type=
"library"
name=
"Maven: io.undertow:undertow-websockets-jsr:2.0.20.Final"
level=
"project"
/>
...
@@ -150,6 +152,7 @@
...
@@ -150,6 +152,7 @@
<orderEntry
type=
"library"
name=
"Maven: org.bouncycastle:bcprov-jdk15on:1.62"
level=
"project"
/>
<orderEntry
type=
"library"
name=
"Maven: org.bouncycastle:bcprov-jdk15on:1.62"
level=
"project"
/>
<orderEntry
type=
"library"
name=
"Maven: com.squareup.okhttp3:okhttp:3.6.0"
level=
"project"
/>
<orderEntry
type=
"library"
name=
"Maven: com.squareup.okhttp3:okhttp:3.6.0"
level=
"project"
/>
<orderEntry
type=
"library"
name=
"Maven: com.squareup.okio:okio:1.11.0"
level=
"project"
/>
<orderEntry
type=
"library"
name=
"Maven: com.squareup.okio:okio:1.11.0"
level=
"project"
/>
<orderEntry
type=
"library"
name=
"Maven: com.github.wxpay:wxpay-sdk:0.0.3"
level=
"project"
/>
<orderEntry
type=
"library"
name=
"Maven: com.github.wechatpay-apiv3:wechatpay-apache-httpclient:0.2.1"
level=
"project"
/>
<orderEntry
type=
"library"
name=
"Maven: com.github.wechatpay-apiv3:wechatpay-apache-httpclient:0.2.1"
level=
"project"
/>
<orderEntry
type=
"library"
scope=
"RUNTIME"
name=
"Maven: org.apache.httpcomponents:httpmime:4.5.8"
level=
"project"
/>
<orderEntry
type=
"library"
scope=
"RUNTIME"
name=
"Maven: org.apache.httpcomponents:httpmime:4.5.8"
level=
"project"
/>
<orderEntry
type=
"library"
name=
"Maven: com.fasterxml.jackson.core:jackson-databind:2.9.8"
level=
"project"
/>
<orderEntry
type=
"library"
name=
"Maven: com.fasterxml.jackson.core:jackson-databind:2.9.8"
level=
"project"
/>
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment