透過 x402 傳送第一個付費請求

本指南以一個 Solana 請求為例,走完 x402 的完整流程:讀取價格、付款,然後取得附有結算收據的結果。其他 15 條鏈在各自的路徑上以相同方式運作。
您需要一個錢包,其中持有 Solana 上的 USDC,或 Base 上的 USDC 或 EURC;另外還需要一個 x402 用戶端,也就是讀取 402 回應、以您的錢包簽署付款,並附上該付款重新傳送請求的軟體。關於 x402 用戶端,請參閱 x402.org 上的 x402 文件。

1. 傳送請求

不附付款,直接傳送 RPC 請求:
bash
curl -i https://x402.erpc.global/v1/solana-mainnet \
  --header 'Content-Type: application/json' \
  --data '{"jsonrpc":"2.0","id":1,"method":"getSlot"}'
回應為 402 Payment Required。標頭列出方法與價格:
http
HTTP/2 402
x-payment-required: eyJ4NDAyVmVyc2lvbiI6Mi…
x-rpc-methods: getSlot
x-rpc-weight: 1000
x-rpc-price-usd: 0.001
回應本文的 accepts 列出付款選項:此請求可使用的每種穩定幣各一項。amount 以穩定幣的最小單位計,因此 1000 即 0.001 USDC,或 0.001 EURC:
json
{
  "error": { "code": "payment_required", "message": "Payment required", "request_id": "…" },
  "x402Version": 2,
  "accepts": [
    { "scheme": "exact", "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp", "amount": "1000", "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v", … },
    { "scheme": "exact", "network": "eip155:8453", "amount": "1000", "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913", … },
    { "scheme": "exact", "network": "eip155:8453", "amount": "1000", "asset": "0x60a3E35Cc302bFA44Cb288Bc5a4F316Fdb1adb42", … }
  ],
  "pricing": { "methods": ["getSlot"], …, "weight": 1000, "rawWeight": 42, …, "price": "$0.001", … },
  …
}

2. 以 x402 用戶端付款

將 402 回應交給您的 x402 用戶端。用戶端會選擇您的錢包可支付的選項,依該金額簽署一筆付款,並將其編碼為 X-Payment 標頭的值。這筆付款無需 SOL 或 ETH 來支付網路手續費。

3. 附上付款,再次傳送請求

再次傳送相同的請求本文,並將付款放入 X-Payment 標頭:
bash
curl -i https://x402.erpc.global/v1/solana-mainnet \
  --header 'Content-Type: application/json' \
  --header 'X-Payment: <PAYMENT_PAYLOAD>' \
  --data '{"jsonrpc":"2.0","id":1,"method":"getSlot"}'
請勿修改請求本文。價格依請求本文計算,因此若修改後的請求本文價格不同,付款就不再與之相符,請求會收到 price_mismatch。
付款完成驗證與結算後,RPC 結果隨之回傳,結算收據位於 X-Payment-Response 標頭中:
http
HTTP/2 200
x-payment-response: <RECEIPT>
json
{ "jsonrpc": "2.0", "id": 1, "result": … }
一筆付款只能支付一個請求。若再次傳送同一筆付款,會遭到拒絕並回傳 402 payment_invalid 或 409 duplicate_payment,請求也不會再次轉送。

回應

若 x402.erpc.global 在要求付款之前就以錯誤回應請求,該請求不收取任何費用。
狀態碼error.code說明
402payment_required未附付款。回應本文中列出價格與付款選項。
402payment_invalid付款未通過驗證。請簽署新的付款,然後再次傳送請求。
402price_mismatch付款與此請求的 402 回應所提供的任何選項都不符(例如價格不同)。
402payment_amount_too_low金額低於 x402.erpc.global 結算的最低付款額。
402settlement_failed結算被回報為失敗。回應會再次提供付款選項。
409duplicate_payment這筆付款已使用過。
400method_not_supported、invalid_request該路徑不販售此方法,或不接受該請求本文。不收取任何費用。
413batch_too_large批次請求包含超過 100 個呼叫。不收取任何費用。
500configuration_error該路徑目前無法處理請求。不收取任何費用。
503payment_unavailable目前無法提供任何付款選項。不收取任何費用。請在 Retry-After 指定的秒數後重試。
503service_busy同一時間的請求過多。不收取任何費用。請在 Retry-After 指定的秒數後重試。
502settlement_failed結算結果不明:付款可能已經完成,且未附結算收據。在簽署新的付款之前,請先在 Solana 或 Base 上確認您簽署的付款是否已經完成。
502、504upstream_error、upstream_timeout付款已結算,但鏈沒有回應,或未能及時回應。結算收據仍會附上。再次傳送請求需要一筆新的付款。
在 Solana 上,讀取範圍過大的呼叫(例如對大型程式呼叫不帶篩選條件的 getProgramAccounts)會在要求付款之前收到 HTTP 200 與一個 JSON-RPC 錯誤,因此不收取任何費用。

後續步驟