Skip to content

API Checkout

概覽

API Checkout 為希望構建自定義收銀台 UI 的商戶提供簡潔的一步支付流程。商戶完全控制用戶界面,平台處理所有鏈上支付能力。

核心特性:

  • 自定義收銀台 UI: 商戶完全控制收銀台用戶體驗
  • 一步流程: 直接創建訂單,無需預先報價
  • 鏈上轉賬支付: 支持 TRON、ETH、BSC 等多種區塊鏈網絡
  • 僅限穩定幣: 支持 USDC、USDT 和 USD1

需要開通權限

API Checkout 為獨立產品,需要單獨開通。請聯繫技術支持以啟用(未開通時返回錯誤碼 50010 API_PERMISSION_DISABLED)。


身份認證

所有 API 請求使用與主 API 相同的 HMAC-SHA256 簽名方案。每次請求需包含以下請求頭:

請求頭類型必填說明示例
X-TimestampLong請求時間戳(毫秒,13位)1640000000000
X-SignatureString請求簽名(Base64編碼)calculated-signature

簽名算法:

signaturePayload = timestamp + "\n" + METHOD + "\n" + path + "\n" + SHA256(body)
X-Signature = Base64(HMAC-SHA256(signaturePayload, apiSecret))
  • SHA256(body) 為請求體的 Base64 編碼哈希值
  • GET 請求無查詢參數時,省略第四個組成部分:timestamp + "\n" + METHOD + "\n" + path
  • GET 請求有查詢參數時,queryString 單獨哈希作為第四個組成部分;path 不包含查詢參數
  • HTTP 方法必須大寫

詳細說明及代碼示例請參閱簽名算法


環境

環境基礎 URL
生產環境https://api.paystablecoin.global
沙盒環境https://api.sandbox.paystablecoin.global

1. 獲取支付方式

在創建訂單前,獲取商戶可用的支付方式列表。使用此接口在收銀台 UI 展示可用幣種/網絡,並在創建訂單前驗證組合是否有效。

接口說明

  • 方法: GET
  • 路徑: /api/v1/merchants/{merchantId}/checkout/payment-methods
  • 鑒權:

路徑參數

參數類型必填說明示例
merchantIdString商戶號MCH_20240101_ABC123

請求示例

bash
curl -X GET "https://api.paystablecoin.global/api/v1/merchants/MCH_20240101_ABC123/checkout/payment-methods" \
  -H "X-Timestamp: 1640000000000" \
  -H "X-Signature: <calculated-signature>"

響應字段

字段類型說明示例
codeString響應碼。00000 表示成功00000
messageString響應消息Success
dataObject響應數據-
data.merchantIdString商戶號MCH_20240101_ABC123
data.paymentMethodsArray支付方式列表-
data.paymentMethods[].paymentMethodTypeString支付方式類型ON_CHAIN_TRANSFER
data.paymentMethods[].cryptoCurrencyString加密貨幣幣種(USDC / USDT / USD1)USDC
data.paymentMethods[].networkString區塊鏈網絡代碼tron
data.paymentMethods[].networkDisplayNameString網絡展示名稱TRON Network
data.paymentMethods[].minAmountNumber最小支付金額0.1
data.paymentMethods[].maxAmountNumber最大支付金額999999999
data.paymentMethods[].estimatedConfirmationTimeSecInteger預計確認時間(秒)60
data.paymentMethods[].displayOrderInteger顯示順序(數字越小越靠前)1

響應示例

json
{
  "code": "00000",
  "message": "Success",
  "data": {
    "merchantId": "MCH_20240101_ABC123",
    "paymentMethods": [
      {
        "paymentMethodType": "ON_CHAIN_TRANSFER",
        "cryptoCurrency": "USDC",
        "network": "tron",
        "networkDisplayName": "TRON Network",
        "minAmount": 0.10,
        "maxAmount": 999999999.00,
        "estimatedConfirmationTimeSec": 60,
        "displayOrder": 1
      },
      {
        "paymentMethodType": "ON_CHAIN_TRANSFER",
        "cryptoCurrency": "USDC",
        "network": "eth",
        "networkDisplayName": "Ethereum(ERC20)",
        "minAmount": 10.00,
        "maxAmount": 999999999.00,
        "estimatedConfirmationTimeSec": 900,
        "displayOrder": 2
      },
      {
        "paymentMethodType": "ON_CHAIN_TRANSFER",
        "cryptoCurrency": "USDT",
        "network": "tron",
        "networkDisplayName": "TRON Network",
        "minAmount": 0.10,
        "maxAmount": 999999999.00,
        "estimatedConfirmationTimeSec": 60,
        "displayOrder": 3
      }
    ]
  }
}

