Skip to main content

订单状态

一笔支付订单在其生命周期中会经历以下状态:
状态码状态说明
0INIT初始化,订单刚创建,等待用户支付
1PAYING支付中,用户已进入收银台或正在完成支付
2PAY_SUCCESS支付成功,资金已从消费者侧扣除
3PAY_FAIL支付失败,可能是余额不足、卡号错误等
4PARTIAL_REFUND部分退款,已退还部分金额
5REFUNDED全部退款,订单金额已全部退还
6CLOSE已关闭,订单超时未支付或主动取消
7IN_DISPUTE争议中,消费者发起 Chargeback

状态流转图

                    ┌──────────┐
                    │   INIT   │
                    │ (初始化)  │
                    └────┬─────┘

                    ┌────▼─────┐
                    │  PAYING  │
                    │ (支付中)  │
                    └────┬─────┘

          ┌──────────────┼──────────────┐
          │              │              │
     ┌────▼─────┐  ┌────▼─────┐  ┌────▼─────┐
     │  SUCCESS │  │  FAILED  │  │  CLOSE   │
     │(支付成功) │  │(支付失败) │  │ (已关闭)  │
     └────┬─────┘  └──────────┘  └──────────┘

     ┌────┴────────┐
     │             │
┌────▼────────┐ ┌──▼──────────┐
│PARTIAL_REFUND│ │ IN_DISPUTE │
│ (部分退款)   │ │  (争议中)   │
└────┬────────┘ └─────────────┘

┌────▼─────┐
│ REFUNDED │
│(全部退款) │
└──────────┘

状态详解

INIT(初始化)

订单刚创建,等待用户支付。此状态下:
  • 尚未产生任何资金流动
  • 用户可以取消支付
  • 超时未支付将自动进入 CLOSE

PAYING(支付中)

用户已进入收银台页面,正在进行支付操作:
  • 正处于渠道处理中
  • 可能涉及 3DS 验证等中间步骤
  • 不应在此状态下更新商户系统订单状态

PAY_SUCCESS(支付成功)

这是商户发货/提供服务的依据,资金进入「待结算」。平台会发送 order.payment.succeeded Webhook 事件。

PAY_FAIL(支付失败)

支付处理失败,常见原因:银行卡余额不足、卡号/CVV 错误、风控拦截、渠道服务异常。

PARTIAL_REFUND(部分退款)

已退款部分金额(可多次部分退款,累计不超过支付金额)。

REFUNDED(全部退款)

累计退款金额等于原支付金额,订单已全额退款。

CLOSE(已关闭)

订单在有效期内未完成支付,系统自动关闭或商户主动取消。

IN_DISPUTE(争议中)

消费者通过发卡行发起 Chargeback,订单进入争议状态。
商户需要在应诉期内提交抗辩材料,逾期将默认败诉。及时关注 order.dispute.* Webhook 事件。

交易状态

每笔支付交易(Transaction)另有独立状态:
状态码状态说明
0INIT初始化
1PROCESSING处理中
2SUCCESS处理成功
5CANCELLED已取消
6FAILED处理失败
一个订单可能有多笔交易(如重试支付),每笔交易独立记录。

相关页面

最佳实践

  • 以 Webhook 为准:不要仅依赖主动查询结果,Webhook 是状态变更的权威来源
  • 处理重试:一笔订单可能触发多次支付尝试,注意去重
  • 幂等处理:同一个 Webhook 事件可能被重复推送,需依据 event_id 做幂等处理