申请退款
接口说明
对已支付成功的订单发起退款,支持部分退款和全额退款。
注意:
- 退款金额不能超过订单可退款余额(查询订单返回的
refundableBalance) - 同一笔订单的多次退款请求,
bizRefundNo必须唯一(不传则由系统生成) - 退款为异步操作,接口返回
progress后,以异步通知或退款同步确认终态
请求地址
POST /unipay/refund
- 认证:RSA 签名(
@PaymentVerify) - 响应:
DaxResult<RefundResult>
请求参数
基础参数同 统一支付 - 基础参数,业务参数:
| 参数 | 类型 | 必填 | 最大长度 | 描述 |
|---|---|---|---|---|
| tradeNo | string | 否* | 100 | 原支付资金交易号(平台 tradeNo) |
| bizOrderNo | string | 否* | 100 | 原支付商户业务订单号 |
| amount | long | 是 | — | 退款金额,单位分(必须大于 0) |
| reason | string | 否 | 50 | 退款原因 |
| bizRefundNo | string | 否 | 100 | 商户退款号(不传由系统生成) |
*
tradeNo、bizOrderNo至少传一个,优先使用tradeNo。
请求示例
json
{
"mchNo": "M200000001",
"appId": "APP001",
"reqId": "REQ20241201002",
"reqTime": "2024-12-01 12:30:00",
"nonceStr": "RANDOMSTR123",
"sign": "Base64签名值",
"bizOrderNo": "ORDER20241201001",
"amount": 100,
"bizRefundNo": "REFUND20241201001",
"reason": "用户申请退款"
}响应参数
DaxResult<RefundResult>,data 字段结构:
| 参数 | 类型 | 描述 |
|---|---|---|
| refundNo | string | 平台退款号 |
| bizRefundNo | string | 商户退款号 |
| status | string | 退款状态(RefundOrderStatusEnum) |
| errorMsg | string | 错误信息(失败时返回) |
响应示例
json
{
"code": 0,
"msg": "success",
"data": {
"refundNo": "R2024120112345700001",
"bizRefundNo": "REFUND20241201001",
"status": "progress"
},
"sign": "Base64签名值",
"resTime": "2024-12-01 12:30:00",
"reqId": "REQ20241201002"
}退款状态(RefundOrderStatusEnum)
| status | 说明 |
|---|---|
| progress | 退款中(已创建并调用通道,等待结果) |
| success | 退款成功 |
| fail | 退款失败 |
| close | 退款关闭(超时未确认等) |
退款回调
退款成功后,平台会向原支付订单的 notifyUrl 发送 event=refund.success 的异步通知,报文结构见 异步回调。