2. 創建 Checkout 訂單

用戶在商戶自建收銀台選擇支付方式後,調用此接口創建訂單。平台返回訂單信息,商戶在收銀台展示收款地址和應付金額供用戶完成支付。

接口說明

  • 方法: POST
  • 路徑: /api/v1/merchants/{merchantId}/checkout/orders
  • Content-Type: application/json
  • 鑒權:

路徑參數

參數類型必填說明示例
merchantIdString商戶號MCH_20240101_ABC123

請求體——必填字段

字段類型必填說明示例
merchantOrderIdString商戶訂單號(商戶維度唯一,16-64位,僅支持字母、數字、_-,用於幂等性控制)ORDER_2024010112345678
orderAmountObject訂單金額。僅支持 USDC、USDT、USD1{"value": "100.50", "currency": "USDC"}
orderAmount.valueString穩定幣金額100.50
orderAmount.currencyString穩定幣代碼:USDC / USDT / USD1USDC
paymentMethodTypeString支付方式類型。固定值:ON_CHAIN_TRANSFERON_CHAIN_TRANSFER
networkString區塊鏈網絡代碼(如 tronethbsc),必須與 orderAmount.currency 為有效組合tron
expiresAtString訂單過期時間(UTC,ISO 8601 格式),最長支持創建後 24 小時2024-01-01T13:00:00Z

請求體——選填字段

字段類型必填說明示例
customerObject買家信息(用於風控)-
customer.emailString買家郵箱user@example.com
customer.nameString買家姓名John Doe
customer.customerIdString買家 ID(商戶系統的用戶 ID)USR_12345
descriptionString訂單描述(最長 512 字符)Purchase of 2 items
itemsArray商品明細列表-
items[].nameString商品名稱iPhone 15 Pro
items[].quantityInteger商品數量1
items[].priceString商品單價999.00
items[].currencyString商品幣種USDC
customerIpString客戶端 IP 地址(用於風控,最長 64 字符)192.168.1.100
userAgentString客戶端 User-Agent(用於設備識別,最長 512 字符)Mozilla/5.0...
callbackUrlStringWebhook 回調地址(支付狀態變更時異步通知,最長 2048 字符)https://api.merchant.com/webhooks/payment
metadataString商戶自定義元數據(平台原樣返回,最長 4096 字符,建議 JSON 格式){"orderId":"12345","source":"web"}

重要說明

  1. merchantOrderId 在商戶維度必須唯一。相同 merchantOrderId 的重複請求將返回已有訂單,不會重複創建。
  2. orderAmount.currencynetwork 的組合必須出現在獲取支付方式的結果中。請先調用該接口確認可用組合。
  3. expiresAt 建議設置為創建時間後 30 分鐘。

請求示例

示例 1:USDC / TRON

bash
curl -X POST https://api.paystablecoin.global/api/v1/merchants/MCH_20240101_ABC123/checkout/orders \
  -H "X-Timestamp: 1640000000000" \
  -H "X-Signature: <calculated-signature>" \
  -H "Content-Type: application/json" \
  -d '{
    "merchantOrderId": "ORDER_2024010112345678",
    "orderAmount": {
      "value": "100.50",
      "currency": "USDC"
    },
    "paymentMethodType": "ON_CHAIN_TRANSFER",
    "network": "tron",
    "expiresAt": "2024-01-01T13:00:00Z",
    "description": "Purchase of 2 items",
    "callbackUrl": "https://api.merchant.com/webhooks/payment"
  }'

示例 2:USDC / ETH(附帶買家信息)

