发起退款
接口说明
当开发者需要替用户发起退款时,可用该接口替用户发起退款。
- •一笔订单可以多次退款。微信渠道不超过 50 次,支付宝渠道不超过 300 次。
- •交易时间超过 1 年的订单无法提交退款。
- •银行卡支付的退款 7 天内到账,支付宝支付(余额、银行卡快捷支付等)的退款 3 个工作日内到账,微信支付(余额、银行卡快捷支付等)的退款 7 天内到账。(退款优先原路退,如用户使用尾号为 1234 的招行借记卡付款,则退款至用户尾号为 1234 的招行借记卡)。
- •预约类商品订单发起退款前,需确保预约单与主单均未处于退款处理中、退款完成状态。
使用限制
请不要滥用退款能力,如果发现滥用退款能力,平台会进行惩处。
退款流程
退款流程如下:
过期自动退说明
- •过期自动退的退款被拒绝退款后,不会再次发起。
- •在交易系统产生的订单,如果用户购买的商品是过期退商品,在商品到达过期时间后,交易系统会自动发起退款,创建退款单,退款流程和用户发起退款流程相同。
- •发起过期自动退条件:
- ◦非 POI 商品:
- ▪前端传入合法的商品过期时间。
- ▪前端传入的 goodsLabels 中包含过期退标签。
- ◦POI 团购商品:
- ▪POI 商品设置了过期时间。
- ▪POI 商品的 sub_title 包含过期退标签。
- ◦可以通过查询券状态接口的valid_end_time字段获取商品的过期时间
- ◦担保支付不会自动发起过期自动退,仍需开发者处理。 过期自动退的退款单由系统创建,因此 退款申请回调和状态通知回调 cp_extra 会是空值。
外部退款单号说明:
- •外部退款单号务必确保在同一小程序内不会重复
未核销/已核销的 item 需要分开发起退款
- •开发者发起退款,一次退款不能同时包含核销前和核销后的item_order,请分别发起核销前或核销后退款。
- •开发者发起退款,如果其中一个子单已经核销并且分账,另一个子单刚核销,刚核销的子单需要等待一个小时分账后再退款
- •核销满 30 天后不支持退款
部分金额退功能说明
在某些特殊的场景下(次卡、酒旅订单等),用户退 item_order 的退款金额不等于实付金额,开发者需要指定用户退款的 item_order 的退款金额(退款 item_order 部分金额)。交易系统也支持了该特殊场景,允许开发者在前端组件和开发者发起退款的 Open API 指定 item_order 退款金额。
开发者需要使用部分金额退功能,请联系对应的行业运营开通。
- 1.若未指定 item_order 退款金额,则和普通退款(退实付金额)相同。
- 2.如果该 item_order 已经退款成功,不能再发起退款。不支持已退款成功的 item_order,再发起退款。
次卡退款说明
- 1.次卡仅支持开发者用openAPI发起退款,开发者必须指定item_order和对应的退款金额
- 2.次卡仅支持退剩余未核销金额,已核销的金额不支持退款。如果次卡的所有次数均已核销,则不支持发起退款。
- 3.次卡仅允许退款一次,即如果次卡已退款成功则无法再次发起退款
- 4.次卡不支持过期自动退
基本信息
基本信息 | |
HTTP URL | |
HTTP Method | POST |
Scope | industry_open.trade.refund |
权限要求 | 不需要用户授权 |
请求头
请求参数
对于历史上没有接入过“担保支付”和“交易模板 1.0”两个系统的开发者可以忽略“旧系统”这个概念
- •新系统订单退款,必传item_order_detail字段
- •旧系统订单退款,必传refund_total_amount,(旧系统是指通过担保交易和旧交易模板产生的订单)
- •item_order_detail 和 refund_total_amount 不能同时传入
- •通过开发者接口发起退款,请注意 item_order 的状态(待使用和已核销可以发起退款,其他状态无法发起退款)
- •用户发起退款,只有 item_order 的状态为待使用状态才可以发起退款
- •开发者发起退款和用户发起退款、过期自动退都需要退款审核,需要调用
退款审核结果同步 接口同步同意退款还是拒绝退款。名称 | 类型 | 是否必填 | 描述 | 示例值 |
out_order_no | string | 是 | 开发者侧订单号,长度 <= 64 byte | 123123131 |
out_refund_no | string | 是 | 开发者侧退款单号,长度 <= 64 byte,确保每次传入的out_refund_no在开发者系统保证唯一 | 123123 |
cp_extra | string | 否 | 开发者自定义透传字段,不支持二进制,长度 <= 2048 byte | extra_info |
order_entry_schema | object | 是 | 退款单的跳转的 schema | 详见下方 order_entry_schema 参数详解 |
notify_url | string | 否 | https://xxx | |
item_order_detail | Array<object> | 否 | 需要发起退款的商品单信息,数组长度<100 注意:交易系统订单必传 | 详见下方 item_order_detail 参数详解 |
refund_total_amount | int64 | 否 | 退款总金额,单位分
| 100 |
refund_reasons | Array<object> | 否 | 退款信息 | 详见下方 refund_reason 参数详解 |
refund_description | string | 否 | 退款备注 | |
refund_all | Bool | 否 | 当订单未发生任何退款时,可设置refund_all=true,refund_total_amount=订单实付金额,发起整单退款。refund_all=true时不能设置item_order_detail | true |
fee_detail | Array<object> | 否 | 仅航司小程序使用 | 详见下方 fee_detail 参数详解 |
order_entry_schema 信息
名称 | 类型 | 是否必填 | 描述 | 示例值 |
path | string | 是 | 订单详情页路径,没有前导的/,该字段不能为空,长度 <= 512byte | pages/indexx |
params | string | 否 | 路径参数,自定义的 json 结构,序列化成字符串存入该字段,平台不限制,但是写入的内容需要能够保证生成访问订单详情的 schema 能正确跳转到小程序内部的订单详情页,长度 <= 512byte | {\"id\":\"cx\"} |
item_order_detail 信息
名称 | 类型 | 是否必填 | 描述 | 示例 |
item_order_id | string | 是 | ot7072366682238 | |
refund_amount | int64 | 否 | 该 item_order 需要退款的金额,单位分,不能大于该 item_order 实付金额且要大于 0 需要指定 item_order 的退款金额,需要申请开通指定金额退款权限才能使用 | 100 |
fee_detail 信息
名称 | 类型 | 是否必填 | 描述 |
