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
ed7dd05d
Commit
ed7dd05d
authored
Mar 29, 2021
by
cy
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
微信支付
parent
987ca904
Show whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
222 additions
and
172 deletions
+222
-172
Md5Util.java
...mmon/src/main/java/cn/wisenergy/common/utils/Md5Util.java
+0
-33
pom.xml
wisenergy-service/pom.xml
+5
-3
TestWxPayService.java
.../main/java/cn/wisenergy/service/app/TestWxPayService.java
+8
-3
WxPayService1.java
...src/main/java/cn/wisenergy/service/app/WxPayService1.java
+1
-1
TestWxPayServiceImpl.java
...a/cn/wisenergy/service/app/impl/TestWxPayServiceImpl.java
+105
-55
WxPayService1Impl.java
...java/cn/wisenergy/service/app/impl/WxPayService1Impl.java
+2
-2
WxPayUtil.java
...ce/src/main/java/cn/wisenergy/service/util/WxPayUtil.java
+46
-30
WxCommon.java
...ce/src/main/java/cn/wisenergy/service/wxpay/WxCommon.java
+1
-1
wisenergy-service.iml
wisenergy-service/wisenergy-service.iml
+15
-7
PayController.java
.../cn/wisenergy/web/admin/controller/app/PayController.java
+24
-30
wisenergy-web-admin.iml
wisenergy-web-admin/wisenergy-web-admin.iml
+15
-7
No files found.
wisenergy-common/src/main/java/cn/wisenergy/common/utils/Md5Util.java
View file @
ed7dd05d
...
...
@@ -59,40 +59,7 @@ public class Md5Util {
}
return
sb
.
toString
();
}
private
static
String
byteArrayToHexString
(
byte
b
[])
{
StringBuffer
resultSb
=
new
StringBuffer
();
for
(
int
i
=
0
;
i
<
b
.
length
;
i
++)
resultSb
.
append
(
byteToHexString
(
b
[
i
]));
return
resultSb
.
toString
();
}
private
static
String
byteToHexString
(
byte
b
)
{
int
n
=
b
;
if
(
n
<
0
)
n
+=
256
;
int
d1
=
n
/
16
;
int
d2
=
n
%
16
;
return
hexDigits
[
d1
]
+
hexDigits
[
d2
];
}
public
static
String
MD5Encode
(
String
origin
,
String
charsetname
)
{
String
resultString
=
null
;
try
{
resultString
=
new
String
(
origin
);
MessageDigest
md
=
MessageDigest
.
getInstance
(
"MD5"
);
if
(
charsetname
==
null
||
""
.
equals
(
charsetname
))
resultString
=
byteArrayToHexString
(
md
.
digest
(
resultString
.
getBytes
()));
else
resultString
=
byteArrayToHexString
(
md
.
digest
(
resultString
.
getBytes
(
charsetname
)));
}
catch
(
Exception
exception
)
{
}
return
resultString
;
}
private
static
final
String
hexDigits
[]
=
{
"0"
,
"1"
,
"2"
,
"3"
,
"4"
,
"5"
,
"6"
,
"7"
,
"8"
,
"9"
,
"a"
,
"b"
,
"c"
,
"d"
,
"e"
,
"f"
};
}
wisenergy-service/pom.xml
View file @
ed7dd05d
...
...
@@ -60,10 +60,11 @@
<version>
0.0.3
</version>
</dependency>
<!--微信开源封装sdk-->
<dependency>
<groupId>
com.github.
wechatpay-apiv3
</groupId>
<artifactId>
we
chatpay-apache-httpclient
</artifactId>
<version>
0.2.1
</version>
<groupId>
com.github.
binarywang
</groupId>
<artifactId>
we
ixin-java-pay
</artifactId>
<version>
3.0.0
</version>
</dependency>
<!--pdf导出 -->
...
...
@@ -73,6 +74,7 @@
<version>
5.5.13
</version>
</dependency>
<dependency>
<groupId>
com.itextpdf
</groupId>
<artifactId>
itext-asian
</artifactId>
...
...
wisenergy-service/src/main/java/cn/wisenergy/service/app/TestWxPayService.java
View file @
ed7dd05d
...
...
@@ -6,6 +6,8 @@ import com.fasterxml.jackson.core.JsonProcessingException;
import
javax.servlet.http.HttpServletRequest
;
import
javax.servlet.http.HttpServletResponse
;
import
java.io.IOException
;
import
java.util.Map
;
/**
...
...
@@ -17,16 +19,19 @@ public interface TestWxPayService {
* @Param
* @return
*/
R
<
String
>
wxPay
(
PayPageDto
payPageDto
,
HttpServletResponse
response
);
R
<
Map
<
String
,
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 response
* @return
*/
R
<
String
>
wxPayCallBack
(
HttpServletRequest
request
,
HttpServletResponse
response
);
void
wxPayCallBack
(
HttpServletRequest
request
,
HttpServletResponse
response
)
throws
Exception
;
R
<
Map
<
String
,
String
>>
wxQuery
(
String
out_trade_no
)
throws
Exception
;
}
wisenergy-service/src/main/java/cn/wisenergy/service/app/WxPayService.java
→
wisenergy-service/src/main/java/cn/wisenergy/service/app/WxPayService
1
.java
View file @
ed7dd05d
...
...
@@ -15,7 +15,7 @@ import java.security.spec.InvalidKeySpecException;
/**
* @author 86187
*/
public
interface
WxPayService
{
public
interface
WxPayService
1
{
/**
* 微行支付接口
...
...
wisenergy-service/src/main/java/cn/wisenergy/service/app/impl/TestWxPayServiceImpl.java
View file @
ed7dd05d
...
...
@@ -15,7 +15,6 @@ import lombok.extern.slf4j.Slf4j;
import
org.apache.commons.lang.RandomStringUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
springfox.documentation.spring.web.json.Json
;
import
javax.servlet.ServletOutputStream
;
import
javax.servlet.http.HttpServletRequest
;
...
...
@@ -40,6 +39,8 @@ public class TestWxPayServiceImpl implements TestWxPayService {
private
UserLimitService
userLimitService
;
@Autowired
private
PayRecordMapper
payRecordMapper
;
/*@Autowired
private WxPayService wxService; //上边依赖第三方库提供的*/
/***
* pc微信支付总流程
...
...
@@ -48,16 +49,19 @@ public class TestWxPayServiceImpl implements TestWxPayService {
* @return
*/
@Override
public
R
<
String
>
wxPay
(
PayPageDto
payPageDto
,
HttpServletResponse
response
)
{
if
(
null
==
payPageDto
||
null
==
payPageDto
.
getTotal
())
{
public
R
<
Map
<
String
,
String
>
>
wxPay
(
PayPageDto
payPageDto
,
HttpServletResponse
response
)
{
if
(
null
==
payPageDto
||
null
==
payPageDto
.
getTotal
())
{
return
R
.
error
(
"入参不能为空"
);
}
ServletOutputStream
sos
=
null
;
String
tradeNo
=
"21"
+
System
.
currentTimeMillis
();
String
product_id
=
"10"
+
System
.
currentTimeMillis
();
String
time_expire
=
WxPayUtil
.
getOrderExpireTime
(
2
*
60
*
1000L
);
//生成预支付订单,充值结果设为失败(result=1)
try
{
//生成【统一下单API】所需参数的接口
String
orderInfo
=
WxPayUtil
.
createOrderInfo
(
payPageDto
,
tradeNo
);
String
orderInfo
=
WxPayUtil
.
createOrderInfo
(
payPageDto
,
tradeNo
,
product_id
,
time_expire
);
System
.
out
.
println
(
orderInfo
);
//调用统一下单接口
Map
<
String
,
String
>
map
=
unifiedOrder
(
orderInfo
);
...
...
@@ -68,9 +72,9 @@ public class TestWxPayServiceImpl implements TestWxPayService {
//业务结果
String
result_code
=
map
.
get
(
"result_code"
);
String
code_url
=
map
.
get
(
"code_url"
);
System
.
out
.
println
(
"return_msg:"
+
return_msg
);
System
.
out
.
println
(
"return_code:"
+
return_code
);
log
.
info
(
"支付返回信息:"
+
return_msg
,
return_code
);
System
.
out
.
println
(
"return_msg:"
+
return_msg
);
System
.
out
.
println
(
"return_code:"
+
return_code
);
log
.
info
(
"支付返回信息:"
+
return_msg
);
if
(
null
!=
map
&&
"SUCCESS"
.
equals
(
return_code
)
&&
"SUCCESS"
.
equals
(
result_code
))
{
PayRecord
payRecord
=
new
PayRecord
();
payRecord
.
setMoney
(
payPageDto
.
getTotal
());
...
...
@@ -80,10 +84,12 @@ public class TestWxPayServiceImpl implements TestWxPayService {
payRecord
.
setUserId
(
payPageDto
.
getUserId
());
payRecordMapper
.
add
(
payRecord
);
}
sos
=
response
.
getOutputStream
();
//QRCodeUtil.encode(code_url, sos);//调用生成二维码的方法
System
.
out
.
println
(
"code_url:"
+
code_url
);
return
R
.
ok
(
"0"
,
code_url
);
Map
<
String
,
String
>
objMap
=
new
HashMap
<>();
System
.
out
.
println
(
"code_url:"
+
code_url
);
objMap
.
put
(
"tradeNo"
,
tradeNo
);
objMap
.
put
(
"time_expire"
,
time_expire
);
objMap
.
put
(
"code_url"
,
code_url
);
return
R
.
ok
(
"0"
,
objMap
);
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
return
R
.
error
(
"获取code_url失败"
);
...
...
@@ -100,7 +106,7 @@ public class TestWxPayServiceImpl implements TestWxPayService {
*/
@Override
public
R
<
String
>
h5WxPay
(
PayPageDto
payPageDto
,
HttpServletRequest
request
,
HttpServletResponse
response
)
{
if
(
null
==
payPageDto
||
null
==
payPageDto
.
getTotal
())
{
if
(
null
==
payPageDto
||
null
==
payPageDto
.
getTotal
())
{
return
R
.
error
(
"入参不能为空"
);
}
ServletOutputStream
sos
=
null
;
...
...
@@ -108,7 +114,7 @@ public class TestWxPayServiceImpl implements TestWxPayService {
//生成预支付订单,充值结果设为失败(result=1)
try
{
//生成【统一下单API】所需参数的接口
String
orderInfo
=
WxPayUtil
.
createOrderInfoH5
(
payPageDto
,
tradeNo
,
request
);
String
orderInfo
=
WxPayUtil
.
createOrderInfoH5
(
payPageDto
,
tradeNo
,
request
);
System
.
out
.
println
(
orderInfo
);
//调用统一下单接口
Map
<
String
,
String
>
map
=
unifiedOrder
(
orderInfo
);
...
...
@@ -119,8 +125,8 @@ public class TestWxPayServiceImpl implements TestWxPayService {
//业务结果
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
);
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
());
...
...
@@ -130,14 +136,16 @@ public class TestWxPayServiceImpl implements TestWxPayService {
payRecord
.
setUserId
(
payPageDto
.
getUserId
());
payRecordMapper
.
add
(
payRecord
);
}
System
.
out
.
println
(
"mweb_url:"
+
mweb_url
);
return
R
.
ok
(
"0"
,
mweb_url
);
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
...
...
@@ -148,7 +156,7 @@ public class TestWxPayServiceImpl implements TestWxPayService {
*/
@Override
public
R
<
String
>
WxPayApplets
(
PayPageDto
payPageDto
,
HttpServletRequest
request
,
HttpServletResponse
response
)
{
if
(
null
==
payPageDto
||
null
==
payPageDto
.
getTotal
())
{
if
(
null
==
payPageDto
||
null
==
payPageDto
.
getTotal
())
{
return
R
.
error
(
"入参不能为空"
);
}
//随机字符串
...
...
@@ -157,7 +165,7 @@ public class TestWxPayServiceImpl implements TestWxPayService {
//生成预支付订单,充值结果设为失败(result=1)
try
{
//生成【统一下单API】所需参数的接口
String
orderInfo
=
WxPayUtil
.
createOrderInfoWx
(
payPageDto
,
tradeNo
,
request
,
nonce_str
);
String
orderInfo
=
WxPayUtil
.
createOrderInfoWx
(
payPageDto
,
tradeNo
,
request
,
nonce_str
);
System
.
out
.
println
(
orderInfo
);
//调用统一下单接口
Map
<
String
,
String
>
map
=
unifiedOrder
(
orderInfo
);
...
...
@@ -165,7 +173,7 @@ public class TestWxPayServiceImpl implements TestWxPayService {
String
return_code
=
map
.
get
(
"return_code"
);
//状态码
String
result_code
=
map
.
get
(
"result_code"
);
//业务结果
log
.
info
(
"支付返回信息:"
,
return_msg
);
log
.
info
(
"支付返回信息:"
,
return_msg
);
if
(
null
!=
map
&&
"SUCCESS"
.
equals
(
return_code
)
&&
"SUCCESS"
.
equals
(
result_code
))
{
PayRecord
payRecord
=
new
PayRecord
();
payRecord
.
setMoney
(
payPageDto
.
getTotal
());
...
...
@@ -174,7 +182,7 @@ public class TestWxPayServiceImpl implements TestWxPayService {
payRecord
.
setType
(
payPageDto
.
getPayType
());
payRecord
.
setUserId
(
payPageDto
.
getUserId
());
payRecordMapper
.
add
(
payRecord
);
SortedMap
<
String
,
String
>
mapParams
=
new
TreeMap
<
String
,
String
>();
SortedMap
<
String
,
String
>
mapParams
=
new
TreeMap
<
String
,
String
>();
mapParams
.
put
(
"return_code"
,
return_code
);
mapParams
.
put
(
"return_msg"
,
return_msg
);
//返回的预付单信息 小程序端使用
...
...
@@ -185,7 +193,7 @@ public class TestWxPayServiceImpl implements TestWxPayService {
//这边要将返回的时间戳转化成字符串,不然小程序端调用wx.requestPayment方法会报签名错误
mapParams
.
put
(
"timeStamp"
,
timeStamp
+
""
);
String
characterEncoding
=
"UTF-8"
;
String
paySign
=
WxPayUtil
.
createSign
(
characterEncoding
,
mapParams
);
String
paySign
=
WxPayUtil
.
createSign
(
characterEncoding
,
mapParams
);
mapParams
.
put
(
"paySign"
,
paySign
);
mapParams
.
put
(
"appid"
,
""
);
}
...
...
@@ -228,7 +236,6 @@ public class TestWxPayServiceImpl implements TestWxPayService {
}
/***
* 微信支付成功回调
* @param request
...
...
@@ -236,9 +243,9 @@ public class TestWxPayServiceImpl implements TestWxPayService {
* @return
*/
@Override
public
R
<
String
>
wxPayCallBack
(
HttpServletRequest
request
,
HttpServletResponse
response
)
{
System
.
out
.
println
(
"
回调成功
"
);
try
{
public
void
wxPayCallBack
(
HttpServletRequest
request
,
HttpServletResponse
response
)
throws
Exception
{
System
.
out
.
println
(
"
进入微信回调
"
);
BufferedOutputStream
out
=
new
BufferedOutputStream
(
response
.
getOutputStream
());
InputStream
inStream
=
request
.
getInputStream
();
ByteArrayOutputStream
outSteam
=
new
ByteArrayOutputStream
();
byte
[]
buffer
=
new
byte
[
1024
];
...
...
@@ -248,27 +255,70 @@ public class TestWxPayServiceImpl implements TestWxPayService {
}
outSteam
.
close
();
inStream
.
close
();
String
result
=
new
String
(
outSteam
.
toByteArray
(),
"utf-8"
);
// 获取微信调用我们notify_url的返回信息
// 获取微信调用我们notify_url的返回信息
String
result
=
new
String
(
outSteam
.
toByteArray
(),
"utf-8"
);
Map
<
String
,
String
>
map
=
MapToXmlUtils
.
xmlToMap
(
result
);
//过滤空 设置 TreeMap
SortedMap
<
String
,
String
>
packageParams
=
new
TreeMap
<
String
,
String
>();
Iterator
it
=
map
.
keySet
().
iterator
();
while
(
it
.
hasNext
())
{
String
parameter
=
(
String
)
it
.
next
();
String
parameterValue
=
map
.
get
(
parameter
);
String
v
=
""
;
if
(
null
!=
parameterValue
)
{
v
=
parameterValue
.
trim
();
}
packageParams
.
put
(
parameter
,
v
);
}
String
resXml
=
""
;
if
(
map
.
get
(
"result_code"
).
equalsIgnoreCase
(
"SUCCESS"
))
{
//返回成功后修改订单充值结果为0,保存查询次数
QueryWrapper
<
PayRecord
>
queryWrapper
=
new
QueryWrapper
<>();
queryWrapper
.
eq
(
"trade_no"
,
map
.
get
(
"out_trade_no"
));
queryWrapper
.
eq
(
"trade_no"
,
map
.
get
(
"out_trade_no"
));
PayRecord
payRecord
=
payRecordMapper
.
selectOne
(
queryWrapper
);
AddLimitVo
addLimitVo
=
new
AddLimitVo
();
addLimitVo
.
setTradeNo
(
map
.
get
(
"out_trade_no"
));
addLimitVo
.
setPayMoney
(
payRecord
.
getMoney
());
addLimitVo
.
setPayType
(
2
);
addLimitVo
.
setUserId
(
payRecord
.
getUserId
());
if
(
payRecord
.
getResult
()
==
1
)
{
R
<
Boolean
>
booleanR
=
userLimitService
.
addLimit
(
addLimitVo
);
if
(
booleanR
.
getCode
()==
1
)
{
return
R
.
error
(
"用户查询次数添加失败"
);
if
(
booleanR
.
getCode
()
==
1
)
{
resXml
=
"<xml>"
+
"<return_code><![CDATA[SUCCESS]]></return_code>"
+
"<return_msg><![CDATA[OK]]></return_msg>"
+
"</xml> "
;
}
else
{
log
.
info
(
"支付失败,错误信息:"
+
map
.
get
(
"err_code"
));
resXml
=
"<xml>"
+
"<return_code><![CDATA[FAIL]]></return_code>"
+
"<return_msg><![CDATA[报文为空]]></return_msg>"
+
"</xml> "
;
}
return
R
.
ok
(
0
,
"充值成功"
);
}
else
{
resXml
=
"<xml>"
+
"<return_code><![CDATA[SUCCESS]]></return_code>"
+
"<return_msg><![CDATA[OK]]></return_msg>"
+
"</xml> "
;
}
return
R
.
ok
(
1
,
"充值失败"
);
}
catch
(
Exception
e
)
{
return
R
.
ok
(
1
,
"充值失败"
);
out
.
write
(
resXml
.
getBytes
());
out
.
flush
();
out
.
close
();
}
else
{
log
.
info
(
"失败"
);
}
}
@Override
public
R
<
Map
<
String
,
String
>>
wxQuery
(
String
out_trade_no
)
throws
Exception
{
QueryWrapper
<
PayRecord
>
queryWrapper
=
new
QueryWrapper
<>();
queryWrapper
.
eq
(
"trade_no"
,
out_trade_no
);
PayRecord
payRecord
=
payRecordMapper
.
selectOne
(
queryWrapper
);
Map
<
String
,
String
>
result
=
new
HashMap
<>();
result
.
put
(
"return_code"
,
"SUCCESS"
);
result
.
put
(
"result_code"
,
"SUCCESS"
);
result
.
put
(
"trade_state"
,
"SUCCESS"
);
if
(
payRecord
.
getResult
()==
0
){
return
R
.
ok
(
0
,
result
);
}
else
{
return
R
.
error
(
"支付失败"
);
}
}
}
wisenergy-service/src/main/java/cn/wisenergy/service/app/impl/WxPayServiceImpl.java
→
wisenergy-service/src/main/java/cn/wisenergy/service/app/impl/WxPayService
1
Impl.java
View file @
ed7dd05d
...
...
@@ -5,7 +5,7 @@ import cn.wisenergy.model.dto.PayPageDto;
import
cn.wisenergy.model.dto.PayQueryDto
;
import
cn.wisenergy.model.vo.AddLimitVo
;
import
cn.wisenergy.service.app.UserLimitService
;
import
cn.wisenergy.service.app.WxPayService
;
import
cn.wisenergy.service.app.WxPayService
1
;
import
cn.wisenergy.service.httpClient.WechatPayHttpClientBuilder
;
import
cn.wisenergy.service.httpClient.auth.AutoUpdateCertificatesVerifier
;
...
...
@@ -52,7 +52,7 @@ import java.util.UUID;
*/
@Service
@Slf4j
public
class
WxPayService
Impl
implements
WxPayService
{
public
class
WxPayService
1Impl
implements
WxPayService1
{
@Autowired
private
UserLimitService
userLimitService
;
...
...
wisenergy-service/src/main/java/cn/wisenergy/service/util/WxPayUtil.java
View file @
ed7dd05d
...
...
@@ -12,6 +12,7 @@ import cn.wisenergy.service.httpClient.util.PemUtil;
import
cn.wisenergy.service.wxpay.WxCommon
;
import
com.fasterxml.jackson.core.JsonProcessingException
;
import
okhttp3.HttpUrl
;
import
org.apache.commons.codec.digest.DigestUtils
;
import
org.apache.commons.lang.RandomStringUtils
;
import
org.apache.http.HttpEntity
;
import
org.apache.http.client.methods.CloseableHttpResponse
;
...
...
@@ -21,7 +22,6 @@ import org.apache.http.entity.StringEntity;
import
org.apache.http.impl.client.CloseableHttpClient
;
import
org.apache.http.util.EntityUtils
;
import
org.junit.After
;
import
org.springframework.beans.factory.annotation.Value
;
import
javax.servlet.http.HttpServletRequest
;
import
java.io.ByteArrayInputStream
;
...
...
@@ -33,16 +33,18 @@ import java.security.PrivateKey;
import
java.security.SignatureException
;
import
java.security.spec.InvalidKeySpecException
;
import
java.text.DecimalFormat
;
import
java.text.SimpleDateFormat
;
import
java.util.*
;
public
class
WxPayUtil
{
@Value
(
"${wxPay.APP_ID}"
)
/*
@Value("${wxPay.APP_ID}")
private static String appid;
@Value("${wxPay.MCH_ID}")
private static String mchid;
@Value("${wxPay.PRIVATE_KEY}")
private
static
String
key
;
private static String key;
*/
/**
* 商户号
*/
...
...
@@ -186,22 +188,24 @@ public class WxPayUtil {
* @return
* @throws UnsupportedEncodingException
*/
public
static
String
createOrderInfo
(
PayPageDto
payPageDto
,
String
tradeNo
)
throws
UnsupportedEncodingException
{
public
static
String
createOrderInfo
(
PayPageDto
payPageDto
,
String
tradeNo
,
String
product_id
,
String
time_expire
)
throws
UnsupportedEncodingException
{
String
nonce_str
=
RandomStringUtils
.
randomAlphanumeric
(
16
);
SortedMap
<
String
,
String
>
parameters
=
new
TreeMap
<
String
,
String
>();
parameters
.
put
(
"appid"
,
WxCommon
.
APP_ID
);
parameters
.
put
(
"mch_id"
,
mchId
);
parameters
.
put
(
"body"
,
"充值"
);
parameters
.
put
(
"
description"
,
"充值"
);
parameters
.
put
(
"
out_trade_no"
,
tradeNo
);
parameters
.
put
(
"notify_url"
,
WxCommon
.
NOTIFY_URL
);
parameters
.
put
(
"
out_trade_no"
,
tradeNo
);
parameters
.
put
(
"
notify_url"
,
"http://raux9u.natappfree.cc/pay/wxPayCallBack.do"
);
//
parameters.put("notify_url",WxCommon.NOTIFY_URL);
DecimalFormat
df
=
new
DecimalFormat
(
"#"
);
//parameters.put("total_fee", df.format(payPageDto.getTotal()*100));
parameters
.
put
(
"total_fee"
,
df
.
format
(
1
));
parameters
.
put
(
"nonce_str"
,
nonce_str
);
parameters
.
put
(
"trade_type"
,
"NATIVE"
);
parameters
.
put
(
"product_id"
,
"100001"
);
parameters
.
put
(
"product_id"
,
product_id
);
parameters
.
put
(
"spbill_create_ip"
,
"0.0.0.0"
);
parameters
.
put
(
"time_expire"
,
time_expire
);
String
characterEncoding
=
"UTF-8"
;
String
sign
=
createSign
(
characterEncoding
,
parameters
);
parameters
.
put
(
"sign"
,
sign
);
//签名
...
...
@@ -215,6 +219,7 @@ public class WxPayUtil {
return
new
String
(
s
.
getBytes
(
"UTF-8"
));
}
/***
* h5生成统一下单格式的订单,生成一个XML格式的字符串
* @return
...
...
@@ -227,8 +232,8 @@ public class WxPayUtil {
String
spbill_create_ip
=
getRealIp
(
request
);
SortedMap
<
String
,
String
>
parameters
=
new
TreeMap
<
String
,
String
>();
parameters
.
put
(
"appid"
,
appid
);
parameters
.
put
(
"mch
id"
,
mchi
d
);
parameters
.
put
(
"appid"
,
WxCommon
.
APP_ID
);
parameters
.
put
(
"mch
_id"
,
mchI
d
);
parameters
.
put
(
"body"
,
"充值"
);
parameters
.
put
(
"out_trade_no"
,
tradeNo
);
parameters
.
put
(
"nonce_str"
,
nonce_str
);
...
...
@@ -252,6 +257,7 @@ public class WxPayUtil {
return
new
String
(
s
.
getBytes
(
"UTF-8"
));
}
/***
* 小程序生成统一下单格式的订单,生成一个XML格式的字符串
* @return
...
...
@@ -260,8 +266,8 @@ public class WxPayUtil {
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
(
"mch
id"
,
mchi
d
);
parameters
.
put
(
"appid"
,
WxCommon
.
APP_ID
);
parameters
.
put
(
"mch
_id"
,
mchI
d
);
parameters
.
put
(
"body"
,
"充值"
);
parameters
.
put
(
"description"
,
"充值"
);
parameters
.
put
(
"out_trade_no"
,
tradeNo
);
...
...
@@ -270,7 +276,6 @@ public class WxPayUtil {
DecimalFormat
df
=
new
DecimalFormat
(
"#"
);
//parameters.put("total_fee", df.format(payPageDto.getTotal()*100));
parameters
.
put
(
"total_fee"
,
df
.
format
(
1
));
parameters
.
put
(
"trade_type"
,
"JSAPI"
);
String
characterEncoding
=
"UTF-8"
;
String
sign
=
createSign
(
characterEncoding
,
parameters
);
...
...
@@ -291,23 +296,21 @@ public class WxPayUtil {
* @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
+
"&"
);
}
public
static
String
createSign
(
String
characterEncoding
,
SortedMap
<
String
,
String
>
parameters
)
{
StringBuilder
sb
=
new
StringBuilder
();
// 多线程访问的情况下需要用StringBuffer
Set
es
=
parameters
.
keySet
();
// 所有参与传参的key按照accsii排序(升序)
for
(
Object
set
:
es
)
{
String
k
=
set
.
toString
();
Object
v
=
parameters
.
get
(
k
);
sb
.
append
(
k
)
.
append
(
"="
)
.
append
(
v
.
toString
())
.
append
(
"&"
);
}
sb
.
append
(
"key="
+
WxCommon
.
PRIVATE_KEY
);
String
sign
=
Md5Util
.
MD5Encode
(
sb
.
toString
(),
characterEncoding
).
toUpperCase
(
);
System
.
out
.
println
(
"签名:"
+
sign
);
return
sign
;
sb
.
append
(
"key="
)
.
append
(
WxCommon
.
PRIVATE_KEY
);
return
DigestUtils
.
md5Hex
(
sb
.
toString
()).
toUpperCase
(
);
}
/**
...
...
@@ -328,4 +331,17 @@ public class WxPayUtil {
}
return
ip
;
}
/**
* 设置微信二维码失效时间,并返回具体失效的时间点
* @param expire 二维码的有效时间,单位是毫秒
* @return
*/
public
static
String
getOrderExpireTime
(
Long
expire
){
SimpleDateFormat
sdf
=
new
SimpleDateFormat
(
"yyyyMMddHHmmss"
);
Date
now
=
new
Date
();
Date
afterDate
=
new
Date
(
now
.
getTime
()
+
expire
);
return
sdf
.
format
(
afterDate
);
}
}
wisenergy-service/src/main/java/cn/wisenergy/service/wxpay/WxCommon.java
View file @
ed7dd05d
...
...
@@ -12,7 +12,7 @@ public class WxCommon {
public
static
final
String
MCHID
=
"1606042985"
;
public
static
final
String
NOTIFY_URL
=
"http://
http://tcdwak.natappfree.cc
/pay/wxPayCallBack.do"
;
public
static
final
String
NOTIFY_URL
=
"http://
111.203.232.171:8997
/pay/wxPayCallBack.do"
;
public
static
final
String
WX_PAY_URL_pc
=
"https://api.mch.weixin.qq.com/v3/pay/transactions/native"
;
...
...
wisenergy-service/wisenergy-service.iml
View file @
ed7dd05d
...
...
@@ -118,6 +118,7 @@
<orderEntry
type=
"library"
name=
"Maven: org.reactivestreams:reactive-streams:1.0.2"
level=
"project"
/>
<orderEntry
type=
"library"
name=
"Maven: io.springfox:springfox-swagger2:2.9.2"
level=
"project"
/>
<orderEntry
type=
"library"
name=
"Maven: io.swagger:swagger-models:1.5.20"
level=
"project"
/>
<orderEntry
type=
"library"
name=
"Maven: com.fasterxml.jackson.core:jackson-annotations:2.9.0"
level=
"project"
/>
<orderEntry
type=
"library"
name=
"Maven: io.springfox:springfox-spi:2.9.2"
level=
"project"
/>
<orderEntry
type=
"library"
name=
"Maven: io.springfox:springfox-core:2.9.2"
level=
"project"
/>
<orderEntry
type=
"library"
name=
"Maven: io.springfox:springfox-schema:2.9.2"
level=
"project"
/>
...
...
@@ -129,6 +130,8 @@
<orderEntry
type=
"library"
name=
"Maven: org.mapstruct:mapstruct:1.2.0.Final"
level=
"project"
/>
<orderEntry
type=
"library"
name=
"Maven: io.springfox:springfox-swagger-ui:2.9.2"
level=
"project"
/>
<orderEntry
type=
"library"
name=
"Maven: io.jsonwebtoken:jjwt:0.9.1"
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-core:2.9.8"
level=
"project"
/>
<orderEntry
type=
"library"
name=
"Maven: joda-time:joda-time:2.10.2"
level=
"project"
/>
<orderEntry
type=
"library"
name=
"Maven: org.apache.shiro:shiro-core:1.4.0"
level=
"project"
/>
<orderEntry
type=
"library"
name=
"Maven: org.apache.shiro:shiro-lang:1.4.0"
level=
"project"
/>
...
...
@@ -138,8 +141,6 @@
<orderEntry
type=
"library"
name=
"Maven: org.apache.shiro:shiro-crypto-cipher:1.4.0"
level=
"project"
/>
<orderEntry
type=
"library"
name=
"Maven: org.apache.shiro:shiro-config-core:1.4.0"
level=
"project"
/>
<orderEntry
type=
"library"
name=
"Maven: org.apache.shiro:shiro-config-ogdl:1.4.0"
level=
"project"
/>
<orderEntry
type=
"library"
name=
"Maven: commons-beanutils:commons-beanutils:1.9.3"
level=
"project"
/>
<orderEntry
type=
"library"
name=
"Maven: commons-collections:commons-collections:3.2.2"
level=
"project"
/>
<orderEntry
type=
"library"
name=
"Maven: org.apache.shiro:shiro-event:1.4.0"
level=
"project"
/>
<orderEntry
type=
"library"
name=
"Maven: org.apache.shiro:shiro-spring:1.4.0"
level=
"project"
/>
<orderEntry
type=
"library"
name=
"Maven: org.apache.shiro:shiro-web:1.4.0"
level=
"project"
/>
...
...
@@ -165,11 +166,18 @@
<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.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"
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-annotations:2.9.0"
level=
"project"
/>
<orderEntry
type=
"library"
name=
"Maven: com.fasterxml.jackson.core:jackson-core:2.9.8"
level=
"project"
/>
<orderEntry
type=
"library"
name=
"Maven: com.github.binarywang:weixin-java-pay:3.0.0"
level=
"project"
/>
<orderEntry
type=
"library"
name=
"Maven: com.github.binarywang:weixin-java-common:3.0.0"
level=
"project"
/>
<orderEntry
type=
"library"
name=
"Maven: com.thoughtworks.xstream:xstream:1.4.9"
level=
"project"
/>
<orderEntry
type=
"library"
name=
"Maven: xmlpull:xmlpull:1.1.3.1"
level=
"project"
/>
<orderEntry
type=
"library"
name=
"Maven: xpp3:xpp3_min:1.1.4c"
level=
"project"
/>
<orderEntry
type=
"library"
name=
"Maven: org.apache.httpcomponents:httpmime:4.5.8"
level=
"project"
/>
<orderEntry
type=
"library"
name=
"Maven: org.slf4j:jcl-over-slf4j:1.7.26"
level=
"project"
/>
<orderEntry
type=
"library"
name=
"Maven: com.github.binarywang:qrcode-utils:1.1"
level=
"project"
/>
<orderEntry
type=
"library"
name=
"Maven: com.google.zxing:core:3.2.1"
level=
"project"
/>
<orderEntry
type=
"library"
name=
"Maven: commons-beanutils:commons-beanutils:1.9.3"
level=
"project"
/>
<orderEntry
type=
"library"
name=
"Maven: commons-collections:commons-collections:3.2.2"
level=
"project"
/>
<orderEntry
type=
"library"
name=
"Maven: org.bouncycastle:bcpkix-jdk15on:1.59"
level=
"project"
/>
<orderEntry
type=
"library"
name=
"Maven: com.itextpdf:itextpdf:5.5.13"
level=
"project"
/>
<orderEntry
type=
"library"
name=
"Maven: com.itextpdf:itext-asian:5.2.0"
level=
"project"
/>
<orderEntry
type=
"library"
name=
"Maven: org.apache.commons:commons-lang3:3.8.1"
level=
"project"
/>
...
...
wisenergy-web-admin/src/main/java/cn/wisenergy/web/admin/controller/app/PayController.java
View file @
ed7dd05d
...
...
@@ -5,7 +5,7 @@ import cn.wisenergy.model.dto.PayPageDto;
import
cn.wisenergy.model.dto.PayQueryDto
;
import
cn.wisenergy.service.app.AliPayService
;
import
cn.wisenergy.service.app.TestWxPayService
;
import
cn.wisenergy.service.app.WxPayService
;
import
cn.wisenergy.service.app.WxPayService
1
;
import
cn.wisenergy.service.common.Common
;
import
com.alipay.api.AlipayApiException
;
import
com.alipay.api.AlipayClient
;
...
...
@@ -18,6 +18,7 @@ import io.swagger.annotations.ApiImplicitParam;
import
io.swagger.annotations.ApiOperation
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.lang.StringUtils
;
import
org.apache.ibatis.annotations.Param
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.web.bind.annotation.*
;
...
...
@@ -30,6 +31,7 @@ import java.security.InvalidKeyException;
import
java.security.NoSuchAlgorithmException
;
import
java.security.SignatureException
;
import
java.security.spec.InvalidKeySpecException
;
import
java.util.Map
;
/**
* @author 86187
...
...
@@ -44,7 +46,7 @@ import java.security.spec.InvalidKeySpecException;
public
class
PayController
{
@Autowired
private
WxPayService
wxPayService
;
private
WxPayService
1
wxPayService
;
@Autowired
private
TestWxPayService
testWxPayService
;
...
...
@@ -96,35 +98,10 @@ public class PayController {
}
@ApiOperation
(
value
=
"微行支付-统一下单测试"
,
notes
=
"微行支付-统一下单"
,
httpMethod
=
"POST"
)
@ApiImplicitParam
(
name
=
"payPageDto"
,
value
=
"支付入参"
,
dataType
=
"PayPageDto"
)
@PostMapping
(
"/wxPayTest"
)
public
R
<
String
>
wxPayTest
(
@RequestBody
PayPageDto
payPageDto
)
throws
UnsupportedEncodingException
,
InvalidKeySpecException
,
NoSuchAlgorithmException
,
InvalidKeyException
,
SignatureException
{
return
wxPayService
.
wxPay
(
payPageDto
);
}
@ApiOperation
(
value
=
"微信支付-交易查询"
,
notes
=
"微信支付-交易查询"
,
httpMethod
=
"POST"
)
@ApiImplicitParam
(
name
=
"payQueryDto"
,
value
=
"查询参数"
,
dataType
=
"PayQueryDto"
)
@PostMapping
(
"/queryWx"
)
public
R
<
String
>
queryWx
(
@RequestBody
PayQueryDto
payQueryDto
)
throws
InvalidKeySpecException
,
SignatureException
,
NoSuchAlgorithmException
,
InvalidKeyException
,
UnsupportedEncodingException
{
if
(
null
==
payQueryDto
||
StringUtils
.
isBlank
(
payQueryDto
.
getOutTradeNo
()))
{
return
R
.
error
(
"操作错误!"
);
}
return
wxPayService
.
queryWx
(
payQueryDto
);
}
@ApiOperation
(
value
=
"测试-微行支付-统一下单"
,
notes
=
"测试-微行支付-统一下单"
,
httpMethod
=
"POST"
)
@ApiImplicitParam
(
name
=
"payPageDto"
,
value
=
"支付入参"
,
dataType
=
"PayPageDto"
)
@PostMapping
(
"/wx_Pay"
)
public
R
<
String
>
wx_Pay
(
@RequestBody
PayPageDto
payPageDto
)
throws
IOException
,
InvalidKeySpecException
,
NoSuchAlgorithmException
,
InvalidKeyException
,
SignatureException
,
IllegalBlockSizeException
{
return
wxPayService
.
wx_Pay
(
payPageDto
);
}
@ApiOperation
(
value
=
"微行支付-统一下单"
,
notes
=
"微行支付-统一下单"
,
httpMethod
=
"POST"
)
@ApiImplicitParam
(
name
=
"payPageDto"
,
value
=
"支付入参"
,
dataType
=
"PayPageDto"
)
@PostMapping
(
"/wxPay"
)
public
R
<
String
>
wxPay
(
@RequestBody
PayPageDto
payPageDto
,
HttpServletResponse
response
){
public
R
<
Map
<
String
,
String
>
>
wxPay
(
@RequestBody
PayPageDto
payPageDto
,
HttpServletResponse
response
){
return
testWxPayService
.
wxPay
(
payPageDto
,
response
);
}
...
...
@@ -134,15 +111,32 @@ public class PayController {
public
R
<
String
>
h5WxPay
(
@RequestBody
PayPageDto
payPageDto
,
HttpServletRequest
request
,
HttpServletResponse
response
)
throws
JsonProcessingException
{
return
testWxPayService
.
h5WxPay
(
payPageDto
,
request
,
response
);
}
@ApiOperation
(
value
=
"小程序-统一下单"
,
notes
=
"小程序-统一下单"
,
httpMethod
=
"POST"
)
@ApiImplicitParam
(
name
=
"payPageDto"
,
value
=
"支付入参"
,
dataType
=
"PayPageDto"
)
@PostMapping
(
"/WxPayApplets"
)
public
R
<
String
>
WxPayApplets
(
@RequestBody
PayPageDto
payPageDto
,
HttpServletRequest
request
,
HttpServletResponse
response
)
throws
JsonProcessingException
{
return
testWxPayService
.
WxPayApplets
(
payPageDto
,
request
,
response
);
}
/**
* 微信回调函数
* 支付成功后微信服务器会调用此方法
*/
@ApiOperation
(
value
=
"微信回调函数"
,
notes
=
"微信回调函数"
,
httpMethod
=
"POST"
)
@RequestMapping
(
value
=
"/wxPayCallBack.do"
)
public
R
<
String
>
wxPayCallBack
(
HttpServletRequest
request
,
HttpServletResponse
response
)
{
return
testWxPayService
.
wxPayCallBack
(
request
,
response
);
public
void
wxPayCallBack
(
HttpServletRequest
request
,
HttpServletResponse
response
)
throws
Exception
{
testWxPayService
.
wxPayCallBack
(
request
,
response
);
}
@ApiOperation
(
value
=
"微信支付-交易查询"
,
notes
=
"微信支付-交易查询"
,
httpMethod
=
"POST"
)
@ApiImplicitParam
(
name
=
"out_trade_no"
,
value
=
"查询参数"
,
dataType
=
"String"
)
@PostMapping
(
"/queryWx"
)
public
R
<
Map
<
String
,
String
>>
queryWx
(
@Param
(
"out_trade_no"
)
String
out_trade_no
)
throws
Exception
{
System
.
out
.
println
(
"out_trade_no:"
+
out_trade_no
);
if
(
StringUtils
.
isBlank
(
out_trade_no
))
{
return
R
.
error
(
"入参为空"
);
}
return
testWxPayService
.
wxQuery
(
out_trade_no
);
}
}
wisenergy-web-admin/wisenergy-web-admin.iml
View file @
ed7dd05d
...
...
@@ -120,6 +120,7 @@
<orderEntry
type=
"library"
name=
"Maven: org.reactivestreams:reactive-streams:1.0.2"
level=
"project"
/>
<orderEntry
type=
"library"
name=
"Maven: io.springfox:springfox-swagger2:2.9.2"
level=
"project"
/>
<orderEntry
type=
"library"
name=
"Maven: io.swagger:swagger-models:1.5.20"
level=
"project"
/>
<orderEntry
type=
"library"
name=
"Maven: com.fasterxml.jackson.core:jackson-annotations:2.9.0"
level=
"project"
/>
<orderEntry
type=
"library"
name=
"Maven: io.springfox:springfox-spi:2.9.2"
level=
"project"
/>
<orderEntry
type=
"library"
name=
"Maven: io.springfox:springfox-core:2.9.2"
level=
"project"
/>
<orderEntry
type=
"library"
name=
"Maven: io.springfox:springfox-schema:2.9.2"
level=
"project"
/>
...
...
@@ -131,6 +132,8 @@
<orderEntry
type=
"library"
name=
"Maven: org.mapstruct:mapstruct:1.2.0.Final"
level=
"project"
/>
<orderEntry
type=
"library"
name=
"Maven: io.springfox:springfox-swagger-ui:2.9.2"
level=
"project"
/>
<orderEntry
type=
"library"
name=
"Maven: io.jsonwebtoken:jjwt:0.9.1"
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-core:2.9.8"
level=
"project"
/>
<orderEntry
type=
"library"
name=
"Maven: joda-time:joda-time:2.10.2"
level=
"project"
/>
<orderEntry
type=
"library"
name=
"Maven: cn.hutool:hutool-all:4.6.7"
level=
"project"
/>
<orderEntry
type=
"library"
name=
"Maven: io.swagger:swagger-annotations:1.5.23"
level=
"project"
/>
...
...
@@ -153,11 +156,18 @@
<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.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"
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-annotations:2.9.0"
level=
"project"
/>
<orderEntry
type=
"library"
name=
"Maven: com.fasterxml.jackson.core:jackson-core:2.9.8"
level=
"project"
/>
<orderEntry
type=
"library"
name=
"Maven: com.github.binarywang:weixin-java-pay:3.0.0"
level=
"project"
/>
<orderEntry
type=
"library"
name=
"Maven: com.github.binarywang:weixin-java-common:3.0.0"
level=
"project"
/>
<orderEntry
type=
"library"
name=
"Maven: com.thoughtworks.xstream:xstream:1.4.9"
level=
"project"
/>
<orderEntry
type=
"library"
name=
"Maven: xmlpull:xmlpull:1.1.3.1"
level=
"project"
/>
<orderEntry
type=
"library"
name=
"Maven: xpp3:xpp3_min:1.1.4c"
level=
"project"
/>
<orderEntry
type=
"library"
name=
"Maven: org.apache.httpcomponents:httpmime:4.5.8"
level=
"project"
/>
<orderEntry
type=
"library"
name=
"Maven: org.slf4j:jcl-over-slf4j:1.7.26"
level=
"project"
/>
<orderEntry
type=
"library"
name=
"Maven: com.github.binarywang:qrcode-utils:1.1"
level=
"project"
/>
<orderEntry
type=
"library"
name=
"Maven: com.google.zxing:core:3.2.1"
level=
"project"
/>
<orderEntry
type=
"library"
name=
"Maven: commons-beanutils:commons-beanutils:1.9.3"
level=
"project"
/>
<orderEntry
type=
"library"
name=
"Maven: commons-collections:commons-collections:3.2.2"
level=
"project"
/>
<orderEntry
type=
"library"
name=
"Maven: org.bouncycastle:bcpkix-jdk15on:1.59"
level=
"project"
/>
<orderEntry
type=
"library"
name=
"Maven: com.itextpdf:itextpdf:5.5.13"
level=
"project"
/>
<orderEntry
type=
"library"
name=
"Maven: com.itextpdf:itext-asian:5.2.0"
level=
"project"
/>
<orderEntry
type=
"library"
name=
"Maven: org.apache.shiro:shiro-spring:1.4.0"
level=
"project"
/>
...
...
@@ -169,8 +179,6 @@
<orderEntry
type=
"library"
name=
"Maven: org.apache.shiro:shiro-crypto-cipher:1.4.0"
level=
"project"
/>
<orderEntry
type=
"library"
name=
"Maven: org.apache.shiro:shiro-config-core:1.4.0"
level=
"project"
/>
<orderEntry
type=
"library"
name=
"Maven: org.apache.shiro:shiro-config-ogdl:1.4.0"
level=
"project"
/>
<orderEntry
type=
"library"
name=
"Maven: commons-beanutils:commons-beanutils:1.9.3"
level=
"project"
/>
<orderEntry
type=
"library"
name=
"Maven: commons-collections:commons-collections:3.2.2"
level=
"project"
/>
<orderEntry
type=
"library"
name=
"Maven: org.apache.shiro:shiro-event:1.4.0"
level=
"project"
/>
<orderEntry
type=
"library"
name=
"Maven: org.apache.shiro:shiro-web:1.4.0"
level=
"project"
/>
<orderEntry
type=
"library"
name=
"Maven: org.apache.commons:commons-lang3:3.8.1"
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