【校招VIP】微信支付—微信退款实战教程

08月28日 收藏 0 评论 0 java开发

【校招VIP】微信支付—微信退款实战教程

转载声明:原文链接:https://blog.csdn.net/weixin_45731661/article/details/127573299

微信支付业务场景
当交易发生之后一年内,由于买家或者卖家的原因需要退款时,卖家可以通过退款接口将支付金额退还给买家,微信支付将在收到退款请求并且验证成功之后,将支付款按原路退还至买家账号上。

一、注意事项
需要注意的事项有以下几点:
1、交易时间超过一年的订单无法提交退款
2、微信支付退款支持单笔交易分多次退款(不超50次),多次退款需要提交原支付订单的商户订单号和设置不同的退款单号。申请退款总金额不能超过订单金额。 一笔退款失败后重新提交,请不要更换退款单号,请使用原商户退款单号
3、错误或无效请求频率限制:6qps,即每秒钟异常或错误的退款申请请求不超过6次
4、每个支付订单的部分退款次数不能超过50次
5、如果同一个用户有多笔退款,建议分不同批次进行退款,避免并发退款导致退款失败
6、申请退款接口的返回仅代表业务的受理情况,具体退款是否成功,需要通过退款查询接口获取结果
7、一个月之前的订单申请退款频率限制为:5000/min
8、同一笔订单多次退款的请求需相隔1分钟

二、微信支付退款案例
以下案例仅供参考
1.微信退款案例
代码如下(示例):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
package com.cy.xgsm.controller;
 
import java.math.BigDecimal;
 
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import com.cy.xgsm.common.Result;
import com.github.binarywang.wxpay.bean.request.WxPayRefundV3Request;
import com.github.binarywang.wxpay.bean.result.WxPayRefundV3Result;
import com.github.binarywang.wxpay.service.WxPayService;
 
/**
 *
 * @author Dylan
 *
 */
@RestController
public class WxPayController {
     
    @Autowired
    @Qualifier("wxPayService")
    private WxPayService wxPayService;
     
    /**
     *  申请退款
     * @param orderNo 充值单号
     * @param amount 退款金额
     */
    @GetMapping("/refundV3/nativePay")
    @ResponseBody
    public Result<Integer> rebackPay(String orderNo,BigDecimal amount){
        Result<Integer> res = new Result<Integer>();
        //微信支付-申请退款请求参数
        WxPayRefundV3Request request = new WxPayRefundV3Request();
        WxPayRefundV3Request.Amount am = new WxPayRefundV3Request.Amount();
        am.setTotal(amount.multiply(new BigDecimal(100)).intValue());//原订单金额
        //退款币种,符合ISO 4217标准的三位字母代码,目前只支持人民币:CNY。
        am.setCurrency("CNY");
        //退款金额 注意:退款金额,单位为分,只能为整数,不能超过原订单支付金额。
        am.setRefund(amount.multiply(new BigDecimal(100)).intValue());
        //金额信息
        request.setAmount(am);
        //transaction_id:微信支付订单号
        request.setTransactionId(orderNo);
        //商户订单号
        request.setOutRefundNo("return_"+orderNo);
        WxPayRefundV3Result result;
        try {
            //调用微信V3退款API
            result = wxPayService.refundV3(request);       
            String status = result.getStatus();
            switch (status) {
            case "SUCCESS":
                res.success("退款成功");
                break;
            case "CLOSED":
                res.success("退款关闭");
                break;
            case "PROCESSING":
                res.success("退款处理中");
                break;
            case "ABNORMAL":
                res.success("退款异常");
                break;
     
            default:
                res.error("受理失败");
                break;
            }
            res.setAtt(result);
        } catch (Exception e) {
            res.error("申请退款失败,"+e.getMessage());
        }
        return res;
    }
 
}

三、微信支付官方说明
在操作之前不明白的可以先看看官方说明:微信退款官方地址

总结
例如:以上案例为博主实际应用的代码案例,如果不懂如何接入微信支付的,可以多看几遍官方文档即可,没有什么难度指数**,注意:在接入微信支付之前要先注册微信支付商户号,不管是APP,JSAPI 或 小程序,NATIVE,H5 都一样方法,

C 0条回复 评论

帖子还没人回复快来抢沙发