Skip to content

法幣儲值 (入金 / Pay-in) ​

法幣儲值服務允許商戶為終端買家提供法幣購買數位資產(如 USDT)並完成儲值入帳的能力。網關負責聚合承兌商報價、鎖定匯率並生成統一的收銀台網頁地址(payUrl),使用者在收銀台向撮合的承兌商完成法幣匯款後,承兌商確認放行,網關自動將數位資產記入商戶帳戶並通過 Webhook 回調商戶系統。


1. 業務交互時序 ​

mermaid
sequenceDiagram
    autonumber
    actor User as 終端買家
    participant Merchant as 商戶系統
    participant Gateway as SureLink 網關
    actor Trader as 場外承兌商

    User->>Merchant: 1. 發起儲值請求 (購買 100 USDT)
    Merchant->>Gateway: 2. POST /api/v1/orders (建立儲值訂單)
    Gateway-->>Merchant: 3. 返回 orderNo 與收銀台 payUrl
    Merchant-->>User: 4. 引導使用者跳轉或在 WebView 中打開 payUrl
    User->>Gateway: 5. 造訪收銀台,查看承兌商收款銀行卡資訊
    User->>Trader: 6. 使用者通過手機銀行向承兌商法幣匯款
    User->>Gateway: 7. 在收銀台點擊「我已完成付款」
    Trader->>Gateway: 8. 承兌商查帳確認收到法幣並點擊放行
    Gateway->>Gateway: 9. 結算入帳至商戶代幣帳戶
    Gateway->>Merchant: 10. Webhook 異步推送 order.completed
    Merchant-->>User: 11. 商戶業務系統為使用者發放相應權益/額度

2. 建立儲值訂單 ​

POST /api/v1/orders

請求頭 (Headers) ​

請求頭類型是否必填說明
Content-Typestring必填固定 application/json
X-Api-Keystring必填商戶 API Key
X-Timestampstring必填毫秒級時間戳
X-Noncestring必填16-64 位隨機串
X-Signaturestring必填HMAC-SHA256 簽名 hex
Idempotency-Keystring推薦唯一冪等鍵,缺省時自動取 merchantOrderNo

請求體 (Body) ​

欄位類型是否必填約束說明
merchantOrderNostring必填商戶系統唯一訂單號,長度 1 ~ 64 位字元。
directionstring否固定 'DEPOSIT'(入金/儲值),預設 'DEPOSIT'。
pairstring否交易對,目前固定為 'USDT/CNY'。
assetSymbolstring否資產代幣符號,目前固定為 'USDT'。
assetAmountstring選填*欲購買的數位資產數量(正數,最多 6 位小數,如 "100.000000")。
fiatCurrencystring否法幣幣種,目前固定為 'CNY'。
fiatAmountstring選填*欲支付的法幣金額(正數,必須嚴格 2 位小數,如 "725.50")。
metadataobject否商戶自訂透傳鍵值對物件(Record<string, string>)。

金額參數說明

assetAmount 與 fiatAmount 二者必填其一:

  • 若傳入 assetAmount,網關將根據當前鎖定匯率即時換算使用者需支付的 fiatAmount。
  • 若傳入 fiatAmount,網關將根據匯率自動計算最終到帳的 assetAmount。

請求範例 ​

bash
curl -X POST "https://api-sandbox.surelink.io/api/v1/orders" \
  -H "Content-Type: application/json" \
  -H "X-Api-Key: mch_key_your_api_key" \
  -H "X-Timestamp: 1715000000000" \
  -H "X-Nonce: 9f8e7d6c5b4a392817263544a1b2c3d4" \
  -H "X-Signature: c8b9...f01" \
  -H "Idempotency-Key: MCH_PAYIN_20261011_001" \
  -d '{
    "merchantOrderNo": "MCH_PAYIN_20261011_001",
    "assetAmount": "100.000000",
    "pair": "USDT/CNY",
    "metadata": {
      "userId": "user_8848"
    }
  }'
