Skip to content

Commit a222dd0

Browse files
committed
统一收单交易结算接口
1 parent eeb6c4f commit a222dd0

File tree

3 files changed

+183
-0
lines changed

3 files changed

+183
-0
lines changed

pay-java-ali/src/main/java/com/egzosn/pay/ali/api/AliPayService.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import com.alibaba.fastjson.JSON;
44
import com.alibaba.fastjson.JSONObject;
55
import com.egzosn.pay.ali.bean.AliTransactionType;
6+
import com.egzosn.pay.ali.bean.OrderSettle;
67
import com.egzosn.pay.common.api.BasePayService;
78
import com.egzosn.pay.common.bean.*;
89
import com.egzosn.pay.common.bean.result.PayException;
@@ -329,6 +330,21 @@ public Map<String, Object> microPay(PayOrder order) {
329330
return result;
330331
}
331332

333+
334+
/**
335+
* 统一收单交易结算接口
336+
* @param order 交易结算信息
337+
* @return 结算结果
338+
*/
339+
public Map<String, Object> settle(OrderSettle order){
340+
//获取公共参数
341+
Map<String, Object> parameters = getPublicParameters(AliTransactionType.SETTLE);
342+
parameters.put(BIZ_CONTENT, JSON.toJSONString(order.toBizContent()));
343+
//设置签名
344+
setSign(parameters);
345+
return getHttpRequestTemplate().postForObject(getReqUrl() + "?" + UriVariables.getMapToParameters(parameters), null, JSONObject.class);
346+
}
347+
332348
/**
333349
* 交易查询接口
334350
*

pay-java-ali/src/main/java/com/egzosn/pay/ali/bean/AliTransactionType.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,10 @@ public enum AliTransactionType implements TransactionType {
5151
WAVE_CODE("alipay.trade.pay"),
5252
//交易辅助接口
5353

54+
/**
55+
* 统一收单交易结算接口
56+
*/
57+
SETTLE("alipay.trade.order.settle"),
5458
/**
5559
* 交易订单查询
5660
*/
Lines changed: 163 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,163 @@
1+
package com.egzosn.pay.ali.bean;
2+
3+
import com.egzosn.pay.common.util.Util;
4+
import com.egzosn.pay.common.util.str.StringUtils;
5+
6+
import java.math.BigDecimal;
7+
import java.util.HashMap;
8+
import java.util.Map;
9+
import java.util.TreeMap;
10+
11+
/**
12+
* @author egan
13+
14+
* date 2019/4/28.20:29
15+
*/
16+
public class OrderSettle {
17+
18+
/**
19+
* 结算请求流水号 开发者自行生成并保证唯一性
20+
*/
21+
private String outRequestNo;
22+
/**
23+
* 支付宝订单号
24+
*/
25+
private String tradeNo;
26+
/**
27+
* 分账支出方账户,类型为userId,本参数为要分账的支付宝账号对应的支付宝唯一用户号。以2088开头的纯16位数字。
28+
*/
29+
private String transOut;
30+
31+
/**
32+
* 分账收入方账户,类型为userId,本参数为要分账的支付宝账号对应的支付宝唯一用户号。以2088开头的纯16位数字。
33+
*/
34+
private String transIn;
35+
36+
/**
37+
* 分账的金额,单位为元
38+
*/
39+
private BigDecimal amount;
40+
/**
41+
* 分账信息中分账百分比。取值范围为大于0,少于或等于100的整数。
42+
*/
43+
private Integer amountPercentage;
44+
45+
/**
46+
* 分账描述
47+
*/
48+
private String desc;
49+
50+
/**
51+
* 操作员id
52+
*/
53+
private String operatorId;
54+
55+
public String getOutRequestNo() {
56+
return outRequestNo;
57+
}
58+
59+
public void setOutRequestNo(String outRequestNo) {
60+
this.outRequestNo = outRequestNo;
61+
}
62+
63+
public String getTradeNo() {
64+
return tradeNo;
65+
}
66+
67+
public void setTradeNo(String tradeNo) {
68+
this.tradeNo = tradeNo;
69+
}
70+
71+
public String getTransOut() {
72+
return transOut;
73+
}
74+
75+
public void setTransOut(String transOut) {
76+
this.transOut = transOut;
77+
}
78+
79+
public String getTransIn() {
80+
return transIn;
81+
}
82+
83+
public void setTransIn(String transIn) {
84+
this.transIn = transIn;
85+
}
86+
87+
public BigDecimal getAmount() {
88+
return amount;
89+
}
90+
91+
public void setAmount(BigDecimal amount) {
92+
this.amount = amount;
93+
}
94+
95+
public Integer getAmountPercentage() {
96+
return amountPercentage;
97+
}
98+
99+
public void setAmountPercentage(Integer amountPercentage) {
100+
this.amountPercentage = amountPercentage;
101+
}
102+
103+
public String getDesc() {
104+
return desc;
105+
}
106+
107+
public void setDesc(String desc) {
108+
this.desc = desc;
109+
}
110+
111+
public String getOperatorId() {
112+
return operatorId;
113+
}
114+
115+
public void setOperatorId(String operatorId) {
116+
this.operatorId = operatorId;
117+
}
118+
119+
/**
120+
* 获取分账明细信息
121+
* @return 分账明细信息
122+
*/
123+
public Map<String, Object> toRoyaltyParameters(){
124+
Map<String, Object> royalty = new TreeMap<String, Object>();
125+
126+
if (StringUtils.isNotEmpty(transOut)){
127+
royalty.put("trans_out", transOut);
128+
}
129+
130+
if (StringUtils.isNotEmpty( transIn)){
131+
royalty.put("trans_in", transIn);
132+
}
133+
if (null != amount){
134+
royalty.put("amount", Util.conversionAmount(amount));
135+
}
136+
if (null != amountPercentage){
137+
royalty.put("amount_percentage", amountPercentage);
138+
}
139+
140+
if (StringUtils.isNotEmpty( desc)){
141+
royalty.put(" desc", desc);
142+
}
143+
return royalty;
144+
}
145+
146+
/**
147+
* 请求参数的集合,最大长度不限,除公共参数外所有请求参数都必须放在这个参数中传递,具体参照各产品快速接入文档
148+
* @return 请求参数的集合
149+
*/
150+
public Map<String, Object> toBizContent(){
151+
Map<String, Object> bizContent = new TreeMap<String, Object>();
152+
bizContent.put("out_request_no", outRequestNo);
153+
bizContent.put("trade_no", tradeNo);
154+
bizContent.put("royalty_parameters", toRoyaltyParameters());
155+
if (StringUtils.isNotEmpty(operatorId)){
156+
bizContent.put("operator_id", operatorId);
157+
}
158+
return bizContent;
159+
}
160+
161+
162+
163+
}

0 commit comments

Comments
 (0)