支付宝APP退款功能开发

前期准备工作

1. 之前的支付宝APP支付的博客

  • 1.1 前期获取的参数
  • 1.2 配置及依赖
https://blog.csdn.net/liang1184750950/article/details/100205437

实战

1.1 请求参数及返回值

  • 1.1.1 请求参数
@Data
@AllArgsConstructor
@NoArgsConstructor
public class AliPayRefundCommand {
    //TODO 金额改为分
    private String refundFee;//退款金额,不得大于订单金额 单位 元
    private String outTradeNo;//商户订单号,订单支付记录里面获取payRecord
   
}
  • 1.1.2 返回值
@Setter
@Getter
@NoArgsConstructor
@AllArgsConstructor
public class AliPayTradeRefundResponseDto {
    private String buyerLogonId;//用户登录id
    private String buyerUserId;//买家在支付宝的用户id
    private String fundChange;//本次退款是否发生了资金变化 Y 变化
    private Date gmtRefundPay;//退款支付时间
    private String openId;
    private String outTradeNo;
    private List<TradeFundBillDto> TradeFundBillDtos;
    private String refundFee;
    private String sendBackFee;
    private String storeName;
    private String tradeNo;
}

1.2 代码

    public AliPayTradeRefundResponseDto refund(AliPayRefundCommand command) {
        AlipayTradeRefundRequest refundRequest = AliPayRequestBuilder.generateAliPayRefundRequest(command);
        AlipayTradeRefundResponse refundResponse = null;
        try {
            refundResponse = alipayClient.execute(refundRequest);
        } catch (AlipayApiException e) {
            e.printStackTrace();
        }
        return new AliPayTradeRefundResponseDto(refundResponse);
    }


    public static AlipayTradeRefundRequest generateAliPayRefundRequest(AliPayRefundCommand command) {
        AlipayTradeRefundRequest refundRequest = new AlipayTradeRefundRequest();
        AlipayTradeRefundModel model = new AlipayTradeRefundModel();
        model.setRefundAmount(command.getRefundFee());
        model.setOutTradeNo(command.getOutTradeNo());
        model.setRefundReason("退款");
        refundRequest.setBizModel(model);
        return refundRequest;
    }

    public AliPayTradeRefundResponseDto(AlipayTradeRefundResponse refundResponse) {
        this.setBuyerLogonId(refundResponse.getBuyerLogonId());
        this.setBuyerUserId(refundResponse.getBuyerUserId());
        this.setFundChange(refundResponse.getFundChange());
        this.setGmtRefundPay(refundResponse.getGmtRefundPay());
        this.setOpenId(refundResponse.getOpenId());
        this.setOutTradeNo(refundResponse.getOutTradeNo());
        this.setRefundFee(refundResponse.getRefundFee());
        this.setSendBackFee(refundResponse.getSendBackFee());
        this.setStoreName(refundResponse.getStoreName());
        this.setTradeNo(refundResponse.getTradeNo());
        this.setTradeFundBillDtos(refundResponse.getRefundDetailItemList() == null ? null :TradeFundBillDto.build(refundResponse));
    }

总结

支付宝退款功能开发相对简单明了(支付宝一贯风格),构造退款请求参数AlipayTradeRefundRequest时,注意公共参数直接在AlipayTradeRefundRequest里面set,其他的参数封装在AlipayTradeRefundModel里面,这和支付宝APP支付一样。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值