幂等规则
创建订单前,商户系统需要先生成并保存 merchantOrderNo。它是商户侧唯一订单号: 同一个商户编号下,一个 merchantOrderNo 只能代表一笔真实业务订单。 后续查单、对账、Webhook 关联,以及创建结果不确定后的重试,都继续使用这个订单号。
| 场景 | 平台处理 | 商户应处理 |
|---|---|---|
首次使用某个 merchantOrderNo 创建订单 | 创建订单,并返回平台订单号和当前 status | 保存 merchantOrderNo、platOrderNo 和订单状态,后续按 status、查单或 Webhook 判断业务结果 |
同一商户、同一 merchantOrderNo,且业务参数一致 | 不新建订单,返回首次受理订单的当前状态和原平台订单号 | 当作同一笔订单的状态回读,不要重复记账、发货、补款或出款 |
同一商户、同一 merchantOrderNo,但业务参数不一致 | 返回 HTTP 409 和 MERCHANT_ORDER_NO_CONFLICT | 停止重试,检查是否误用了订单号;如果是新的真实业务订单,必须使用新的 merchantOrderNo |
如果创建结果还没确认,不要通过更换商户订单号来重新下单。代付请求尤其要谨慎,因为首次请求可能已经进入扣款或出款处理。
如果用户连续发起三次 100 元充值,应生成三个不同的商户订单号,例如 PAY_001、PAY_002 和 PAY_003。金额、商品或收款人相同,不代表可以复用订单号。只有同一笔业务订单因为超时、 断连或响应无法验证而需要恢复时,才继续使用原 merchantOrderNo。
幂等重复请求不会更新既有订单。响应保持首次受理创建请求保存的业务字段和 customData 数据,后续请求中的字段不会合并或覆盖首次保存的数据。
创建类业务请求不得自动或并发重试。HTTP 客户端也应配置成由业务系统明确发起每一次创建请求;确实需要重试时, 必须先完成查单,且订单标识和业务字段必须不变。