typescript
import { sendSignedRequest } from './signer';

const response = await sendSignedRequest({
  apiKey: 'mch_key_...',
  apiSecret: 'sec_...',
  method: 'POST',
  url: 'https://api-sandbox.surelink.io/api/v1/orders',
  body: {
    merchantOrderNo: 'MCH_PAYIN_20261011_001',
    assetAmount: '100.000000',
    pair: 'USDT/CNY'
  }
});

回應說明 (Response) ​

  • HTTP 狀態碼:201 Created
json
{
  "orderId": "698c56fa-b0f1-460d-8302-39c09c916781",
  "orderNo": "ORD20261011000001",
  "status": "PENDING_PAYMENT",
  "assetAmount": "100.000000",
  "fiatAmount": "725.50",
  "fiatCurrency": "CNY",
  "usdAmount": "100.00",
  "usdFeeAmount": "0.50",
  "feeBps": 50,
  "expiresAt": "2026-10-11T08:50:00.000Z",
  "payUrl": "https://pay.surelink.io/orders/ORD20261011000001",
  "pricingSnapshot": {
    "fxRate": "7.2550",
    "fiatCurrency": "CNY",
    "fiatAmount": "725.50",
    "feeAmount": "0.50",
    "quotedAt": "2026-10-11T08:35:00.000Z"
  }
}

回應核心欄位 ​

欄位類型說明
orderIdstring網關系統內部唯一 UUID
orderNostring網關業務訂單號(以 ORD 開頭,全域唯一)
statusstring初始狀態(通常為 PENDING_PAYMENT 或 PENDING_MATCH)
assetAmountstring最終入帳代幣數量
fiatAmountstring終端使用者需支付的法幣金額 (CNY)
expiresAtstring訂單支付有效截止時間 (ISO 8601),超時未付款自動取消
payUrlstring收銀台連結。商戶應將買家重定向至此連結或在客戶端內嵌 WebView 展示
pricingSnapshotobject鎖定價格與匯率快照詳情

3. 分頁查詢儲值訂單列表 ​

GET /api/v1/orders

商戶可透過本接口批量分頁拉取自身建立的儲值訂單記錄,支援按平台單號、商戶單號、訂單狀態以及時間範圍多維度組合檢索。

請求頭 (Headers) ​

攜帶標準 HMAC 鑑權請求頭(X-Api-Key、X-Timestamp、X-Nonce、X-Signature)。

Query 參數 ​

參數名類型是否必填預設值描述
pagenumber否1當前頁碼,從 1 開始
pageSizenumber否20每頁數量,最大 100
orderNostring否-按平台業務訂單號精準篩選(如 ORD20261011000001)
merchantOrderNostring否-按商戶外部訂單號精準篩選(如 MCH_PAYIN_20261011_001)
statusstring否-訂單狀態篩選,多個狀態可用逗號分隔(如 COMPLETED 或 PENDING_PAYMENT,PAYMENT_SUBMITTED)
directionstring否DEPOSIT訂單方向,查詢入金儲值固定或預設為 DEPOSIT
fromstring否-建立時間起始範圍 (ISO 8601,如 2026-10-01T00:00:00.000Z)
tostring否-建立時間截止範圍 (ISO 8601,如 2026-10-11T23:59:59.000Z)

請求範例 ​

bash
curl -X GET "https://api-sandbox.surelink.io/api/v1/orders?page=1&pageSize=20&status=COMPLETED" \
  -H "X-Api-Key: mch_key_your_api_key" \
  -H "X-Timestamp: 1715000000000" \
  -H "X-Nonce: 9f8e7d6c5b4a392817263544a1b2c3d4" \
  -H "X-Signature: c8b9...f01"
typescript
import { sendSignedRequest } from './signer';

const result = await sendSignedRequest({
  apiKey: 'mch_key_...',
  apiSecret: 'sec_...',
  method: 'GET',
  url: 'https://api-sandbox.surelink.io/api/v1/orders?page=1&pageSize=20&status=COMPLETED'
});
console.log('總訂單數:', result.total);
console.log('訂單列表:', result.items);

