operator.order.refund.createbody。| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
orderNo | string | 是 | 平台订单号 |
outRefundNo | string | 否 | 商家退款单号,最长 128 个字符。同一个应用实例在本接口下用相同的单号重复请求只会办理一次(见下方「幂等」);响应中原样回传,门票、演出、组品订单还会把它记录到退单上 |
refundReason | string | 否 | 退单原因 |
callerPhone | string | 否 | 来电号码。传了就校验它是否为订单预留手机号(联系人手机号或任意一位出行人手机号),不一致时拒绝办理;不传或传空不校验。比较时忽略空格、短横线和开头的 +86 / 0086 / 86;平台不会在响应或错误提示里返回订单的预留手机号 |
{
"orderNo": "2026102010340201025147",
"outRefundNo": "IVR-20261111-000123-refund",
"refundReason": "游客申请退票",
"callerPhone": "13800000000"
}{code, msg, data, ok}。data 为退单结果:| 字段 | 类型 | 说明 |
|---|---|---|
orderNo | string | 平台订单号 |
businessType | string | 业态类型,取值同「查询订单」 |
refundNo | string | 平台售后单号,用于「查询退单」 |
outRefundNo | string | 商家退款单号,原样回传 |
refundQuantity | integer | 本次退单数量 |
refundStatus | string | 退单状态:PROCESSING 处理中(待审核、待供应商确认、退款处理中、供应商拒绝后待运营处理)、SUCCESS 退款成功、FAILED 退款失败(售后关闭) |
afterStatus | string | 业态原始售后状态,取值见「查询退单」的 afterStatus |
{
"code": 0,
"msg": null,
"data": {
"orderNo": "2026102010340201025147",
"businessType": "TICKET",
"refundNo": "R202611112058595252",
"outRefundNo": "IVR-20261111-000123-refund",
"refundQuantity": 1,
"refundStatus": "SUCCESS",
"afterStatus": "COMPLETE"
},
"ok": true
}| 业态 | 可退条件 | 说明 |
|---|---|---|
| 门票 / 演出 | 订单未使用(无核销) | 实名订单退全部游客;已部分使用的订单需到运营后台处理 |
| 组品 | 订单未使用(无核销) | 子订单随主订单一并退 |
| 酒店 | 有剩余可退间数 | 按退改规则当前不可退时拒绝;手续费不低于退款金额时拒绝,需到运营后台人工处理 |
| 商品 | 订单未核销、未退过 | 受产品退改规则校验,可能被拒绝或进入待审核 |
| 预售 | 预售券未使用 | 免审核;该券下已预约成功的预约会被自动取消;有预约已使用时不能退 |
refundStatus=PROCESSING 时请用「查询退单」轮询,直到 refundStatus 为 SUCCESS 或 FAILED。SUPPLIER_REFUSE)不是终态,运营仍可在后台继续退款或关闭退单,因此归为处理中。outRefundNo 时接口不保证幂等,但不会重复退款:订单已退完后再次调用,返回「退单数量不足」或「订单没有可退数量,不能退单」。outRefundNo 就用同一个单号重试;没带则先用「查询退单」确认是否已生成退单,再决定是否重试。读超时建议设为 30 秒以上。outRefundNo 选填,最长 128 个字符。传了以后,同一个应用实例在本接口下使用相同 outRefundNo 的请求只会办理一次,记录保留 24 小时:| 首次请求的结果 | 用同一个 outRefundNo 再次请求 |
|---|---|
成功(code=0) | 不再办理,直接返回首次请求的响应 |
| 还在处理中 | 返回 code=405「请求正在处理中,请勿重复提交」,稍后再试 |
业务校验不通过(code 非 0,如订单不存在、来电号码不一致、没有可退数量) | 首次请求没有办理,不会被记录,可以修正后用同一个 outRefundNo 重试 |
结果未知(平台内部调用超时或系统异常,调用方收到的是 code=400 / 500 这类错误,或者请求直接超时) | 返回 code=405「该 outRefundNo 对应的请求结果未知…」,不会再办理。请先用「查询退单」确认结果,确实需要重新办理时换一个新的 outRefundNo |
outRefundNo 配上不同的订单号或来电号码,返回 code=1020「outRefundNo 已被其他请求使用,请更换 outRefundNo」。code=1020「outRefundNo 长度不能超过 128」。code 非 0,msg 为具体原因。返回码含义见「接入说明与返回码」第 9.2 节,下游业态服务给出的返回码原样透出:| code | msg | 说明 |
|---|---|---|
2010 | 订单不存在 | 订单号不存在 |
2310 | 预售券预约生成的子订单不支持直接退单,请使用取消预约接口 | 订单的 saleType 为 PRESALE |
2310 | 组品子订单不支持单独退单,请 对组品主订单申请退单 | 订单的 saleType 为 COMBO |
2310 | 订单已锁定,不能退单 | 订单的 lockStatus 为 1 |
2309 | 退单数量不足 / 订单没有可退数量,不能退单 | 订单已退完或已使用,没有可退数量(提示语因业态而异) |
2314 | 商品订单仅支持整单退,订单已核销,不能退单 | 商品订单已核销 |
2311 | 该订单按退改规则当前不可退(不可退或已超过可退时间),不能退单 | 酒店订单按退改规则不可退 |
2315 | 按退改规则扣除手续费后可退金额为0,请到运营平台人工处理 | 酒店订单手续费不低于退款金额 |
2301 | 实名制订单可退出行人数量(…)与退单数量(…)*产品使用人数(…)不一致,无法整单退,请到运营平台处理! | 门票、演出、组品实名制订单的可退出行人与退单数量对不上 |
2399 | 外部退单号已被其他订单的售后单使用,本次未发起退单! | outRefundNo 与其他订单的退单重复(超过 24 小时幂等记录有效期后由业态服务识别),请更换 |
1020 | 来电号码格式有误 | callerPhone 超过 32 个字符 |
2313 | 来电号码与订单预留手机号不一致,不能办理 | 传了 callerPhone,但它不是订单的预留手机号。未发起退单 |
405 | 请求正在处理中,请勿重复提交 | 相同 outRefundNo 的首次请求还没有处理完 |
405 | 该 outRefundNo 对应的请求结果未知,请先查询确认办理结果,如需重新办理请更换 outRefundNo | 相同 outRefundNo 的首次请求中途出现超时或系统异常,平台无法确定是否已办理 |
1020 | outRefundNo 已被其他请求使用,请更换 outRefundNo | 相同的 outRefundNo 之前用于另一笔请求(订单号或来电号码不同) |
1020 | outRefundNo 长度不能超过 128 | outRefundNo 超过 128 个字符 |
405 | 幂等校验暂不可用,请稍后重试 | 平台的幂等存储暂时不可用,本次请求没有办理,可稍后用同一个单号重试 |
1031 | 该接口仅支持运营平台操作员调用 | 应用实例绑定的不是运营平台操作员 |
1020 | 业务参数格式有误,必须为JSON对象 | 业务参数不是 JSON 对象,或字段类型不对 |
{
"code": 2010,
"msg": "订单不存在",
"data": null,
"ok": false
}