ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

微信支付踩坑记录 (java后端三:支付成功之后如何进行退款呢)

2021-09-12 15:06:39  阅读:320  来源: 互联网

标签:map code java 商户 微信 支付 退款 resBean


普通商户模式微信支付之APP支付发起微信退款:

前言:
在进行退款之前,我们应该要清楚退款需要做哪些准备工作?我们自己系统的退款流程是怎样的?就拿我自己做的项目中的微信退款为例子

先说一说发起退款需要做哪些准备工作:

1、首先要退款肯定是要有一笔订单是成功交易了的,并且已经存在了商户订单号,或者保存了微信那边生成的微信订单号,这个微信订单号在你使用微信支付之后也会在你的微信账单里面显示。

2、其次需要准备商户证书文件放入到java项目里面,在springboot项目里我是放在resources文件下面的,这个商户证书文件需要自己去微信商户平台登录自己的商户号进入下载,如:apiclient_cert.p12名称的一个文件,这个文件对于是否能够进行退款接口的调用十分重要。

3、准备好商户号,appid,商户密钥等必备参数,封装好签名工具等。

接着在说一说退款的流程是怎样的:

1、首先用户在客户端发起退款申请,商户系统进行退款申请记录,审核人员审核申请记录,审核通过则调用微信的申请退款接口。
2、调用申请退款接口响应成功之后,此处可以选择两种方式进行自己系统的业务处理:
3、业务处理方式: 第一种方式为:退款回调通知里面进行退款记录的数据状态处理。 第二种方式为:系统主动调用查询退款结果接口进行退款记录的数据状态处理。

看看微信支付文档里面怎么说的:

应用场景:

当交易发生之后的一段时间内,由于卖家或者买家的原因需要退款时,卖家可以通过退款接口将支付款退还给买家,微信支付将在收到退款请求并且验证成功之后,按照退款规则将支付款按照原路退还到买家账号上面。

调用微信退款注意事项;

1、交易时间超过一年的订单无法提交退款;

2、微信支付退款支持单笔交易分多次退款,多次退款需要提交原支付订单的商户订单号和设置不同的退款单号。申请退款总金额不能超过订单金额。
一笔退款失败后重新提交,请不要更换退款单号,请使用原商户退款单号。

3、请求频率限制:150qps,即每秒钟正常的申请退款请求次数不超过150次

4、每个支付订单的部分退款次数不能超过50次

5、如果同一个用户有多笔退款,建议分不同批次进行退款,避免并发退款导致退款失败

6、申请退款接口的返回仅代表业务的受理情况,具体退款是否成功,需要通过退款查询接口获取结果。

7、一个月之前的订单申请退款频率限制为:5000/min

好,废话不多说了,直接上代码

	// 申请微信退款
    public ResBean<Object> wxRefund(@RequestBody JSONObject reqJson){
        ResBean<Object> resBean = new ResBean<>();
        try {
            HashMap<String, String> map = new LinkedHashMap<>();
            map.put("appid", appId); // 应用appid
            map.put("mch_id", mchId); // 商户号
            map.put("nonce_str", Long.toString(System.currentTimeMillis() / 1000));  // 随机字符串
            map.put("out_trade_no", reqJson.getString("out_trade_no"));  //商户订单号
            map.put("out_refund_no", reqJson.getString("out_refund_no"));   // 商户退款单号
            map.put("total_fee", String.valueOf(reqJson.getLong("total_fee")));  // 订单总金额,单位分
            map.put("refund_fee", String.valueOf(reqJson.getLong("refund_fee")));  // 需要退款的金额,单位分
            map.put("refund_desc", reqJson.getString("refund_desc"));  // 退款描述
            map.put("refund_account", "REFUND_SOURCE_RECHARGE_FUNDS");// 规定退款方式,可用余额退款
            map.put("sign", PayUtils.getSign(map, mchSecret));   // 构造签名,构造签名的方法已经在微信支付踩坑记录一说明过了

            //获取证书路径
            String path = this.getClass().getClassLoader().getResource("apiclient_cert.p12").getPath();

            String s = HttpUtils.postSSL("https://api.mch.weixin.qq.com/secapi/pay/refund", PaymentKit.toXml(map), path, mchId);
            Map<String, String> result = PaymentKit.xmlToMap(s);

			// 获取响应数据
            String return_code = result.get("return_code");
            String result_code = result.get("result_code");
            String err_code = result.get("err_code");
            String err_code_des = result.get("err_code_des");
            String return_msg = result.get("return_msg");

            if (PaymentKit.codeIsOK(return_code)) {
                if (PaymentKit.codeIsOK(result_code)) {
                	// 做好数据封装响应给前端,或者其他后端接口调用
                    resBean.setRes_content("0000");
                    resBean.setRes_desc("退款申请接收成功");
                    resBean.setRes_content(result_code);
                } else {
                    resBean.setRes_code("9999");
                    resBean.setRes_desc(err_code_des);
                    resBean.setRes_content(err_code);
                }
            } else {
                resBean.setRes_code("9999");
                resBean.setRes_desc(return_msg);
                resBean.setRes_content(err_code);
            }
        } catch (Exception e) {
            log.error("申请退款异常", e);
        }
        return resBean;
    }

到此你会发现其实这些微信支付的相关接口调用方法大体都是一致的,后续继续更新微信支付其他相关接口!

标签:map,code,java,商户,微信,支付,退款,resBean
来源: https://blog.csdn.net/weixin_45753683/article/details/120249966

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有