浅析微信支付:申请退款、退款回调接口、查询退款 (2)

下面为具体的实际sdkwxPay.refund调用代码:

/** * 作用:申请退款<br> * 场景:当交易发生之后一段时间内,由于买家或者卖家的原因需要退款时,卖家可以通过退款接口将支付款退还给买家, * 微信支付将在收到退款请求并且验证成功之后,按照退款规则将支付款按原路退到买家帐号上。 * 接口文档地址:https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=9_4 * * @param notify_url 回调地址 * @param transaction_id 微信生成的订单号,在支付通知中有返回 * @param out_trade_no 商户系统内部订单号,要求32个字符内,只能是数字、大小写字母_-|*@ ,且在同一个商户号下唯一。 * @param out_refund_no 商户系统内部的退款单号,商户系统内部唯一,只能是数字、大小写字母_-|*@ ,同一退款单号多次请求只退一笔。 * @param total_fee 订单总金额,传入参数单位为:元 * @param refund_fee 退款总金额,订单总金额,传入参数单位为:元 * @param refund_desc 退款原因,若商户传入,会在下发给用户的退款消息中体现退款原因 * @return API返回数据 * @throws Exception e */ public Map<String, String> refund(String notify_url, String transaction_id, String out_trade_no, String out_refund_no, String total_fee, String refund_fee, String refund_desc) throws Exception { /** 构造请求参数数据 **/ Map<String, String> data = new HashMap<>(); // 变量名 字段名 必填 类型 示例值 描述 // 微信订单号 二选一 String(32) 1.21775E+27 微信生成的订单号,在支付通知中有返回 if (transaction_id != null) { data.put("transaction_id", transaction_id); } // 商户订单号 String(32) 1.21775E+27 商户系统内部订单号,要求32个字符内,只能是数字、大小写字母_-|*@ ,且在同一个商户号下唯一。 data.put("out_trade_no", out_trade_no); // 商户退款单号 是 String(64) 1.21775E+27 商户系统内部的退款单号,商户系统内部唯一,只能是数字、大小写字母_-|*@ ,同一退款单号多次请求只退一笔。 data.put("out_refund_no", out_refund_no); // 订单金额 是 Int 100 订单总金额,单位为分,只能为整数,详见支付金额 data.put("total_fee", String.valueOf(new BigDecimal(total_fee).multiply(new BigDecimal(100)).setScale(2, BigDecimal.ROUND_HALF_UP).intValue())); // 退款金额 是 Int 100 退款总金额,订单总金额,单位为分,只能为整数,详见支付金额 // 默认单位为分,系统是元,所以需要*100 data.put("refund_fee", String.valueOf(new BigDecimal(refund_fee).multiply(new BigDecimal(100)).setScale(2, BigDecimal.ROUND_HALF_UP).intValue())); // 退款原因 否 String(80) 商品已售完 若商户传入,会在下发给用户的退款消息中体现退款原因 data.put("refund_desc", refund_desc); // 货币种类 否 String(8) CNY 货币类型,符合ISO 4217标准的三位字母代码,默认人民币:CNY,其他值列表详见货币类型 data.put("refund_fee_type", WXPayConstants.FEE_TYPE_CNY); // 退款结果通知url 否 String(256) https://weixin.qq.com/notify/ 异步接收微信支付退款结果通知的回调地址,通知URL必须为外网可访问的url,不允许带参数,如果参数中传了notify_url,则商户平台上配置的回调地址将不会生效。 data.put("notify_url", notify_url); /** 以下参数为非必填参数 **/ // 退款资金来源 否 String(30) REFUND_SOURCE_RECHARGE_FUNDS 仅针对老资金流商户使用;REFUND_SOURCE_UNSETTLED_FUNDS---未结算资金退款(默认使用未结算资金退款);REFUND_SOURCE_RECHARGE_FUNDS---可用余额退款 // data.put("refund_account", null); /** 以下五个参数,在 this.fillRequestData 方法中会自动赋值 **/ /*// 小程序ID appid 是 String(32) wxd678efh567hg6787 微信分配的小程序ID data.put("appid", WXPayConstants.APP_ID); // 商户号 mch_id 是 String(32) 1230000109 微信支付分配的商户号 data.put("mch_id", WXPayConstants.MCH_ID); // 随机字符串 nonce_str 是 String(32) 5K8264ILTKCH16CQ2502SI8ZNMTM67VS 随机字符串,长度要求在32位以内。推荐随机数生成算法 data.put("nonce_str", nonce_str); // 签名类型 sign_type 否 String(32) MD5 签名类型,默认为MD5,支持HMAC-SHA256和MD5。 data.put("sign_type", WXPayConstants.MD5); // 签名 sign 是 String(32) C380BEC2BFD727A4B6845133519F3AD6 通过签名算法计算得出的签名值,详见签名生成算法 data.put("sign", sign);*/ // 微信退款接口 Map<String, String> resultMap = this.refund(data); WXPayUtil.getLogger().info("wxPay.refund:" + resultMap); return resultMap; }

以上已经详细说明的具体的字段含义,有不明白的同学可以查看微信的官方文档,具体的源码可以查看作者的github。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wsxyzf.html