bash
curl -X POST https://api.paystablecoin.global/api/v1/merchants/MCH_20240101_ABC123/checkout/orders \
  -H "X-Timestamp: 1640000000000" \
  -H "X-Signature: <calculated-signature>" \
  -H "Content-Type: application/json" \
  -d '{
    "merchantOrderId": "ORDER_2024010112345679",
    "orderAmount": {
      "value": "200.00",
      "currency": "USDC"
    },
    "paymentMethodType": "ON_CHAIN_TRANSFER",
    "network": "eth",
    "expiresAt": "2024-01-01T13:00:00Z",
    "customer": {
      "email": "user@example.com",
      "name": "John Doe",
      "customerId": "USR_12345"
    },
    "items": [
      {
        "name": "iPhone 15 Pro",
        "quantity": 1,
        "price": "999.00",
        "currency": "USDC"
      }
    ],
    "customerIp": "192.168.1.100",
    "callbackUrl": "https://api.merchant.com/webhooks/payment"
  }'

響應字段

字段類型說明示例
codeString響應碼。00000 表示成功00000
messageString響應消息Success
data.orderIdString平台訂單號ORD_20240101_1234567890ABCDEF
data.merchantIdString商戶號MCH_20240101_ABC123
data.merchantOrderIdString商戶訂單號ORDER_2024010112345678
data.statusString訂單狀態:INIT / PROCESSING / SUCCEEDED / FAILED / CLOSEDINIT
data.orderAmountObject訂單金額{"value": "100.50", "currency": "USDC"}
data.cryptoPaymentAmountObject用戶應付金額(含手續費等){"value": "101.00", "currency": "USDC"}
data.depositAddressString收款地址(用戶需要轉賬到此地址)TYdRLmP9kN4oY3hZ8xT6wQ2vS5uW7aV1b
data.networkString區塊鏈網絡代碼tron
data.networkDisplayNameString網絡展示名稱TRON Network
data.createdAtString(ISO 8601)訂單創建時間(UTC)2024-01-01T12:00:00Z
data.expiresAtString(ISO 8601)訂單過期時間(UTC)2024-01-01T13:00:00Z

收銀台展示說明

