Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
B
baa-pay-server
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
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
贺超
baa-pay-server
Commits
a98df19f
Commit
a98df19f
authored
Sep 08, 2021
by
刘李鹏
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
微信支付宝、退款完成
parent
5c04db5f
Changes
9
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
800 additions
and
15 deletions
+800
-15
AlipayMerchantAcquirer.java
...quant/baa/pay/acquirer/weixin/AlipayMerchantAcquirer.java
+11
-4
WeiXinMerchantAcquirer.java
...quant/baa/pay/acquirer/weixin/WeiXinMerchantAcquirer.java
+18
-4
CheckRefundRequestData.java
...va/cn/quant/baa/pay/model/web/CheckRefundRequestData.java
+2
-2
RefundRequestData.java
...in/java/cn/quant/baa/pay/model/web/RefundRequestData.java
+44
-0
TransactionService.java
...ain/java/cn/quant/baa/pay/service/TransactionService.java
+1
-1
pom.xml
baa-pay-server/pom.xml
+10
-0
AlipayController.java
...src/main/java/cn/quant/baa/pay/rest/AlipayController.java
+170
-0
TransactionController.java
...ain/java/cn/quant/baa/pay/rest/TransactionController.java
+12
-4
WxpayController.java
.../src/main/java/cn/quant/baa/pay/rest/WxpayController.java
+532
-0
No files found.
baa-pay-core/src/main/java/cn/quant/baa/pay/acquirer/weixin/AlipayMerchantAcquirer.java
View file @
a98df19f
...
...
@@ -4,10 +4,7 @@ import cn.quant.baa.pay.acquirer.AcquirerProperties;
import
cn.quant.baa.pay.acquirer.MerchantAcquirer
;
import
cn.quant.baa.pay.dict.AccessCode
;
import
cn.quant.baa.pay.jpa.entity.PayHistoryEntity
;
import
cn.quant.baa.pay.model.web.CheckPayRequestData
;
import
cn.quant.baa.pay.model.web.CheckRefundRequestData
;
import
cn.quant.baa.pay.model.web.CloseRequestData
;
import
cn.quant.baa.pay.model.web.PayRequestData
;
import
cn.quant.baa.pay.model.web.*
;
import
com.fasterxml.jackson.core.JsonProcessingException
;
import
com.fasterxml.jackson.core.type.TypeReference
;
import
com.fasterxml.jackson.databind.JsonNode
;
...
...
@@ -158,6 +155,16 @@ public class AlipayMerchantAcquirer extends MerchantAcquirer {
return
doExecute
(
bodyNode
);
}
@Override
public
JsonNode
refund
(
RefundRequestData
refundRequestData
)
{
ObjectNode
bodyNode
=
objectMapper
.
createObjectNode
();
bodyNode
.
put
(
"out_trade_no"
,
refundRequestData
.
getOutTradeNo
());
bodyNode
.
put
(
"refund_amount"
,
refundRequestData
.
getRefundAmount
());
bodyNode
.
put
(
"refund_reason"
,
refundRequestData
.
getRefundReason
());
bodyNode
.
put
(
"out_request_no"
,
refundRequestData
.
getOutRefundNo
());
return
doExecute
(
bodyNode
);
}
/**
* App支付发起请求
*
...
...
baa-pay-core/src/main/java/cn/quant/baa/pay/acquirer/weixin/WeiXinMerchantAcquirer.java
View file @
a98df19f
...
...
@@ -3,10 +3,7 @@ package cn.quant.baa.pay.acquirer.weixin;
import
cn.quant.baa.pay.acquirer.AcquirerProperties
;
import
cn.quant.baa.pay.acquirer.MerchantAcquirer
;
import
cn.quant.baa.pay.jpa.entity.PayHistoryEntity
;
import
cn.quant.baa.pay.model.web.CheckPayRequestData
;
import
cn.quant.baa.pay.model.web.CheckRefundRequestData
;
import
cn.quant.baa.pay.model.web.CloseRequestData
;
import
cn.quant.baa.pay.model.web.PayRequestData
;
import
cn.quant.baa.pay.model.web.*
;
import
com.fasterxml.jackson.core.JsonProcessingException
;
import
com.fasterxml.jackson.databind.JsonNode
;
import
com.fasterxml.jackson.databind.ObjectMapper
;
...
...
@@ -141,6 +138,23 @@ public class WeiXinMerchantAcquirer extends MerchantAcquirer {
return
doExecute
(
payAccess
,
bodyNode
);
}
@Override
public
JsonNode
refund
(
RefundRequestData
refundRequestData
)
{
// 转换金额为分
BigInteger
amount
=
new
BigDecimal
(
refundRequestData
.
getRefundAmount
()).
multiply
(
new
BigDecimal
(
100
)).
toBigInteger
();
ObjectNode
bodyNode
=
objectMapper
.
createObjectNode
();
bodyNode
.
put
(
"out_trade_no"
,
refundRequestData
.
getOutTradeNo
());
bodyNode
.
put
(
"out_refund_no"
,
refundRequestData
.
getOutRefundNo
());
bodyNode
.
put
(
"reason"
,
refundRequestData
.
getRefundReason
());
// bodyNode.put("notify_url", "");
bodyNode
.
putObject
(
"amount"
)
.
put
(
"refund"
,
amount
)
.
put
(
"total"
,
amount
)
.
put
(
"currency"
,
"CNY"
);
String
payAccess
=
properties
.
getPayAccess
();
return
doExecute
(
payAccess
,
bodyNode
);
}
/**
*
* @param payAccess
...
...
baa-pay-core/src/main/java/cn/quant/baa/pay/model/web/CheckRefundRequestData.java
View file @
a98df19f
...
...
@@ -24,8 +24,8 @@ public class CheckRefundRequestData implements Serializable {
/**
* 退款订单号
*/
@Size
(
min
=
6
,
max
=
64
,
message
=
"ILLEGAL_REQ_OUT_
TRADE
_NO"
)
@NotNull
(
message
=
"ILLEGAL_REQ_OUT_
TRADE
_NO"
)
@Size
(
min
=
6
,
max
=
64
,
message
=
"ILLEGAL_REQ_OUT_
REFUND
_NO"
)
@NotNull
(
message
=
"ILLEGAL_REQ_OUT_
REFUND
_NO"
)
private
String
outRefundNo
;
/**
...
...
baa-pay-core/src/main/java/cn/quant/baa/pay/model/web/RefundRequestData.java
View file @
a98df19f
...
...
@@ -21,6 +21,13 @@ public class RefundRequestData implements Serializable {
@NotNull
(
message
=
"ILLEGAL_REQ_CHAN_ID"
)
private
String
chanId
;
/**
* 退款订单号
*/
@Size
(
min
=
6
,
max
=
64
,
message
=
"ILLEGAL_REQ_OUT_REFUND_NO"
)
@NotNull
(
message
=
"ILLEGAL_REQ_OUT_REFUND_NO"
)
private
String
outRefundNo
;
/**
* 商户订单号
*/
...
...
@@ -28,6 +35,19 @@ public class RefundRequestData implements Serializable {
@NotNull
(
message
=
"ILLEGAL_REQ_OUT_TRADE_NO"
)
private
String
outTradeNo
;
/**
* 退款原因
*/
@NotNull
(
message
=
"ILLEGAL_REQ_REFUND_REASON"
)
private
String
refundReason
;
/**
* 退款金额
*/
@NotNull
(
message
=
"ILLEGAL_REQ_REFUND_AMOUNT"
)
private
String
refundAmount
;
public
String
getChanId
()
{
return
chanId
;
}
...
...
@@ -36,6 +56,14 @@ public class RefundRequestData implements Serializable {
this
.
chanId
=
chanId
;
}
public
String
getOutRefundNo
()
{
return
outRefundNo
;
}
public
void
setOutRefundNo
(
String
outRefundNo
)
{
this
.
outRefundNo
=
outRefundNo
;
}
public
String
getOutTradeNo
()
{
return
outTradeNo
;
}
...
...
@@ -43,4 +71,20 @@ public class RefundRequestData implements Serializable {
public
void
setOutTradeNo
(
String
outTradeNo
)
{
this
.
outTradeNo
=
outTradeNo
;
}
public
String
getRefundReason
()
{
return
refundReason
;
}
public
void
setRefundReason
(
String
refundReason
)
{
this
.
refundReason
=
refundReason
;
}
public
String
getRefundAmount
()
{
return
refundAmount
;
}
public
void
setRefundAmount
(
String
refundAmount
)
{
this
.
refundAmount
=
refundAmount
;
}
}
baa-pay-core/src/main/java/cn/quant/baa/pay/service/TransactionService.java
View file @
a98df19f
...
...
@@ -130,7 +130,7 @@ public class TransactionService extends BusinessService {
}
@Transactional
(
propagation
=
Propagation
.
NOT_SUPPORTED
)
public
JsonNode
checkR
efund
(
RefundRequestData
data
)
{
public
JsonNode
r
efund
(
RefundRequestData
data
)
{
return
acquirer
.
refund
(
data
);
}
...
...
baa-pay-server/pom.xml
View file @
a98df19f
...
...
@@ -67,6 +67,16 @@
<artifactId>
junit
</artifactId>
<scope>
test
</scope>
</dependency>
<dependency>
<groupId>
com.alipay.sdk
</groupId>
<artifactId>
alipay-sdk-java
</artifactId>
<version>
4.16.21.ALL
</version>
</dependency>
<dependency>
<groupId>
com.github.wechatpay-apiv3
</groupId>
<artifactId>
wechatpay-apache-httpclient
</artifactId>
<version>
0.2.2
</version>
</dependency>
</dependencies>
<build>
...
...
baa-pay-server/src/main/java/cn/quant/baa/pay/rest/AlipayController.java
0 → 100644
View file @
a98df19f
package
cn
.
quant
.
baa
.
pay
.
rest
;
import
cn.quant.baa.pay.annotation.BusinessMapping
;
import
cn.quant.baa.pay.context.TransactionSession
;
import
cn.quant.spring.rest.AbstractController
;
import
com.alipay.api.AlipayClient
;
import
com.alipay.api.CertAlipayRequest
;
import
com.alipay.api.DefaultAlipayClient
;
import
com.alipay.api.domain.AlipayTradeAppPayModel
;
import
com.alipay.api.domain.AlipayTradePagePayModel
;
import
com.alipay.api.domain.AlipayTradeWapPayModel
;
import
com.alipay.api.request.AlipayTradeAppPayRequest
;
import
com.alipay.api.request.AlipayTradePagePayRequest
;
import
com.alipay.api.request.AlipayTradeWapPayRequest
;
import
com.alipay.api.response.AlipayTradePagePayResponse
;
import
com.alipay.api.response.AlipayTradeWapPayResponse
;
import
org.springframework.web.bind.annotation.*
;
import
javax.crypto.Cipher
;
import
javax.crypto.spec.GCMParameterSpec
;
import
javax.crypto.spec.SecretKeySpec
;
import
java.nio.charset.Charset
;
import
java.util.UUID
;
/**
* Created with IntelliJ IDEA.
* Author: Lipeng Liu
* Date: 2021/8/31
* Time: 上午10:36
* Description: No Description
*/
@RestController
@RequestMapping
(
"alipay"
)
public
class
AlipayController
extends
AbstractController
{
@ResponseBody
@GetMapping
(
"/h5"
)
public
String
h5
()
{
try
{
// 1. 创建AlipayClient实例
AlipayClient
alipayClient
=
new
DefaultAlipayClient
(
getClientParams
());
// 2. 创建使用的Open API对应的Request请求对象
AlipayTradeWapPayRequest
request
=
getRequestH5
();
// 3. 发起请求并处理响应
AlipayTradeWapPayResponse
response
=
alipayClient
.
pageExecute
(
request
);
if
(
response
.
isSuccess
())
{
System
.
out
.
println
(
"调用成功。"
);
return
response
.
getBody
();
}
else
{
System
.
out
.
println
(
"调用失败,原因:"
+
response
.
getMsg
()
+
","
+
response
.
getSubMsg
());
}
}
catch
(
Exception
e
)
{
System
.
out
.
println
(
"调用遭遇异常,原因:"
+
e
.
getMessage
());
throw
new
RuntimeException
(
e
.
getMessage
(),
e
);
}
return
null
;
}
@ResponseBody
@GetMapping
(
"/web"
)
public
String
web
()
{
try
{
// 1. 创建AlipayClient实例
AlipayClient
alipayClient
=
new
DefaultAlipayClient
(
getClientParams
());
// 2. 创建使用的Open API对应的Request请求对象
AlipayTradePagePayRequest
request
=
getRequestWeb
();
// 3. 发起请求并处理响应
AlipayTradePagePayResponse
response
=
alipayClient
.
pageExecute
(
request
);
if
(
response
.
isSuccess
())
{
System
.
out
.
println
(
"调用成功。"
);
return
response
.
getBody
();
}
else
{
System
.
out
.
println
(
"调用失败,原因:"
+
response
.
getMsg
()
+
","
+
response
.
getSubMsg
());
}
}
catch
(
Exception
e
)
{
System
.
out
.
println
(
"调用遭遇异常,原因:"
+
e
.
getMessage
());
throw
new
RuntimeException
(
e
.
getMessage
(),
e
);
}
return
null
;
}
@ResponseBody
@GetMapping
(
"/app"
)
public
String
app
()
{
try
{
// 1. 创建AlipayClient实例
AlipayClient
alipayClient
=
new
DefaultAlipayClient
(
getClientParams
());
// 2. 创建使用的Open API对应的Request请求对象
AlipayTradePagePayRequest
request
=
getRequestWeb
();
// 3. 发起请求并处理响应
AlipayTradePagePayResponse
response
=
alipayClient
.
sdkExecute
(
request
);
if
(
response
.
isSuccess
())
{
System
.
out
.
println
(
"调用成功。"
);
return
response
.
getBody
();
}
else
{
System
.
out
.
println
(
"调用失败,原因:"
+
response
.
getMsg
()
+
","
+
response
.
getSubMsg
());
}
}
catch
(
Exception
e
)
{
System
.
out
.
println
(
"调用遭遇异常,原因:"
+
e
.
getMessage
());
throw
new
RuntimeException
(
e
.
getMessage
(),
e
);
}
return
null
;
}
private
static
CertAlipayRequest
getClientParams
()
{
CertAlipayRequest
certParams
=
new
CertAlipayRequest
();
certParams
.
setServerUrl
(
"https://openapi.alipay.com/gateway.do"
);
//请更换为您的AppId
certParams
.
setAppId
(
"2021002106644714"
);
//请更换为您的PKCS8格式的应用私钥
certParams
.
setPrivateKey
(
"MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQC3rgHa/x67gaY08RJoeVWLghAiQooLG/dOojW+639RAuirhxLyeuawbcch291uj/90MPTQy86nNKKQBbet41MQtS8L6ts/5Bjp2GYgzsQlmPCRWE7Il94/6R18fg9ZZQ4rx280BrX60hKTFcM+rn6IuNAiT7wHMcsjonRLsbWW/ZaSmMwqJcfhRU2/8Slznw2AX8jHs3X/ZZtM8usm3Hd41U9m7DIRPgejo4wlgTmUrFJrgQIWdsuSCYm88a4BzFc3Wfa2No5stqkHZizsshx52UGOgvgJdxF6PUqC9af+qQSdldTcbOeQjgQbJOLfiZoPQzyO8DaszIzJkB8FB38DAgMBAAECggEBAIbZ7qzMjtCU3+SQdLZVFlQFGjk85sI/NvL5LkJL/T4Jx65eza9OQd2XyxH1rH1GpQK2CpbceozRnOPl/rNgaRSkILU8KNmgahYM9PXzN5huz3e2AKlOrjH3wNksZ7J2+c90bRUiNCrAXji0SpLTYzyXit8V8PLLQNuZoo4MG0iNCJy8riZwUn8ZQLJnCMv1VD0yUyGSr/6LAEJjJZTrrnpibw/99hqFO8Z6UvIs9JewfvjdzamT3UxF0gURSncieQwvsq3mYlq6ppcWqzBrEqJHZJOGzZrxtsOALmOFr7KCp6qRziareK/9vb9RLnZtBSrLZqhJF/MU1oFWpHixRoECgYEA3yKt0rT2v1rjaOlMQDF7pKKfnGmRHGps9214Smsj/wOwWdlwwixWZA2DUFLOUpPQRu3dPp3ZZQdcg21NejvEbtu4CcN0lrvnVlBIrExQmm9zqjDWijljtNvf+POqMkwyLumtNtdNxWLZxdiDClosShEX9kv4ttdlF5bEc2z3V8ECgYEA0rumR+zUnvT6OS6l6msUXgZ/f/XBgcW8BLdZV6pSJJVh3I9CVgc55MlTTGTd0yNfrDPVbwloDpjVVPSNI9YNL0h9i0vfMTHolWOR7RCcqBoquvt66NjtaV70PjBm1pxNVVDaUSgCva+oOFaRnoHjOSA+jyZkKRHjwnEWlcyRZ8MCgYBnZCtE6gM3cYbUEt35FLSk+ZGZqTTLBOlO0NOfL/vy6yOozl84KdEx9Sz2aBggHUuxwf/1RrD35ixQ3bG7xLvlXjvtkjqQqaqszPCPnaDvnlrq7kxKqgLwR72FHmqrebD7Gd3f/m2T25Tq3sMBZf0FqNwAjP1Gw5GdF4gZr9EAQQKBgQCQrWgxxTUMlOAd1hru3+kxzIBIl67sq5a0HjTmbPbMSwrO5EQE0B09J8NalX198bFDhqqn+utH6kG8e9FSoyiWJ8yZj9OB8OPffGa5PUhwWNaxXOo7ZoNIbnp9H7na6aBmTIY2ZaPMGwcA9t4u1rnrhGmu2gq176RQ4FdDLRk/BQKBgQDU+Oab3jL2MoDMtGk4ZGYQUcTMB/ILtG4O1bx8BhJZ/Rula3Rt7dYPrRng3uZ0sTVh7/QRSn02hLY72UoItge3POZMEbNQLb+gzhIuU4v4hLT3H6WK2MSaLftsb9mPyW9LX76xQS4ayf5xZqeKK2jOtIZCsiLmC/ALvIytcr2DHA=="
);
//请更换为您使用的字符集编码,推荐采用utf-8
certParams
.
setCharset
(
"utf-8"
);
certParams
.
setFormat
(
"json"
);
certParams
.
setSignType
(
"RSA2"
);
//请更换为您的应用公钥证书文件路径
certParams
.
setCertPath
(
"/Users/liulipeng/Web/lianghuapai/baa-pay/baa-pay-server/src/main/resources/alipay/appCertPublicKey_2021002106644714.crt"
);
//请更换您的支付宝公钥证书文件路径
certParams
.
setAlipayPublicCertPath
(
"/Users/liulipeng/Web/lianghuapai/baa-pay/baa-pay-server/src/main/resources/alipay/alipayCertPublicKey_RSA2.crt"
);
//更换为支付宝根证书文件路径
certParams
.
setRootCertPath
(
"/Users/liulipeng/Web/lianghuapai/baa-pay/baa-pay-server/src/main/resources/alipay/alipayRootCert.crt"
);
return
certParams
;
}
private
static
AlipayTradeWapPayRequest
getRequestH5
()
{
// 初始化Request,并填充Model属性。实际调用时请替换为您想要使用的API对应的Request对象。
AlipayTradeWapPayRequest
request
=
new
AlipayTradeWapPayRequest
();
AlipayTradeWapPayModel
model
=
new
AlipayTradeWapPayModel
();
model
.
setOutTradeNo
(
UUID
.
randomUUID
().
toString
().
replace
(
"-"
,
""
));
model
.
setProductCode
(
"QUICK_WAP_WAY"
);
model
.
setTotalAmount
(
"0.01"
);
model
.
setSubject
(
"这是订单标题"
);
model
.
setBody
(
"这是订单描述"
);
request
.
setBizModel
(
model
);
request
.
setNotifyUrl
(
""
);
request
.
setReturnUrl
(
""
);
return
request
;
}
private
static
AlipayTradePagePayRequest
getRequestWeb
()
{
// 初始化Request,并填充Model属性。实际调用时请替换为您想要使用的API对应的Request对象。
AlipayTradePagePayRequest
request
=
new
AlipayTradePagePayRequest
();
AlipayTradePagePayModel
model
=
new
AlipayTradePagePayModel
();
model
.
setOutTradeNo
(
UUID
.
randomUUID
().
toString
().
replace
(
"-"
,
""
));
model
.
setProductCode
(
"FAST_INSTANT_TRADE_PAY"
);
model
.
setTotalAmount
(
"0.01"
);
model
.
setSubject
(
"这是订单标题"
);
model
.
setBody
(
"这是订单描述"
);
request
.
setBizModel
(
model
);
request
.
setNotifyUrl
(
""
);
request
.
setReturnUrl
(
""
);
return
request
;
}
private
static
AlipayTradeAppPayRequest
getRequestApp
()
{
// 初始化Request,并填充Model属性。实际调用时请替换为您想要使用的API对应的Request对象。
AlipayTradeAppPayRequest
request
=
new
AlipayTradeAppPayRequest
();
AlipayTradeAppPayModel
model
=
new
AlipayTradeAppPayModel
();
model
.
setOutTradeNo
(
UUID
.
randomUUID
().
toString
().
replace
(
"-"
,
""
));
model
.
setProductCode
(
"QUICK_MSECURITY_PAY"
);
model
.
setTotalAmount
(
"0.01"
);
model
.
setSubject
(
"这是订单标题"
);
model
.
setBody
(
"这是订单描述"
);
request
.
setBizModel
(
model
);
request
.
setNotifyUrl
(
""
);
request
.
setReturnUrl
(
""
);
return
request
;
}
}
baa-pay-server/src/main/java/cn/quant/baa/pay/rest/TransactionController.java
View file @
a98df19f
...
...
@@ -3,10 +3,7 @@ package cn.quant.baa.pay.rest;
import
cn.quant.baa.pay.annotation.BusinessMapping
;
import
cn.quant.baa.pay.jpa.entity.PayHistoryEntity
;
import
cn.quant.baa.pay.model.BusinessRequest
;
import
cn.quant.baa.pay.model.web.CheckPayRequestData
;
import
cn.quant.baa.pay.model.web.CheckRefundRequestData
;
import
cn.quant.baa.pay.model.web.CloseRequestData
;
import
cn.quant.baa.pay.model.web.PayRequestData
;
import
cn.quant.baa.pay.model.web.*
;
import
cn.quant.baa.pay.service.TransactionService
;
import
com.fasterxml.jackson.databind.JsonNode
;
import
org.springframework.beans.factory.annotation.Autowired
;
...
...
@@ -71,5 +68,16 @@ public class TransactionController extends BusinessController {
return
res
;
}
@ResponseBody
@BusinessMapping
(
session
=
1
)
@PostMapping
(
"/refund"
)
public
JsonNode
refund
(
@RequestBody
BusinessRequest
<
RefundRequestData
>
request
)
{
RefundRequestData
data
=
request
.
getData
();
JsonNode
res
=
transactionService
.
refund
(
data
);
System
.
currentTimeMillis
();
return
res
;
}
}
baa-pay-server/src/main/java/cn/quant/baa/pay/rest/WxpayController.java
0 → 100644
View file @
a98df19f
This diff is collapsed.
Click to expand it.
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