Skip to content

订单状态 ​

本页记录了 HashNut 支付订单的所有可能状态及其之间的转换关系。

状态图 ​

                          ┌──────────────┐
                          │  INIT (0)    │
                          └──────┬───────┘
                                 │
                    ┌────────────┼────────────┐
                    │            │            │
                    v            v            v
            ┌──────────┐  ┌──────────┐  ┌───────────┐
            │CANCELED   │  │EXPIRED   │  │ PAID (1)  │
            │  (-3)     │  │  (-2)    │  └─────┬─────┘
            └──────────┘  └──────────┘        │
                                              v
                                      ┌──────────────┐
                                      │CONFIRMING (2)│
                                      └──────┬───────┘
                                             │
                                    ┌────────┴────────┐
                                    v                 v
                            ┌────────────┐    ┌────────────┐
                            │SUCCESS (3) │    │FAILED (-1) │
                            └──────┬─────┘    └────────────┘
                                   │
                                   v
                            ┌────────────┐
                            │FINISH (4)  │
                            └────────────┘

状态参考 ​

值名称说明
0INIT订单已创建,等待客户付款
1PAID链上检测到支付交易,待确认
2CONFIRMING交易确认中(等待区块确认)
3SUCCESS支付已确认,资金已经到账
4FINISH后处理完成,通知商户并得到商户确认响应
-1FAILED支付验证失败(无效交易、金额不符等)
-2EXPIRED订单在收到付款前已过期
-3CANCELED订单被商户取消

状态转换 ​

起始状态目标状态触发条件
INIT (0)PAID (1)链上检测到支付交易
INIT (0)EXPIRED (-2)订单过期计时器到期
INIT (0)CANCELED (-3)商户调用取消订单
PAID (1)CONFIRMING (2)区块确认进行中
CONFIRMING (2)SUCCESS (3)达到所需区块确认数
CONFIRMING (2)FAILED (-1)交易回滚或验证失败
SUCCESS (3)FINISH (4)通知商户并得到商户确认响应

终态 ​

以下状态为最终状态,不会再发生转换:

  • FINISH (4)
  • FAILED (-1)
  • EXPIRED (-2)
  • CANCELED (-3)

WARNING

SUCCESS (3) 不是终态。它会在通知商户并得到商户响应后变为 FINISH (4)。但对于大多数商户集成场景,SUCCESS 是您应当履行客户订单的状态。

Webhook 通知状态 ​

以下状态转换时会发送 Webhook 通知:

新状态通知时机
PAID (1)检测到支付
SUCCESS (3)支付已确认
FAILED (-1)验证失败
EXPIRED (-2)订单已过期

TIP

最重要的状态是 SUCCESS (3)。这是您应当向客户交付商品或服务的时机。有关 Webhook 载荷详情,请参阅通知。

在代码中检查状态 ​

go
const (
	StateInit       = 0
	StatePaid       = 1
	StateConfirming = 2
	StateSuccess    = 3
	StateFinish     = 4
	StateFailed     = -1
	StateExpired    = -2
	StateCanceled   = -3
)

// After querying an order
switch result.State {
case StateSuccess, StateFinish:
	// Fulfill the order
case StatePaid, StateConfirming:
	// Still processing, wait
case StateFailed:
	// Handle failure
case StateExpired:
	// Order expired, prompt customer to create a new order
case StateCanceled:
	// Order was canceled
default:
	// INIT - still waiting for payment
}