Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
C
cloud-platform
Project
Project
Details
Activity
Releases
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
youjj
cloud-platform
Commits
f05baad0
Commit
f05baad0
authored
Oct 24, 2019
by
jiaorz
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
支付宝支付转为预授权
parent
cbfafb73
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
52 additions
and
28 deletions
+52
-28
OrderPayBiz.java
...ain/java/com/xxfc/platform/universal/biz/OrderPayBiz.java
+52
-28
No files found.
xx-universal/xx-universal-server/src/main/java/com/xxfc/platform/universal/biz/OrderPayBiz.java
View file @
f05baad0
...
...
@@ -289,7 +289,7 @@ public class OrderPayBiz extends BaseBiz<OrderPayMapper, OrderPay> {
AlipayClient
alipayClient
=
getAlipayClient
();
//实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称:alipay.trade.app.pay
try
{
return
appOrderPay
(
alipayClient
,
orderPayVo
,
notifyUrl
);
return
fundAuthOrderAppFreeze
(
alipayClient
,
orderPayVo
,
notifyUrl
);
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
...
...
@@ -347,7 +347,6 @@ public class OrderPayBiz extends BaseBiz<OrderPayMapper, OrderPay> {
//预授权冻结
public
String
fundAuthOrderAppFreeze
(
AlipayClient
alipayClient
,
OrderPayVo
orderPayVo
,
String
notifyUrl
)
throws
AlipayApiException
{
AlipayFundAuthOrderAppFreezeRequest
request
=
new
AlipayFundAuthOrderAppFreezeRequest
();
AlipayFundAuthOrderAppFreezeModel
model
=
new
AlipayFundAuthOrderAppFreezeModel
();
BigDecimal
realAmount
=
new
BigDecimal
(
orderPayVo
.
getAmount
().
toString
()).
divide
(
new
BigDecimal
(
"100"
),
2
,
BigDecimal
.
ROUND_UP
);
request
.
setBizContent
(
"{"
+
"\"auth_code\":\""
+
orderPayVo
.
getTradeNo
()
+
"\","
+
...
...
@@ -371,56 +370,74 @@ public class OrderPayBiz extends BaseBiz<OrderPayMapper, OrderPay> {
}
//解冻预授权
public
void
fundAuthOrderUnFreeze
(
AlipayClient
alipayClient
)
throws
AlipayApiException
{
public
String
fundAuthOrderUnFreeze
(
OrderPayVo
orderPayVo
,
String
notifyUrl
)
throws
AlipayApiException
{
AlipayClient
alipayClient
=
getAlipayClient
();
BigDecimal
realAmount
=
new
BigDecimal
(
orderPayVo
.
getAmount
().
toString
()).
divide
(
new
BigDecimal
(
"100"
),
2
,
BigDecimal
.
ROUND_UP
);
AlipayFundAuthOrderUnfreezeRequest
request
=
new
AlipayFundAuthOrderUnfreezeRequest
();
AlipayFundAuthOrderUnfreezeModel
model
=
new
AlipayFundAuthOrderUnfreezeModel
();
model
.
setAuthNo
(
"2017120410002001390208978986"
);
// 支付宝资金授权订单号,在授权冻结成功时返回需要入库保存
model
.
setOutRequestNo
(
"UnfreezeRequestNo000003"
);
//同一商户每次不同的资金操作请求,商户请求流水号不能重复,且与冻结流水号不同
model
.
setAmount
(
"0.01"
);
// 本次操作解冻的金额,单位为:元(人民币),精确到小数点后两位
model
.
setAuthNo
(
orderPayVo
.
getTradeNo
()
);
// 支付宝资金授权订单号,在授权冻结成功时返回需要入库保存
model
.
setOutRequestNo
(
orderPayVo
.
getOrderNo
()
);
//同一商户每次不同的资金操作请求,商户请求流水号不能重复,且与冻结流水号不同
model
.
setAmount
(
realAmount
.
toString
()
);
// 本次操作解冻的金额,单位为:元(人民币),精确到小数点后两位
model
.
setRemark
(
"预授权解冻"
);
// 商户对本次解冻操作的附言描述,长度不超过100个字母或50个汉字
//选填字段,信用授权订单,针对信用全免订单,传入该值完结信用订单,形成芝麻履约记录
// model.setExtraParam("{\"unfreezeBizInfo\":\"{\\\"bizComplete\\\":\\\"true\\\"}\"}");
request
.
setBizModel
(
model
);
request
.
setNotifyUrl
(
""
);
//异步通知地址,必填,该接口只通过该参数进行异步通知
request
.
setNotifyUrl
(
notifyUrl
);
//异步通知地址,必填,该接口只通过该参数进行异步通知
AlipayFundAuthOrderUnfreezeResponse
response
=
alipayClient
.
execute
(
request
);
log
.
info
(
"response: {}"
+
response
.
getBody
());
if
(
response
.
isSuccess
())
{
log
.
info
(
"调用成功"
);
log
.
info
(
"response: {}"
+
response
.
getBody
());
//签名后的参数,直接入参到
return
response
.
getBody
();
}
else
{
log
.
info
(
"调用失败"
);
return
null
;
}
}
//取消预授权
public
void
fundAuthCancel
(
)
throws
AlipayApiException
{
AlipayClient
alipayClient
=
new
DefaultAlipayClient
(
"https://openapi.alipay.com/gateway.do"
,
"app_id"
,
"your private_key"
,
"json"
,
"GBK"
,
"alipay_public_key"
,
"RSA2"
);
public
String
fundAuthCancel
(
OrderPayVo
orderPayVo
,
String
notifyUrl
)
throws
AlipayApiException
{
AlipayClient
alipayClient
=
getAlipayClient
(
);
AlipayFundAuthOperationCancelRequest
request
=
new
AlipayFundAuthOperationCancelRequest
();
AlipayFundAuthOperationCancelModel
model
=
new
AlipayFundAuthOperationCancelModel
();
//model.setAuthNo("2017120110002001390206804295"); // 支付宝资金授权订单号,在授权冻结成功时返回参数中获得
model
.
setOutOrderNo
(
"orderFreeze000005"
);
//商户的授权资金订单号,与支付宝的授权资金订单号不能同时为空
model
.
setOutOrderNo
(
orderPayVo
.
getOrderNo
()
);
//商户的授权资金订单号,与支付宝的授权资金订单号不能同时为空
//model.setOperationId("20171201317348823902"); //支付宝的授权资金操作流水号
model
.
setOutRequestNo
(
"requestNo000005"
);
//与支付宝的授权资金操作流水号不能同时为空,与冻结流水号相同
model
.
setOutRequestNo
(
orderPayVo
.
getTradeNo
()
);
//与支付宝的授权资金操作流水号不能同时为空,与冻结流水号相同
model
.
setRemark
(
"预授权撤销"
);
// 商户对本次撤销操作的附言描述,长度不超过100个字母或50个汉字
request
.
setBizModel
(
model
);
request
.
setNotifyUrl
(
""
);
//异步通知地址,必填,该接口只通过该参数进行异步通知
request
.
setNotifyUrl
(
notifyUrl
);
//异步通知地址,必填,该接口只通过该参数进行异步通知
AlipayFundAuthOperationCancelResponse
response
=
alipayClient
.
execute
(
request
);
log
.
info
(
"response: {}"
+
response
.
getBody
());
if
(
response
.
isSuccess
())
{
log
.
info
(
"调用成功"
);
log
.
info
(
"response: {}"
+
response
.
getBody
());
//签名后的参数,直接入参到
return
response
.
getBody
();
}
else
{
log
.
info
(
"调用失败"
);
return
null
;
}
}
//预授权转支付
public
void
tradePay
()
throws
AlipayApiException
{
AlipayClient
alipayClient
=
new
DefaultAlipayClient
(
"https://openapi.alipay.com/gateway.do"
,
"app_id"
,
"your private_key"
,
"json"
,
"utf-8"
,
"alipay_public_key"
,
"RSA2"
);
public
void
tradePay
(
OrderPayVo
orderPayVo
,
String
notifyUrl
)
throws
AlipayApiException
{
AlipayClient
alipayClient
=
getAlipayClient
();
BigDecimal
realAmount
=
new
BigDecimal
(
orderPayVo
.
getAmount
().
toString
()).
divide
(
new
BigDecimal
(
"100"
),
2
,
BigDecimal
.
ROUND_UP
);
AlipayTradePayRequest
request
=
new
AlipayTradePayRequest
();
AlipayTradePayModel
model
=
new
AlipayTradePayModel
();
model
.
setOutTradeNo
(
"20180412100020088982"
);
// 预授权转支付商户订单号,为新的商户交易流水号;如果重试发起扣款,商户订单号不要变;
model
.
setOutTradeNo
(
orderPayVo
.
getOrderNo
()
);
// 预授权转支付商户订单号,为新的商户交易流水号;如果重试发起扣款,商户订单号不要变;
model
.
setProductCode
(
"PRE_AUTH_ONLINE"
);
// 固定值PRE_AUTH_ONLINE
model
.
setAuthNo
(
"2018041210002001660228733635"
);
// 填写预授权冻结交易号
model
.
setSubject
(
"预授权转支付测试"
);
// 解冻转支付标题,用于展示在支付宝账单中
model
.
setTotalAmount
(
"0.01"
);
// 结算支付金额
model
.
setAuthNo
(
orderPayVo
.
getTradeNo
()
);
// 填写预授权冻结交易号
model
.
setSubject
(
orderPayVo
.
getSubject
()
);
// 解冻转支付标题,用于展示在支付宝账单中
model
.
setTotalAmount
(
realAmount
.
toString
()
);
// 结算支付金额
model
.
setSellerId
(
SystemConfig
.
ALIPAY_PID
);
// 填写卖家支付宝账户pid
model
.
setBuyerId
(
SystemConfig
.
ALIPAY_APPID
);
// 填写预授权用户uid,通过预授权冻结接口返回的payer_user_id字段获取
model
.
setStoreId
(
"test_store_id"
);
// 填写实际交易发生的终端编号,与预授权的outStoreCode保持一致即可
model
.
setBody
(
"预授权解冻转支付测试"
);
// 可填写备注信息
model
.
setBody
(
orderPayVo
.
getBody
());
// 可填写备注信息
//如果需要从一笔授权中完成多笔订单支付,保持auth_no不变,不同订单根据outTradeNo进行标识,此时auth_confirm_mode不传或者传入NOT_COMPLETE;进行到最后一笔转支付时,auth_confirm_mode传入COMPLETE由支付宝完成剩余金额自动解冻,或者商户自行调用解冻接口将剩余金额解冻。
model
.
setAuthConfirmMode
(
"NOT_COMPLETE"
);
//传入该值用户剩余金额不会自动解冻
request
.
setBizModel
(
model
);
request
.
setNotifyUrl
(
""
);
//异步通知地址,必填,该接口只通过该参数进行异步通知
request
.
setNotifyUrl
(
notifyUrl
);
//异步通知地址,必填,该接口只通过该参数进行异步通知
AlipayTradePayResponse
response
=
alipayClient
.
execute
(
request
);
if
(
response
.
isSuccess
())
{
...
...
@@ -432,17 +449,24 @@ public class OrderPayBiz extends BaseBiz<OrderPayMapper, OrderPay> {
}
//退款
public
void
testTradeRefund
()
throws
Exception
{
AlipayClient
alipayClient
=
new
DefaultAlipayClient
(
"https://openapi.alipay.com/gateway.do"
,
"app_id"
,
"your private_key"
,
"json"
,
"GBK"
,
"alipay_public_key"
,
"RSA2"
);
AlipayTradeRefundModel
model
=
new
AlipayTradeRefundModel
();
model
.
setOutTradeNo
(
"tradePay000002"
);
//与预授权转支付商户订单号相同,代表对该笔交易退款
model
.
setRefundAmount
(
"0.01"
);
model
.
setRefundReason
(
"预授权退款测试"
);
model
.
setOutRequestNo
(
"refund0000001"
);
//标识一次退款请求,同一笔交易多次退款需要保证唯一,如部分退款则此参数必传。
public
void
testTradeRefund
(
OrderPayVo
orderPayVo
,
String
notifyUrl
)
throws
Exception
{
AlipayClient
alipayClient
=
getAlipayClient
();
AlipayTradeRefundRequest
request
=
new
AlipayTradeRefundRequest
();
BigDecimal
realAmount
=
new
BigDecimal
(
orderPayVo
.
getAmount
().
toString
()).
divide
(
new
BigDecimal
(
"100"
),
2
,
BigDecimal
.
ROUND_UP
);
AlipayTradeRefundModel
model
=
new
AlipayTradeRefundModel
();
model
.
setOutTradeNo
(
orderPayVo
.
getTradeNo
());
//与预授权转支付商户订单号相同,代表对该笔交易退款
model
.
setRefundAmount
(
realAmount
.
toString
());
model
.
setRefundReason
(
orderPayVo
.
getBody
());
model
.
setOutRequestNo
(
orderPayVo
.
getOrderNo
());
//标识一次退款请求,同一笔交易多次退款需要保证唯一,如部分退款则此参数必传。
request
.
setBizModel
(
model
);
AlipayTradeRefundResponse
response
=
alipayClient
.
execute
(
request
);
log
.
info
(
"response: {}"
+
response
.
getBody
());
if
(
response
.
isSuccess
())
{
System
.
out
.
println
(
"调用成功"
);
log
.
info
(
"response: {}"
+
response
.
getBody
());
}
else
{
System
.
out
.
println
(
"调用失败"
);
}
}
/**
...
...
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