回應說明 (Response) ​

  • HTTP 狀態碼:200 OK
json
{
  "items": [
    {
      "id": "698c56fa-b0f1-460d-8302-39c09c916781",
      "orderNo": "ORD20261011000001",
      "merchantOrderNo": "MCH_PAYIN_20261011_001",
      "merchantId": "mch_12345",
      "traderId": "tra_67890",
      "direction": "DEPOSIT",
      "status": "COMPLETED",
      "pair": "USDT/CNY",
      "assetSymbol": "USDT",
      "assetAmount": "100.000000",
      "fiatCurrency": "CNY",
      "fiatAmount": "725.50",
      "fxRate": "7.2550",
      "usdAmount": "100.00",
      "usdFeeAmount": "0.50",
      "paymentSubmittedAt": "2026-10-11T08:38:12.000Z",
      "completedAt": "2026-10-11T08:40:05.000Z",
      "createdAt": "2026-10-11T08:35:00.000Z",
      "updatedAt": "2026-10-11T08:40:05.000Z"
    }
  ],
  "page": 1,
  "pageSize": 20,
  "total": 1
}

4. 查詢單筆儲值訂單詳情 ​

GET /api/v1/orders/:orderNo

支援按 平台業務訂單號(orderNo) 或 商戶外部訂單號(merchantOrderNo) 查詢單筆儲值訂單的狀態與詳情。

路由參數 ​

  • orderNo (string): 平台的訂單號(如 ORD20261011000001)或商戶自訂單號(如 MCH_PAYIN_20261011_001)。

回應說明 (Response) ​

  • HTTP 狀態碼:200 OK
json
{
  "id": "698c56fa-b0f1-460d-8302-39c09c916781",
  "orderNo": "ORD20261011000001",
  "merchantOrderNo": "MCH_PAYIN_20261011_001",
  "merchantId": "mch_12345",
  "traderId": "tra_67890",
  "direction": "DEPOSIT",
  "status": "COMPLETED",
  "pair": "USDT/CNY",
  "assetSymbol": "USDT",
  "assetAmount": "100.000000",
  "fiatCurrency": "CNY",
  "fiatAmount": "725.50",
  "fxRate": "7.2550",
  "usdAmount": "100.00",
  "usdFeeAmount": "0.50",
  "paymentSubmittedAt": "2026-10-11T08:38:12.000Z",
  "completedAt": "2026-10-11T08:40:05.000Z",
  "disputeReason": null,
  "chainTxKey": null,
  "source": "API",
  "createdAt": "2026-10-11T08:35:00.000Z",
  "updatedAt": "2026-10-11T08:40:05.000Z"
}

租戶安全隔離

若嘗試查詢屬於其他商戶的訂單,系統統一返回 404 Not Found (ORDER_NOT_FOUND),杜絕訂單號撞單列舉探測。


5. 儲值訂單狀態機全生命週期 ​

狀態代碼狀態名稱說明是否終態
PENDING_MATCH待匹配承兌商訂單已建立,網關正在撮合最優承兌商分配收款卡否
PENDING_PAYMENT待買家支付承兌商已鎖定,買家可在收銀台查看收款卡並轉帳否
PAYMENT_SUBMITTED買家已付款買家在收銀台點擊「我已付款」,等待承兌商查帳核驗否
PENDING_RELEASE待放行承兌商確認收到法幣,進入代幣解凍與劃轉階段否
SETTLING結算中系統正在執行帳本變更與出入金分帳否
COMPLETED交易成功代幣已劃轉至商戶帳戶,終態,觸發 Webhook是
CANCELLED訂單取消超過支付時限未付款或使用者自主取消,終態是
DISPUTED爭議中承兌商未收到款或金額不符發起申訴,客服介入處理否
FAILED交易失敗結算失敗或仲裁撤銷,終態是