訂單創建成功後,請立即在收銀台展示以下信息:

  • depositAddress — 用戶需要轉賬的錢包地址
  • cryptoPaymentAmount — 用戶需要支付的確切金額( orderAmount
  • networkDisplayName — 必須在此網絡上完成轉賬
  • 基於 expiresAt 的倒計時

用戶需要支付至少 cryptoPaymentAmount.value 的金額。支付多於此金額可接受;支付不足則訂單失敗。

響應示例

成功:

json
{
  "code": "00000",
  "message": "Success",
  "data": {
    "orderId": "ORD_20240101_1234567890ABCDEF",
    "merchantId": "MCH_20240101_ABC123",
    "merchantOrderId": "ORDER_2024010112345678",
    "status": "INIT",
    "orderAmount": {
      "value": "100.50",
      "currency": "USDC"
    },
    "cryptoPaymentAmount": {
      "value": "101.00",
      "currency": "USDC"
    },
    "depositAddress": "TYdRLmP9kN4oY3hZ8xT6wQ2vS5uW7aV1b",
    "network": "tron",
    "networkDisplayName": "TRON Network",
    "createdAt": "2024-01-01T12:00:00Z",
    "expiresAt": "2024-01-01T13:00:00Z"
  }
}

錯誤——參數無效:

json
{
  "code": "10001",
  "message": "Invalid parameter: orderAmount.currency must be one of: USDC, USDT, USD1",
  "data": null
}

3. 查詢 Checkout 訂單

查詢 Checkout 訂單的最新狀態和詳情。

接口說明

  • 方法: GET
  • 路徑: /api/v1/merchants/{merchantId}/checkout/orders/{merchantOrderId}
  • 鑒權:
  • 簽名說明: GET 請求無 Body 或查詢參數。算法:Base64(HMAC-SHA256(timestamp\nMETHOD\npath, apiSecret))

路徑參數

參數類型必填說明示例
merchantIdString商戶號MCH_20240101_ABC123
merchantOrderIdString商戶訂單號ORDER_2024010112345678

請求示例

bash
curl -X GET "https://api.paystablecoin.global/api/v1/merchants/MCH_20240101_ABC123/checkout/orders/ORDER_2024010112345678" \
  -H "X-Timestamp: 1640000000000" \
  -H "X-Signature: <calculated-signature>"

簽名字符串: 1640000000000\nGET\n/api/v1/merchants/MCH_20240101_ABC123/checkout/orders/ORDER_2024010112345678

響應字段

字段類型說明示例
codeString響應碼。00000 表示成功00000
messageString響應消息Success
data.orderIdString平台訂單號ORD_20240101_1234567890ABCDEF
data.merchantIdString商戶號MCH_20240101_ABC123
data.merchantOrderIdString商戶訂單號ORDER_2024010112345678
data.statusString訂單狀態(見下方狀態說明)SUCCEEDED
data.orderAmountObject訂單金額{"value": "100.50", "currency": "USDC"}
data.cryptoPaymentAmountObject用戶應付加密金額(含手續費等){"value": "101.00", "currency": "USDC"}
data.cryptoPaidAmountObject用戶實際支付金額(僅支付成功後有值){"value": "101.00", "currency": "USDC"}
data.depositAddressString收款地址TYdRLmP9kN4oY3hZ8xT6wQ2vS5uW7aV1b
data.networkString區塊鏈網絡代碼tron
data.networkDisplayNameString網絡展示名稱TRON Network
data.cryptoPaymentDetailObject鏈上支付詳情(僅鏈上支付成功後有值)見下方
data.cryptoPaymentDetail.networkString區塊鏈網絡tron
data.cryptoPaymentDetail.cryptoCurrencyString加密貨幣USDC
data.cryptoPaymentDetail.transactionHashString交易哈希0x1234567890abcdef...
data.cryptoPaymentDetail.fromAddressString發送地址TXdQKjYz8f9vN3kYh2xL6mP8sR5wT7uV2a
data.cryptoPaymentDetail.toAddressString收款地址TYdRLmP9kN4oY3hZ8xT6wQ2vS5uW7aV1b
data.cryptoPaymentDetail.amountString交易金額101.00
data.cryptoPaymentDetail.confirmationsInteger當前確認數21
data.cryptoPaymentDetail.requiredConfirmationsInteger需要的確認數21
data.createdAtString(ISO 8601)訂單創建時間(UTC)2024-01-01T12:00:00Z
data.expiresAtString(ISO 8601)訂單過期時間(UTC)2024-01-01T13:00:00Z
data.paidAtString(ISO 8601)訂單支付時間(UTC,僅支付成功後有值)2024-01-01T12:15:30Z

訂單狀態說明

狀態說明是否終態
INIT訂單已創建,等待支付
PROCESSING已檢測到鏈上交易,確認中
SUCCEEDED支付已確認並完成
FAILED支付失敗(金額不足、超時或異常)
CLOSED訂單已關閉(過期或取消)

響應示例

支付成功的訂單:

json
{
  "code": "00000",
  "message": "Success",
  "data": {
    "orderId": "ORD_20240101_1234567890ABCDEF",
    "merchantId": "MCH_20240101_ABC123",
    "merchantOrderId": "ORDER_2024010112345678",
    "status": "SUCCEEDED",
    "orderAmount": {
      "value": "100.50",
      "currency": "USDC"
    },
    "cryptoPaymentAmount": {
      "value": "101.00",
      "currency": "USDC"
    },
    "cryptoPaidAmount": {
      "value": "101.00",
      "currency": "USDC"
    },
    "depositAddress": "TYdRLmP9kN4oY3hZ8xT6wQ2vS5uW7aV1b",
    "network": "tron",
    "networkDisplayName": "TRON Network",
    "cryptoPaymentDetail": {
      "network": "tron",
      "cryptoCurrency": "USDC",
      "transactionHash": "0x1234567890abcdef1234567890abcdef",
      "fromAddress": "TXdQKjYz8f9vN3kYh2xL6mP8sR5wT7uV2a",
      "toAddress": "TYdRLmP9kN4oY3hZ8xT6wQ2vS5uW7aV1b",
      "amount": "101.00",
      "confirmations": 21,
      "requiredConfirmations": 21
    },
    "createdAt": "2024-01-01T12:00:00Z",
    "expiresAt": "2024-01-01T13:00:00Z",
    "paidAt": "2024-01-01T12:15:30Z"
  }
}

Webhook 通知

API Checkout Webhook 通知文檔請參閱 Webhook 通知 頁面。


錯誤碼

錯誤碼代碼值說明解決方案
INVALID_PARAMETER10001請求參數無效根據接口規範檢查所有請求參數
INVALID_AMOUNT10004訂單金額必須大於 0提供有效的正數金額
INVALID_EXPIRES_AT10005過期時間早於當前時間expiresAt 設置為未來時間
INVALID_MERCHANT10007商戶號無效驗證您的商戶號是否正確
UNCONFIGURED_PAYMENT_METHOD10011幣種/網絡組合不支持,或商戶未配置此支付方式調用獲取支付方式確認可用組合
ORDER_ALREADY_EXISTS20001merchantOrderId 已存在更換訂單號,或檢查是否重複提交
ORDER_NOT_FOUND40001訂單不存在驗證訂單號是否正確
API_PERMISSION_DISABLED50010商戶未開通 API Checkout 權限聯繫技術支持開通 API Checkout
SYSTEM_ERROR99999系統內部錯誤稍後重試,或聯繫技術支持

附錄:支持的網絡與幣種

以下為平台支持的幣種/網絡組合。商戶實際可用的支付方式由平台配置決定——請始終通過獲取支付方式確認。

幣種 / 網絡組合

幣種網絡代碼網絡展示名稱
USD1ethEthereum(ERC20)
USD1bscBNB Smart Chain(BEP20)
USDCethEthereum(ERC20)
USDCpolygonPolygon
USDCoptimismOptimism
USDCarbitrumArbitrum One
USDCbscBNB Smart Chain(BEP20)
USDCbaseBase
USDCsolanaSolana
USDTbscBNB Smart Chain(BEP20)
USDTethEthereum(ERC20)
USDTpolygonPolygon
USDTarbitrumArbitrum One
USDToptimismOptimism
USDTsolanaSolana
USDTtronTron(TRC20)

網絡說明

網絡代碼全稱說明
tronTron波場網絡,TRC20 標準。速度快、費用低,推薦用於 USDT
ethEthereum以太坊主網,ERC20 標準。手續費較高,確認時間約 15 分鐘
bscBNB Smart Chain幣安智能鏈,BEP20 標準。手續費低
polygonPolygonPolygon 網絡(原 Matic),以太坊側鏈
arbitrumArbitrum OneArbitrum Layer 2 擴容方案
optimismOptimismOptimism Layer 2 擴容方案
baseBaseCoinbase 推出的 Layer 2 網絡
solanaSolanaSolana 高性能公鏈

最佳實踐

  1. 先獲取支付方式: 創建訂單前,始終調用獲取支付方式接口,避免 UNCONFIGURED_PAYMENT_METHOD 錯誤,同時獲取準確的 UI 展示數據。
  2. 幂等性處理: 每次結賬使用穩定且唯一的 merchantOrderId。用戶重試時複用相同 ID,避免重複創建訂單。
  3. 設置 30 分鐘過期時間: 建議將 expiresAt 設置為創建後 30 分鐘,避免時間過短或過長。
  4. 展示 cryptoPaymentAmount 而非 orderAmount 用戶需要支付 cryptoPaymentAmount 的金額,可能因手續費與 orderAmount 有所不同。
  5. 配置 callbackUrl 強烈建議配置,否則需要主動輪詢才能檢測到支付完成。
  6. 輪詢作為備選: 如未收到 Webhook,每 5–10 秒輪詢一次查詢 Checkout 訂單
  7. 幂等處理 Webhook: 使用 acquiringOrderIdmerchantOrderId 去重,同一事件可能多次推送。

相關文檔

Released under the MIT License.