微信交易退款接口
当交易发生之后一段时间内,由于买家或者卖家的原因需要退款时,卖家可以通过退款接口将支付款退还给买家,微信支付将在收到退款请求并且验证成功之后,按照退款规则将支付款按原路退到买家账户上。
- 交易时间超过一年的订单无法提交退款(按支付成功时间+365天计算)。
- 微信支付退款支持单笔交易分多次退款,多次退款需要提交原支付订单的商户订单号和设置不同的退款单号。申请退款总金额不能超过订单金额。 一笔退款失败后重新提交,请不要更换退款单号,请使用原商户退款单号。
- 请求频率限制:150qps,即每秒钟正常的申请退款请求次数不超过150次,单笔订单请求频率限制:1qpm,即单笔订单每分钟申请退款请求次数不超过1次。
- 每个支付订单的部分退款次数不能超过50次。
二、请求地址:
请求参数
| 参数名 | 类型 | 必填 | 说明 | 示例 |
|---|---|---|---|---|
| appid | String | 必填 | 合作伙伴Id | |
| timestamp | String | 必填 | 时间戳 | 请求时的时间,unixtime格式 |
| tppay_trade_no | String | 2选1 | 微信交易号,支付成功回调时返回的tppay_trade_no。 | 微信交易号,和蜂巢交易号不能同时为空 |
| quickpay_trade_no | String | 2选1 | 蜂巢交易号,支付成功回调时返回的quickpay_trade_no。 | 微信交易号,和蜂巢交易号不能同时为空 |
| refund_amount | Int | 必填 | 退款金额。 需要退款的金额,该金额不能大于订单金额,单位为分 |
100 |
| out_request_no | String | 必填 | 退款请求号。 标识一次退款请求,需要保证在交易号下唯一,如需部分退款,则此参数必传。 注:针对同一次退款请求,如果调用接口失败或异常了,重试时需要保证退款请求号不能变更,防止该笔交易重复退款。微信保证同样的退款请求号多次请求只会退一次。 |
|
| refund_reason | String | 必填 | 退款原因说明。 商家自定义,将在会在商户和用户的pc退款账单详情中展示 | |
| sign | String | 必填 | 签名 | 对各参数使用提供的AppSecret进行签名,签名逻辑具体实现见示例代码 |
请求示例
@Test
public void WxSFTRefundPayTrade() throws Exception {
String tppay_trade_no = "4200003208202606160490456846";
String outRefundNo = "20260618-001";
String refund_amount = "10"; //单位是分
String refundReason = "双方达成一致";
Map<String, String> data = new HashMap<String, String>();
data.put("appid", Config.AppId);
Long timestamp = System.currentTimeMillis() / 1000;
data.put("timestamp", timestamp.toString());
data.put("tppay_trade_no",tppay_trade_no );
data.put("out_request_no",outRefundNo );
data.put("refund_reason",refundReason );
data.put("refund_amount",refund_amount );
data.put("sign", Utils.Sign(data, Config.AppSecret));
String result = doHttpRequest(Config.WXPersonalRefundTradeUrl, data);
System.out.println(result);
}
三、接口返回结果:
{
"code": 0,
"message": "ok",
"data": {
"refund_id": "50300607562026061842394414906",
"out_refund_no": "20260618-001",
"create_time": "2026-06-18T14:04:20+08:00",
"amount": {
"refund": 10,
"payer_refund": 10,
"currency": "CNY"
},
"refund_account": "REFUND_SOURCE_SUB_MERCHANT"
},
"trace_id": "4da9e8fa-44ee-497e-920c-39302fc3e333"
}
四、返回参数说明
返回字段中code为0表示成功,非0失败,失败的话message会有失败原因。成功的往左,会有以下字段。
| 参数 | 类型 | 是否必选 | 描述 |
|---|---|---|---|
| refund_id | String | 必选 | 微信支付退款订单号 |
| out_refund_no | String | 必选 | 商户系统内部的退款单号,商户系统内部唯一,只能是数字、大小写字母,同一退款单号多次请求只退一笔。 |
| create_time | String | 必填 | 退款受理时间,遵循rfc3339标准格式,格式为YYYY-MM-DDTHH:mm:ss+TIMEZONE |
| amount | 可选 | 退款使用的资金渠道。 | |
| —– refund | integer | 必选 | 退款金额,单位为分,只能为整数,不能超 过原订单支付金额 |
| —– payer_refund | integer | 必选 | 退款给用户的金额,不包含所有优惠券金额 |
| —– currency | String | 选填 | 符合ISO4217标准的三位字母代码,目前只支持人民币:CNY |
文档更新时间: 2026-06-18 14:34 作者:admin