1. 售后
电商3.0-运营平台开放接口
  • 接入说明与返回码
  • 订单
    • 查询订单
      POST
    • 取消预约
      POST
  • 售后
    • 申请退单
      POST
    • 查询退单
      POST
  • 景区
    • 查询景区列表
      POST
    • 查询景区营业时间
      POST
  • 数据模型
    • OpenRequest
    • OpenResponse
  1. 售后

申请退单

POST
/operator/open/order/refundCreate
最后修改时间:2026-11-11 15:39:59
责任人:未设置

接口说明#

以「平台客服」身份对订单发起退单,退单申请人记为应用实例绑定的操作员。覆盖全部业态。
本接口为整单退:退该订单当前全部剩余可退数量,不支持指定数量或指定游客的部分退。退款金额和手续费按平台退改规则计算,不支持调用方指定金额或减免手续费。
接口编码:operator.order.refund.create
请求的加密、签名和响应解密规则见「接入说明与返回码」。

请求业务字段#

以下为加密前的业务参数,序列化为 JSON 字符串并加密后填入外层 body。
字段类型必填说明
orderNostring是平台订单号
outRefundNostring否商家退款单号,最长 128 个字符。同一个应用实例在本接口下用相同的单号重复请求只会办理一次(见下方「幂等」);响应中原样回传,门票、演出、组品订单还会把它记录到退单上
refundReasonstring否退单原因
callerPhonestring否来电号码。传了就校验它是否为订单预留手机号(联系人手机号或任意一位出行人手机号),不一致时拒绝办理;不传或传空不校验。比较时忽略空格、短横线和开头的 +86 / 0086 / 86;平台不会在响应或错误提示里返回订单的预留手机号

请求业务示例#

{
  "orderNo": "2026102010340201025147",
  "outRefundNo": "IVR-20261111-000123-refund",
  "refundReason": "游客申请退票",
  "callerPhone": "13800000000"
}

响应业务字段#

响应体解密后为统一结构 {code, msg, data, ok}。data 为退单结果:
字段类型说明
orderNostring平台订单号
businessTypestring业态类型,取值同「查询订单」
refundNostring平台售后单号,用于「查询退单」
outRefundNostring商家退款单号,原样回传
refundQuantityinteger本次退单数量
refundStatusstring退单状态:PROCESSING 处理中(待审核、待供应商确认、退款处理中、供应商拒绝后待运营处理)、SUCCESS 退款成功、FAILED 退款失败(售后关闭)
afterStatusstring业态原始售后状态,取值见「查询退单」的 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)#

outRefundNo 选填,最长 128 个字符。传了以后,同一个应用实例在本接口下使用相同 outRefundNo 的请求只会办理一次,记录保留 24 小时:
首次请求的结果用同一个 outRefundNo 再次请求
成功(code=0)不再办理,直接返回首次请求的响应
还在处理中返回 code=405「请求正在处理中,请勿重复提交」,稍后再试
业务校验不通过(code 非 0,如订单不存在、来电号码不一致、没有可退数量)首次请求没有办理,不会被记录,可以修正后用同一个 outRefundNo 重试
结果未知(平台内部调用超时或系统异常,调用方收到的是 code=400 / 500 这类错误,或者请求直接超时)返回 code=405「该 outRefundNo 对应的请求结果未知…」,不会再办理。请先用「查询退单」确认结果,确实需要重新办理时换一个新的 outRefundNo
建议每一次退单意图生成一个单号(如通话流水号 + 动作),超时或网络错误后用同一个单号重试。
单号只能用于同一笔请求:相同的 outRefundNo 配上不同的订单号或来电号码,返回 code=1020「outRefundNo 已被其他请求使用,请更换 outRefundNo」。
超过 128 个字符返回 code=1020「outRefundNo 长度不能超过 128」。
24 小时后记录失效,同一个单号会被当作新请求。

业务错误#

业务校验不通过时 code 非 0,msg 为具体原因。返回码含义见「接入说明与返回码」第 9.2 节,下游业态服务给出的返回码原样透出:
codemsg说明
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 的首次请求中途出现超时或系统异常,平台无法确定是否已办理
1020outRefundNo 已被其他请求使用,请更换 outRefundNo相同的 outRefundNo 之前用于另一笔请求(订单号或来电号码不同)
1020outRefundNo 长度不能超过 128outRefundNo 超过 128 个字符
405幂等校验暂不可用,请稍后重试平台的幂等存储暂时不可用,本次请求没有办理,可稍后用同一个单号重试
1031该接口仅支持运营平台操作员调用应用实例绑定的不是运营平台操作员
1020业务参数格式有误,必须为JSON对象业务参数不是 JSON 对象,或字段类型不对
{
  "code": 2010,
  "msg": "订单不存在",
  "data": null,
  "ok": false
}

请求参数

Body 参数application/json必填

示例
{
    "key": "调用方的key",
    "timestamp": 1794370000000,
    "body": "业务参数加密后的Base64密文",
    "sign": "MD5(body+timestamp+secret)"
}

请求示例代码

Shell
JavaScript
Java
Swift
Go
PHP
Python
HTTP
C
C#
Objective-C
Ruby
OCaml
Dart
R
请求示例请求示例
Shell
JavaScript
Java
Swift
curl --location 'https://scthub-open.dev.dmqwl.com/operator/open/order/refundCreate' \
--header 'Content-Type: application/json' \
--data '{
    "key": "调用方的key",
    "timestamp": 1794370000000,
    "body": "业务参数加密后的Base64密文",
    "sign": "MD5(body+timestamp+secret)"
}'

返回响应

🟢200成功
application/json
响应体为 Base64 密文,用 aesKey 解密后得到统一响应 OpenResponse,data 的结构如下;被网关拒绝时为明文 JSON,见「接入说明与返回码」
Bodyapplication/json

示例
{
    "code": 0,
    "msg": null,
    "data": {
        "orderNo": "2026102010340201025147",
        "businessType": "TICKET",
        "refundNo": "R202611112058595252",
        "outRefundNo": "IVR-20261111-000123-refund",
        "refundQuantity": 1,
        "refundStatus": "SUCCESS",
        "afterStatus": "COMPLETE"
    },
    "ok": true
}
修改于 2026-11-11 15:39:59
上一页
取消预约
下一页
查询退单
Built with