【原创】Java SDK支付宝退款

支付宝Java SDK是做的不错,但是坑也不少,支付流程网上资料多,做起来也很容易,但是到了退款就麻烦了,网上资料一下就少了不少,遇到问题就非常麻烦了,奈何坑还不少。

 

主要有两个坑:

1、AlipayClient调用的方法和支付的方法不一样,支付使用sdkExecute,而退款和查询订单状态使用execute方法!!最大的坑在于使用sdkExecute非但不报错,AlipayResponse中的isSuccess()方法返回的还是true,连response.getData()还有值,我还以为成功了,一直没怀疑是方法调用错误的问题。

 

2、退款回调接口不是能够自定义的!!设置request中设置notifyUrl无效!!它用的是支付接口的回调,奈何我支付接口回调根本没有判断退款也会走这个回调,然后就被狠狠得坑了一把。判断条件是request.getParameterMap中refund_fee是否为null,如果为null,说明是支付的回调,如果不是null,说明是退款的回调。注意了,回调接口必须公网能够访问才行!!

解决了以上这两个坑,那么退款问题基本就解决了。

 

然后就是代码环节了:

请求退款接口:

        AlipayClient alipayClient = new DefaultAlipayClient(GatewayUrl, AppId, PrivateKey, Format, Charset, PublicKey, SignType);
        AlipayTradeRefundRequest alipayTradeRefundRequest = new AlipayTradeRefundRequest();
        AlipayTradeRefundModel alipayTradeRefundModel = new AlipayTradeRefundModel();
        alipayTradeRefundModel.setOutTradeNo(trade.getOutTradeNo());
        alipayTradeRefundModel.setRefundAmount(trade.getTotalAmount());
        alipayTradeRefundModel.setRefundReason(trade.getBody());
        alipayTradeRefundRequest.setBizModel(alipayTradeRefundModel);

        try {
            AlipayTradeRefundResponse response = alipayClient.execute(alipayTradeRefundRequest);
            return response;
        } catch (AlipayApiException e) {
            e.printStackTrace();
            return null;
        }

其中的值默认为:

GatewayUrl:https://openapi.alipay.com/gateway.do

Format:JSON

Charset:utf-8

SignType:RSA2

 

回调接口:

    @ApiIgnore
    @RequestMapping("/notify")
    @AnonymousAccess
    @ApiOperation("支付异步通知(要公网访问),接收异步通知")
    public String notify(HttpServletRequest request) {
        Map<String, String[]> parameterMap = request.getParameterMap();
        String refundFee = request.getParameter("refund_fee");
        if (refundFee != null) {
            // 退款回调流程
        }else{
            // 支付回调流程
        }

    }

 

还有一个坑,蚂蚁技术支持的在线聊天内容第二天重新登录打开后就没有了,害得我好多当时的聊天资料都没有了,本来都能放文章里给大家参考的,现在都拿不出来了,问了客服,他们也说不行,那就没办法咯~~

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值