微信退款

退款前提

有支付交易发生,且交易时间不超过一年,申请退款总金额不能超过订单金额,同一订单请求退款次数不超过50次。

1. 退款证书

申请退款需要微信双向证书,下载路径:微信商户平台(pay.weixin.qq.com)-->账户中心-->账户设置-->API安全-->证书下载,在Java环境下使用pkcs12格式证书即可。调用证书时需要密码,该密码即微信商户号(mch_id)。

2. 组装参数

必需参数为:

字段名 变量名 类型 描述
公众账号ID appid String(32) 微信分配的公众账号ID(企业号corpid即为此appId)
商户号 mch_id String(32) 微信支付分配的商户号
随机字符串 nonce_str String(32) 随机字符串,不长于32位
签名 sign String(32) 签名
微信订单号(与商户订单号二选一) transaction_id String(32) 微信生成的订单号,在支付通知中有返回
商户订单号(与微信订单号二选一) out_trade_no String(32) 商户系统内部订单号,且在同一个商户号下唯一。
商户退款单号 out_refund_no String(64) 商户系统内部的退款单号,商户系统内部唯一
订单金额 total_fee Int 订单总金额,单位为分,只能为整数
退款金额 refund_fee Int 退款总金额,订单总金额,单位为分,只能为整数
退款结果通知url notify_url String(256) 异步接收微信支付退款结果通知的回调地址,通知URL必须为外网可访问的url,不允许带参数,如果参数中传了notify_url,则商户平台上配置的回调地址将不会生效。

例如:

<xml>  
    <appid>wx2421b1c4370ec43b</appid>
    <mch_id>10000100</mch_id>
    <nonce_str>6cefdb308e1e2e8aabd48cf79e546a02</nonce_str>
    <out_refund_no>1415701182</out_refund_no>
    <out_trade_no>1415757673</out_trade_no>
    <refund_fee>1</refund_fee>
    <total_fee>1</total_fee>
    <transaction_id></transaction_id>
    <sign>FE56DD4AA85C0EECA82C35595A69E153</sign>
</xml>

3.申请退款

请求URL:https://api.mch.weixin.qq.com/secapi/pay/refund,携带第二步组装参数

4.退款回调

回调地址为申请退款时的notify_url参数地址,商户申请退款后,微信进行处理并返回结果后,需要对返回结果进行处理,并返回应答,若无应答,微信会重新发起通知。

退款返回信息:

字段名 变量名 类型 描述
返回状态码 return_code String(16) SUCCESS/FAIL 此字段是通信标识,非结果标识
返回信息 return_msg String(128) 返回信息,如非空,为错误原因 参数格式校验错误
公众账号ID appid String(32) 微信分配的公众账号ID
退款的商户号 mch_id String(32) 微信支付分配的商户号
随机字符串 nonce_str String(32) 随机字符串,不长于32位
加密信息 req_info String(1024) 加密信息请用商户秘钥进行解密

成功返回后对加密信息进行解析:

解密步骤如下:
1)对加密串A做base64解码,得到加密串B
2)对商户key做md5,得到32位小写key ( key设置路径:微信商户平台(pay.weixin.qq.com)-->账户设置-->API安全-->密钥设置 )
3)用key
对加密串B做AES-256-ECB解密(PKCS7Padding)
注:jdk7中无java.util.Base64工具,且jdk发布的运行环境包中对加解密有一定限制,默认不允许256位密钥的AES加解密,需要在官网下载对应版本的JCE无限制权限策略文件,将local_policy.jar和US_export_policy.jar这两个文件替换到%JAVA_HOME%\jre\lib\security下原来的文件,先备份原文件。

字段名 变量名 类型 描述
微信订单号 transaction_id String(32) 微信订单号
商户订单号 out_trade_no String(32) 商户系统内部的订单号
微信退款单号 refund_id String(32) 微信退款单号
商户退款单号 out_refund_no String(64) 商户退款单号
订单金额 total_fee Int 订单总金额,单位为分,只能为整数
申请退款金额 refund_fee Int 退款总金额,单位为分
退款金额 settlement_refund_fee Int 退款金额=申请退款金额-非充值代金券退款金额,退款金额<=申请退款金额
退款状态 refund_status String(16) SUCCESS-退款成功;CHANGE-退款异常;REFUNDCLOSE—退款关闭
退款入账账户 refund_recv_accout String(64)
退款资金来源 refund_account String(30) REFUND_SOURCE_RECHARGE_FUNDS;可用余额退款/基本账户REFUND_SOURCE_UNSETTLED_FUNDS 未结算资金退款
退款发起来源 refund_request_source String(30) API接口 VENDOR_PLATFORM商户平台

根据解析后信息对退款记录进行修改。

Copyright © Sodo Tech 2014-2018 all right reserved,powered by Gitbook最后更新: 2018-08-10 23:26

results matching ""

    No results matching ""