mirror of
https://gitee.com/egzosn/pay-java-parent.git
synced 2026-06-08 02:17:20 +08:00
退款结果集统一处理
This commit is contained in:
@@ -236,7 +236,7 @@
|
||||
RefundOrder order = new RefundOrder("支付宝单号", "我方系统单号", "退款金额", "订单总金额");
|
||||
//非必填, 根据业务需求而定,可用于多次退款
|
||||
order.setRefundNo("退款单号")
|
||||
Map result = service.refund(order);
|
||||
AliRefundResult result = service.refund(order);
|
||||
|
||||
```
|
||||
|
||||
|
||||
@@ -3,6 +3,7 @@ package com.egzosn.pay.ali.api;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.egzosn.pay.ali.bean.AliPayMessage;
|
||||
import com.egzosn.pay.ali.bean.AliRefundResult;
|
||||
import com.egzosn.pay.ali.bean.AliTransactionType;
|
||||
import com.egzosn.pay.ali.bean.AliTransferType;
|
||||
import com.egzosn.pay.ali.bean.OrderSettle;
|
||||
@@ -437,7 +438,7 @@ public class AliPayService extends BasePayService<AliPayConfigStorage> {
|
||||
* @return 返回支付方申请退款后的结果
|
||||
*/
|
||||
@Override
|
||||
public Map<String, Object> refund(RefundOrder refundOrder) {
|
||||
public AliRefundResult refund(RefundOrder refundOrder) {
|
||||
//获取公共参数
|
||||
Map<String, Object> parameters = getPublicParameters(AliTransactionType.REFUND);
|
||||
setAppAuthToken(parameters, refundOrder.getAttrs());
|
||||
@@ -451,7 +452,9 @@ public class AliPayService extends BasePayService<AliPayConfigStorage> {
|
||||
parameters.put(BIZ_CONTENT, JSON.toJSONString(bizContent));
|
||||
//设置签名
|
||||
setSign(parameters);
|
||||
return requestTemplate.getForObject(getReqUrl() + "?" + UriVariables.getMapToParameters(parameters), JSONObject.class);
|
||||
final AliRefundResult refundResult = AliRefundResult.create(requestTemplate.getForObject(getReqUrl() + "?" + UriVariables.getMapToParameters(parameters), JSONObject.class));
|
||||
refundResult.setOutRequestNo(refundOrder.getRefundNo());
|
||||
return refundResult;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,377 @@
|
||||
package com.egzosn.pay.ali.bean;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
import java.util.Map;
|
||||
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.alibaba.fastjson.annotation.JSONField;
|
||||
import com.egzosn.pay.common.bean.BaseRefundResult;
|
||||
import com.egzosn.pay.common.bean.CurType;
|
||||
import com.egzosn.pay.common.bean.DefaultCurType;
|
||||
import com.egzosn.pay.common.bean.RefundOrder;
|
||||
|
||||
/**
|
||||
* 支付宝退款结果返回
|
||||
*
|
||||
* @author Egan
|
||||
* <pre>
|
||||
* email egzosn@gmail.com
|
||||
* date 2020/8/16 17:53
|
||||
* </pre>
|
||||
*/
|
||||
public class AliRefundResult extends BaseRefundResult {
|
||||
|
||||
/**
|
||||
* 网关返回码,详见文档 40004
|
||||
*/
|
||||
private String code;
|
||||
/**
|
||||
* 网关返回码描述,详见文档 Business Failed
|
||||
*/
|
||||
private String msg;
|
||||
/**
|
||||
* 业务返回码,参见具体的API接口文档 ACQ.TRADE_HAS_SUCCESS
|
||||
*/
|
||||
@JSONField(name = "sub_code")
|
||||
private String subCode;
|
||||
|
||||
/**
|
||||
* 业务返回码描述,参见具体的API接口文档 交易已被支付
|
||||
*/
|
||||
@JSONField(name = "sub_msg")
|
||||
private String subMsg;
|
||||
/**
|
||||
* 签名,详见文档
|
||||
*/
|
||||
private String sign;
|
||||
/**
|
||||
* 支付宝交易号
|
||||
*/
|
||||
@JSONField(name = "trade_no")
|
||||
private String tradeNo;
|
||||
/**
|
||||
* 商户订单号 6823789339978248
|
||||
*/
|
||||
@JSONField(name = "out_trade_no")
|
||||
private String outTradeNo;
|
||||
/**
|
||||
* 标识一次退款请求,同一笔交易多次退款需要保证唯一
|
||||
* <p>
|
||||
* 因支付宝退款结果中没有返回此参数,该参数从{@link RefundOrder#getRefundNo()}获取
|
||||
*/
|
||||
private String outRequestNo;
|
||||
/**
|
||||
* 用户的登录id 159****5620
|
||||
*/
|
||||
@JSONField(name = "buyer_logon_id")
|
||||
private String buyerLogonId;
|
||||
/**
|
||||
* 本次退款是否发生了资金变化 Y
|
||||
*/
|
||||
@JSONField(name = "fund_change")
|
||||
private String fundChange;
|
||||
/**
|
||||
* 退款总金额 88.88
|
||||
*/
|
||||
@JSONField(name = "refund_fee")
|
||||
private BigDecimal refundFee;
|
||||
/**
|
||||
* 退款币种信息 USD
|
||||
*/
|
||||
@JSONField(name = "refund_currency")
|
||||
private DefaultCurType refundCurrency;
|
||||
/**
|
||||
* 退款支付时间 2014-11-27 15:45:57
|
||||
*/
|
||||
@JSONField(name = "gmt_refund_pay")
|
||||
private Date gmtRefundPay;
|
||||
|
||||
/**
|
||||
* 退款使用的资金渠道。
|
||||
* 只有在签约中指定需要返回资金明细,或者入参的query_options中指定时才返回该字段信息。
|
||||
*/
|
||||
@JSONField(name = "refund_detail_item_list")
|
||||
private TradeFundBill refundDetailItemList;
|
||||
/**
|
||||
* 交易在支付时候的门店名称
|
||||
*/
|
||||
@JSONField(name = "store_name")
|
||||
private String storeName;
|
||||
/**
|
||||
* 买家在支付宝的用户id 2088101117955611
|
||||
*/
|
||||
@JSONField(name = "buyer_user_id")
|
||||
private String buyerUserId;
|
||||
/**
|
||||
* 退回的前置资产列表
|
||||
*/
|
||||
@JSONField(name = "refund_preset_paytool_list")
|
||||
private PresetPayToolInfo refundPresetPaytoolList;
|
||||
/**
|
||||
* 退款清算编号,用于清算对账使用;
|
||||
* 只在银行间联交易场景下返回该信息; 2018101610032004620239146945
|
||||
*/
|
||||
@JSONField(name = "refund_settlement_id")
|
||||
private String refundSettlementId;
|
||||
/**
|
||||
* 本次退款金额中买家退款金额 88.88
|
||||
*/
|
||||
@JSONField(name = "present_refund_buyer_amount")
|
||||
private String presentRefundBuyerAmount;
|
||||
/**
|
||||
* 本次退款金额中平台优惠退款金额 88.88
|
||||
*/
|
||||
@JSONField(name = "present_refund_discount_amount")
|
||||
private String presentRefundDiscountAmount;
|
||||
/**
|
||||
* 本次退款金额中商家优惠退款金额 88.88
|
||||
*/
|
||||
@JSONField(name = "present_refund_mdiscount_amount")
|
||||
private String presentRefundMdiscountAmount;
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 获取退款请求结果状态码
|
||||
*
|
||||
* @return 状态码
|
||||
*/
|
||||
@Override
|
||||
public String getCode() {
|
||||
return code;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取退款请求结果状态提示信息
|
||||
*
|
||||
* @return 提示信息
|
||||
*/
|
||||
@Override
|
||||
public String getMsg() {
|
||||
return msg;
|
||||
}
|
||||
|
||||
/**
|
||||
* 返回业务结果状态码
|
||||
*
|
||||
* @return 业务结果状态码
|
||||
*/
|
||||
@Override
|
||||
public String getResultCode() {
|
||||
return subCode;
|
||||
}
|
||||
|
||||
/**
|
||||
* 返回业务结果状态提示信息
|
||||
*
|
||||
* @return 业务结果状态提示信息
|
||||
*/
|
||||
@Override
|
||||
public String getResultMsg() {
|
||||
return subMsg;
|
||||
}
|
||||
|
||||
/**
|
||||
* 退款金额
|
||||
*
|
||||
* @return 退款金额
|
||||
*/
|
||||
@Override
|
||||
public BigDecimal getRefundFee() {
|
||||
return refundFee;
|
||||
}
|
||||
|
||||
/**
|
||||
* 退款币种信息
|
||||
*
|
||||
* @return 币种信息
|
||||
*/
|
||||
@Override
|
||||
public CurType getRefundCurrency() {
|
||||
return refundCurrency;
|
||||
}
|
||||
|
||||
/**
|
||||
* 支付平台交易号
|
||||
* 发起支付时 支付平台(如支付宝)返回的交易订单号
|
||||
*
|
||||
* @return 支付平台交易号
|
||||
*/
|
||||
@Override
|
||||
public String getTradeNo() {
|
||||
return tradeNo;
|
||||
}
|
||||
|
||||
/**
|
||||
* 支付订单号
|
||||
* 发起支付时,用户系统的订单号
|
||||
*
|
||||
* @return 支付订单号
|
||||
*/
|
||||
@Override
|
||||
public String getOutTradeNo() {
|
||||
return outTradeNo;
|
||||
}
|
||||
|
||||
/**
|
||||
* 商户退款单号
|
||||
*
|
||||
* @return 商户退款单号
|
||||
*/
|
||||
@Override
|
||||
public String getRefundNo() {
|
||||
return outRequestNo;
|
||||
}
|
||||
|
||||
|
||||
|
||||
public void setCode(String code) {
|
||||
this.code = code;
|
||||
}
|
||||
|
||||
public void setMsg(String msg) {
|
||||
this.msg = msg;
|
||||
}
|
||||
|
||||
public String getSubCode() {
|
||||
return subCode;
|
||||
}
|
||||
|
||||
public void setSubCode(String subCode) {
|
||||
this.subCode = subCode;
|
||||
}
|
||||
|
||||
public String getSubMsg() {
|
||||
return subMsg;
|
||||
}
|
||||
|
||||
public void setSubMsg(String subMsg) {
|
||||
this.subMsg = subMsg;
|
||||
}
|
||||
|
||||
public String getSign() {
|
||||
return sign;
|
||||
}
|
||||
|
||||
public void setSign(String sign) {
|
||||
this.sign = sign;
|
||||
}
|
||||
|
||||
public void setTradeNo(String tradeNo) {
|
||||
this.tradeNo = tradeNo;
|
||||
}
|
||||
|
||||
public void setOutTradeNo(String outTradeNo) {
|
||||
this.outTradeNo = outTradeNo;
|
||||
}
|
||||
|
||||
public String getOutRequestNo() {
|
||||
return outRequestNo;
|
||||
}
|
||||
|
||||
public void setOutRequestNo(String outRequestNo) {
|
||||
this.outRequestNo = outRequestNo;
|
||||
}
|
||||
|
||||
public String getBuyerLogonId() {
|
||||
return buyerLogonId;
|
||||
}
|
||||
|
||||
public void setBuyerLogonId(String buyerLogonId) {
|
||||
this.buyerLogonId = buyerLogonId;
|
||||
}
|
||||
|
||||
public String getFundChange() {
|
||||
return fundChange;
|
||||
}
|
||||
|
||||
public void setFundChange(String fundChange) {
|
||||
this.fundChange = fundChange;
|
||||
}
|
||||
|
||||
public void setRefundFee(BigDecimal refundFee) {
|
||||
this.refundFee = refundFee;
|
||||
}
|
||||
|
||||
public void setRefundCurrency(DefaultCurType refundCurrency) {
|
||||
this.refundCurrency = refundCurrency;
|
||||
}
|
||||
|
||||
public Date getGmtRefundPay() {
|
||||
return gmtRefundPay;
|
||||
}
|
||||
|
||||
public void setGmtRefundPay(Date gmtRefundPay) {
|
||||
this.gmtRefundPay = gmtRefundPay;
|
||||
}
|
||||
|
||||
public TradeFundBill getRefundDetailItemList() {
|
||||
return refundDetailItemList;
|
||||
}
|
||||
|
||||
public void setRefundDetailItemList(TradeFundBill refundDetailItemList) {
|
||||
this.refundDetailItemList = refundDetailItemList;
|
||||
}
|
||||
|
||||
public String getStoreName() {
|
||||
return storeName;
|
||||
}
|
||||
|
||||
public void setStoreName(String storeName) {
|
||||
this.storeName = storeName;
|
||||
}
|
||||
|
||||
public String getBuyerUserId() {
|
||||
return buyerUserId;
|
||||
}
|
||||
|
||||
public void setBuyerUserId(String buyerUserId) {
|
||||
this.buyerUserId = buyerUserId;
|
||||
}
|
||||
|
||||
public PresetPayToolInfo getRefundPresetPaytoolList() {
|
||||
return refundPresetPaytoolList;
|
||||
}
|
||||
|
||||
public void setRefundPresetPaytoolList(PresetPayToolInfo refundPresetPaytoolList) {
|
||||
this.refundPresetPaytoolList = refundPresetPaytoolList;
|
||||
}
|
||||
|
||||
public String getRefundSettlementId() {
|
||||
return refundSettlementId;
|
||||
}
|
||||
|
||||
public void setRefundSettlementId(String refundSettlementId) {
|
||||
this.refundSettlementId = refundSettlementId;
|
||||
}
|
||||
|
||||
public String getPresentRefundBuyerAmount() {
|
||||
return presentRefundBuyerAmount;
|
||||
}
|
||||
|
||||
public void setPresentRefundBuyerAmount(String presentRefundBuyerAmount) {
|
||||
this.presentRefundBuyerAmount = presentRefundBuyerAmount;
|
||||
}
|
||||
|
||||
public String getPresentRefundDiscountAmount() {
|
||||
return presentRefundDiscountAmount;
|
||||
}
|
||||
|
||||
public void setPresentRefundDiscountAmount(String presentRefundDiscountAmount) {
|
||||
this.presentRefundDiscountAmount = presentRefundDiscountAmount;
|
||||
}
|
||||
|
||||
public String getPresentRefundMdiscountAmount() {
|
||||
return presentRefundMdiscountAmount;
|
||||
}
|
||||
|
||||
public void setPresentRefundMdiscountAmount(String presentRefundMdiscountAmount) {
|
||||
this.presentRefundMdiscountAmount = presentRefundMdiscountAmount;
|
||||
}
|
||||
public static final AliRefundResult create(Map<String, Object> result){
|
||||
AliRefundResult refundResult = new JSONObject(result).toJavaObject(AliRefundResult.class);
|
||||
refundResult.setAttrs(result);
|
||||
return refundResult;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,44 @@
|
||||
package com.egzosn.pay.ali.bean;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
import com.alibaba.fastjson.annotation.JSONField;
|
||||
|
||||
/**
|
||||
* 退回的前置资产列表
|
||||
*
|
||||
* @author Egan
|
||||
* <pre>
|
||||
* email egzosn@gmail.com
|
||||
* date 2020/8/16 18:58
|
||||
* </pre>
|
||||
*/
|
||||
public class PresetPayToolInfo {
|
||||
|
||||
/**
|
||||
* 必填 32前置资产金额 12.21
|
||||
*/
|
||||
private BigDecimal[] amount;
|
||||
|
||||
/**
|
||||
* 前置资产类型编码,和收单支付传入的preset_pay_tool里面的类型编码保持一致。盒马礼品卡:HEMA;抓猫猫红包:T_CAT_COUPON
|
||||
*/
|
||||
@JSONField(name = "assert_type_code")
|
||||
private String assertTypeCode;
|
||||
|
||||
public BigDecimal[] getAmount() {
|
||||
return amount;
|
||||
}
|
||||
|
||||
public void setAmount(BigDecimal[] amount) {
|
||||
this.amount = amount;
|
||||
}
|
||||
|
||||
public String getAssertTypeCode() {
|
||||
return assertTypeCode;
|
||||
}
|
||||
|
||||
public void setAssertTypeCode(String assertTypeCode) {
|
||||
this.assertTypeCode = assertTypeCode;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,82 @@
|
||||
package com.egzosn.pay.ali.bean;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
import com.alibaba.fastjson.annotation.JSONField;
|
||||
|
||||
/**
|
||||
* 退款使用的资金渠道。
|
||||
* 只有在签约中指定需要返回资金明细,或者入参的query_options中指定时才返回该字段信息。
|
||||
* @author Egan
|
||||
* <pre>
|
||||
* email egzosn@gmail.com
|
||||
* date 2020/8/16 18:51
|
||||
* </pre>
|
||||
*/
|
||||
public class TradeFundBill {
|
||||
/**
|
||||
* 交易使用的资金渠道,详见 支付渠道列表 ALIPAYACCOUNT
|
||||
*/
|
||||
@JSONField(name = "fund_channel")
|
||||
private String fundChannel;
|
||||
/**
|
||||
* 银行卡支付时的银行代码 CEB
|
||||
*/
|
||||
@JSONField(name = "bank_code")
|
||||
private String bankCode;
|
||||
/**
|
||||
* 该支付工具类型所使用的金额 10
|
||||
*/
|
||||
private BigDecimal amount;
|
||||
|
||||
/**
|
||||
* 渠道实际付款金额 11.21
|
||||
*/
|
||||
@JSONField(name = "real_amount")
|
||||
private BigDecimal realAmount;
|
||||
/**
|
||||
* 渠道所使用的资金类型,目前只在资金渠道(fund_channel)是银行卡渠道(BANKCARD)的情况下才返回该信息(DEBIT_CARD:借记卡,CREDIT_CARD:信用卡,MIXED_CARD:借贷合一卡) DEBIT_CARD
|
||||
*/
|
||||
@JSONField(name = "fund_type")
|
||||
private String fundType;
|
||||
|
||||
public String getFundChannel() {
|
||||
return fundChannel;
|
||||
}
|
||||
|
||||
public void setFundChannel(String fundChannel) {
|
||||
this.fundChannel = fundChannel;
|
||||
}
|
||||
|
||||
public String getBankCode() {
|
||||
return bankCode;
|
||||
}
|
||||
|
||||
public void setBankCode(String bankCode) {
|
||||
this.bankCode = bankCode;
|
||||
}
|
||||
|
||||
public BigDecimal getAmount() {
|
||||
return amount;
|
||||
}
|
||||
|
||||
public void setAmount(BigDecimal amount) {
|
||||
this.amount = amount;
|
||||
}
|
||||
|
||||
public BigDecimal getRealAmount() {
|
||||
return realAmount;
|
||||
}
|
||||
|
||||
public void setRealAmount(BigDecimal realAmount) {
|
||||
this.realAmount = realAmount;
|
||||
}
|
||||
|
||||
public String getFundType() {
|
||||
return fundType;
|
||||
}
|
||||
|
||||
public void setFundType(String fundType) {
|
||||
this.fundType = fundType;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user