申请退款
对已付款的订单发起退款,钱原路退回付款人。一笔订单可以分多次部分退款,累计不超过实付金额。
请求地址
https://z.weixiao.cc/refund,POST 表单。
请求参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
pid | String | 必填 | 商户号,「API信息」里的商户号 |
trade_no | String | 否 | 站长单号 |
out_trade_no | String | 否 | 商户单号,下单时传的商户单号 |
money | String | 必填 | 退款金额 |
out_refund_no | String | 否 | 商户退款单号 |
sign | String | 必填 | 签名 |
sign_type | String | 否 | 签名类型 |
trade_no:与out_trade_no至少传一个,都传时以它为准money:单位元,大于 0,最多两位小数,只能包含数字和小数点out_refund_no:你系统里的退款单号,最长 150 个字符。传了之后,同一个退款单号重复提交不会重复退款sign:见「V1(MD5签名)」「V2(RSA签名)」sign_type:MD5或RSA,不传按 MD5;签名方式为「RSA签名」的商户必须传RSA
提示
建议每次都传 out_refund_no。网络超时等情况下用同一个退款单号重新提交,平台不会重复退款;不传时,每提交一次都是一笔新的退款申请。
请求示例
curl -X POST 'https://z.weixiao.cc/refund' \
--data-urlencode 'pid=1001' \
--data-urlencode 'out_trade_no=20260927123456' \
--data-urlencode 'money=1.00' \
--data-urlencode 'out_refund_no=RF20260927001' \
--data-urlencode 'sign=你算出的签名' \
--data-urlencode 'sign_type=MD5'返回参数
| 参数 | 类型 | 说明 |
|---|---|---|
code | Int | 返回码,1 为退款成功 |
msg | String | 返回信息 |
refund_no | String | 平台退款单号,本站生成的 19 位退款单号 |
out_refund_no | String | 商户退款单号,原样返回,没传时为空字符串 |
trade_no | String | 站长单号,退款的订单 |
money | String | 退款金额 |
money:本次退款的金额,末尾的 0 会省略,如1.50返回1.5
返回示例
退款成功:
{
"code": 1,
"msg": "退款成功,退款金额¥1",
"refund_no": "2026092712100012345",
"out_refund_no": "RF20260927001",
"trade_no": "2026092712000012345",
"money": "1"
}其他结果
重复提交
同一个 out_refund_no 已经退款成功,再次提交直接返回原来的结果,不会再退一次。这个返回里没有 trade_no,money 保留两位小数:
{"code":1,"msg":"已存在相同退款单号,退款金额¥1.00","refund_no":"2026092712100012345","out_refund_no":"RF20260927001","money":"1.00"}退款处理中
支付通道暂时没有给出最终结果(如通道超时)。这时 code 是 -1,但退款并没有失败,平台会继续向通道确认:
{"code":-1,"msg":"退款处理中(平台退款单号 2026092712100012345):渠道尚未给出确定结果;请勿重复提交,稍后查询结果","where":""}不要换一个退款单号重新提交。稍后可以用「退款查询」查询;也可以用同一个 out_refund_no 再次提交:已经成功的返回原结果,仍在处理的再次返回「退款处理中」,已经失败的会用原平台退款单号重新发起。
退款失败
平台检查不通过时:
{"code":-1,"msg":"退款金额超过可退余额"}支付通道拒绝退款时,msg 是通道给出的原因:
{"code":-1,"msg":"支付通道返回的原因","where":""}失败原因
| 返回信息 | 说明 |
|---|---|
| 退款金额不合法 | money 为空,或含有数字和小数点以外的字符 |
| 退款金额必须大于 0 | |
| 退款金额最多两位小数 | 不会替你四舍五入,请传两位以内的小数 |
| 订单号不能为空 | trade_no 和 out_trade_no 都没传 |
| 订单不存在 | |
| 该订单未支付,无法退款 | 订单未付款或已关闭 |
| 该订单状态不可退款 | |
| 该订单已全额退款 | |
| 该订单没有可退金额 | |
| 该订单已有退款在处理中,暂无可退金额 | 剩余金额都被还没有结果的退款占着 |
| 退款金额超过可退余额 | 本次金额大于订单剩余可退的金额 |
| 商户退款单号过长 | out_refund_no 超过 150 个字符 |
| 该退款单号已用于另一笔退款申请(订单或金额不同),请更换退款单号 | 退款单号已被占用 |
| 暂不支持退款,请联系站点客服处理; | 这笔订单所用的支付通道不支持接口退款 |
- 「该订单已有退款在处理中,暂无可退金额」:剩余金额都被还没有结果的退款占着,等它们有结果后再申请
- 「该退款单号已用于另一笔退款申请(订单或金额不同),请更换退款单号」:同一个
out_refund_no不能用于不同的订单或金额
注意事项
- 全额退完后订单状态变为
2(已退款);部分退款的订单状态仍是1,查询订单时refundmoney为累计退款金额。 - 退款处理中的金额会先占住可退金额,结果出来前不能再用这部分金额申请退款。