การชำระเงิน OKX x402: ลงทะเบียน agent และเติมยอด x402 ให้ไคลเอนต์ชำระคำขอด้วย stablecoin ได้ BazaarLink รับการชำระเงิน x402 ซึ่งชำระผ่าน x402 facilitator ของ OKX บน X Layer เพื่อลงทะเบียนบัญชี agent และเติมยอดคงเหลือที่มีอยู่ หน้านี้อธิบายการทำงานจริงของทั้งสองเส้นทาง
ขั้นตอน 402 ทั้งสองเส้นทางมีสามขั้นตอนเหมือนกัน: ขอ, เซ็นชื่อ, ส่งซ้ำ
ส่งคำขอโดยไม่ชำระเงิน เซิร์ฟเวอร์จะตอบ 402 Payment Required พร้อม JSON ที่มี x402Version, resource และ accepts(network, asset, amount, payTo, maxTimeoutSeconds) ใช้คีย์กระเป๋าของคุณเซ็นการอนุมัติการชำระเงินสำหรับรายการหนึ่งใน accepts ส่งคำขอเดิมอีกครั้งพร้อม payload การชำระเงินที่เข้ารหัสแบบ base64 ใน header X-PAYMENT โดยยอมรับชื่อ header payment-signature เป็นชื่อแทนด้วย อ่านข้อกำหนดจากการตอบกลับ
นำ network, asset และ amount จากการตอบกลับ 402 อย่ากำหนดค่าตายตัว amount อยู่ในหน่วยย่อยที่สุดของ asset(USDT0 มีทศนิยม 6 ตำแหน่ง)ส่ง JSON body เดิมในการขอทั้งสองครั้ง
ลงทะเบียน agent POST https://bazaarlink.ai/api/v1/agents/register/x402
POST /api/v1/agents/register/x402 สร้างบัญชี agent, API key และยอดเริ่มต้นในการขอแบบชำระเงินครั้งเดียว ไม่ต้องใช้ API key และไม่ต้องเข้าสู่ระบบ
Request body nameจำเป็น
string
ชื่อ agent ยาว 1 ถึง 100 ตัวอักษร
description
string
คำอธิบายเพิ่มเติม สูงสุด 4000 ตัวอักษร
amountUsdจำเป็น
number
จำนวนเงินที่ต้องชำระเป็นดอลลาร์สหรัฐ ต้องเป็นจำนวนบวก ก่อนสร้าง 402 จำนวนนี้จะถูกจำกัดให้อยู่ในช่วงที่อนุญาต(ปัจจุบัน $1 ถึง $50)จึงควรอ่าน amount จากการตอบกลับ
ฟิลด์ที่ไม่รู้จักจะถูกปฏิเสธด้วย 400 bad_request
1. ขอโดยไม่ชำระเงิน การตอบกลับเป็น 402 พร้อมข้อกำหนดการชำระเงิน ยังไม่มีการสร้างสิ่งใด
curl -i -X POST https://bazaarlink.ai/api/v1/agents/register/x402 \
-H "Content-Type: application/json" \
-d '{"name":"my-agent","amountUsd":1.1}' 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
HTTP/1.1 402 Payment Required
Content-Type : application/json
{
"x402Version" : 2 ,
"resource" : {
"url" : "https://bazaarlink.ai/api/v1/agents/register/x402" ,
"description" : "BazaarLink paid agent registration" ,
"mimeType" : "application/json"
} ,
"accepts" : [
{
"scheme" : "exact" ,
"network" : "eip155:196" ,
"payTo" : "0xPAY_TO_ADDRESS" ,
"asset" : "0xASSET_CONTRACT" ,
"amount" : "1100000" ,
"maxTimeoutSeconds" : 300 ,
"extra" : { "name" : "USD₮0" , "version" : "1" }
}
]
}
⌄ ดูทั้งหมด 22 บรรทัด2. เซ็นชื่อและส่งซ้ำ เซ็นชื่อด้วยกระเป๋าของคุณ แล้วส่งคำขอเดิมพร้อม header X-PAYMENT คำสั่ง curl แสดงคำขอ ส่วนตัวอย่าง TypeScript ด้านล่างสร้างค่า header ให้
curl -i -X POST https://bazaarlink.ai/api/v1/agents/register/x402 \
-H "Content-Type: application/json" \
-H "X-PAYMENT: <base64 payment payload>" \
-d '{"name":"my-agent","amountUsd":1.1}' ตัวอย่าง TypeScript ตัวอย่างนี้ใช้แพ็กเกจไคลเอนต์ @okxweb3/x402 และ viem โดยสามารถเซ็นชื่อด้วย OKX Wallet หรือคีย์กระเป๋าใดก็ได้ คีย์ส่วนตัวอยู่ในเครื่องของคุณ มีเพียงการอนุมัติที่เซ็นแล้วเท่านั้นที่ถูกส่ง
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import { x402Client } from "@okxweb3/x402-core/client" ;
import type { Network } from "@okxweb3/x402-core/types" ;
import { toClientEvmSigner } from "@okxweb3/x402-evm" ;
import { ExactEvmScheme } from "@okxweb3/x402-evm/exact/client" ;
import { privateKeyToAccount } from "viem/accounts" ;
const URL = "https://bazaarlink.ai/api/v1/agents/register/x402" ;
const HEADERS = { "content-type" : "application/json" };
const BODY = JSON .stringify ({ name : "my-agent" , amountUsd : 1.1 });
const challenge = await fetch (URL , { method : "POST" , headers : HEADERS , body : BODY });
if (challenge.status !== 402 ) throw new Error ("unexpected status " + challenge.status );
const paymentRequired = await challenge.json ();
const privateKey = readSecret ("payer-private-key" ) as `0x${string } ` ;
const signer = toClientEvmSigner (privateKeyToAccount (privateKey));
const client = new x402Client ().register (
paymentRequired.accepts [0 ].network as Network ,
new ExactEvmScheme (signer),
);
const payload = await client.createPaymentPayload (paymentRequired);
const xPayment = Buffer .from (JSON .stringify (payload), "utf8" ).toString ("base64" );
const res = await fetch (URL , { method : "POST" , headers : { ...HEADERS , "x-payment" : xPayment }, body : BODY });
const account = await res.json ();
console .log (res.status , account.credits_usd );
⌄ ดูทั้งหมด 29 บรรทัดเก็บคีย์ส่วนตัวของกระเป๋าไว้ใน environment variable หรือ secret store อย่าใส่ไว้ในซอร์สโค้ด
การตอบกลับการลงทะเบียน การลงทะเบียนสำเร็จจะคืนค่า 201 พร้อมฟิลด์เหล่านี้ API key จะแสดงที่นี่เพียงครั้งเดียว จึงควรบันทึกทันที
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
HTTP/1.1 201 Created
Content-Type : application/json
{
"api_key" : "sk-bl-..." ,
"credits" : 1,
"credits_usd" : "$1 .0000" ,
"claim_token" : "..." ,
"claim_expires" : "2026-10-08T00:00:00.000Z" ,
"upgrade_url" : "https://bazaarlink.ai/claim?token=..." ,
"referral_code" : "..." ,
"free_model" : "auto:free" ,
"message" : "..." ,
"referral_message" : "..." ,
"base_url" : "https://bazaarlink.ai/api/v1" ,
"docs" : "https://bazaarlink.ai/llms.txt" ,
"payment" : {
"txHash" : "0xTX_HASH" ,
"network" : "eip155:196" ,
"amountUsd" : 1.1,
"paidUsd" : 1.1,
"creditedUsd" : 1,
"serviceFeeUsd" : 0.1
}
}
⌄ ดูทั้งหมด 25 บรรทัดapi_key
string
API key ใหม่
credits
number
ยอดเงินที่เพิ่มเข้าบัญชี หน่วยดอลลาร์สหรัฐ: จำนวนที่จ่ายหักค่าธรรมเนียมเติมเงินของแพลตฟอร์ม
credits_usd
string
ยอดเดียวกันในรูปแบบสตริง
claim_token
string
โทเค็นที่บุคคลใช้รับบัญชีได้
claim_expires
string
กำหนดเวลารับบัญชีในรูปแบบ ISO 8601
upgrade_url
string
ลิงก์รับบัญชีสำหรับบุคคล ลงท้ายด้วย /claim?token=
referral_code
string
รหัสแนะนำของบัญชี agent ใหม่
free_model
string
เป็น auto:free เสมอ ซึ่งเป็นโมเดลที่ใช้ได้โดยไม่มียอดคงเหลือ
message
string
ข้อความสำเร็จรูปที่ agent แสดงให้เจ้าของได้
referral_message
string
ข้อความเกี่ยวกับรหัสแนะนำ
base_url
string
API base URL ที่ใช้กับ key ใหม่
docs
string
จุดเริ่มต้นเอกสารที่อ่านได้ด้วยเครื่อง
payment
object
ออบเจ็กต์ที่มี txHash, network และ amountUsd ของการชำระเงินที่เสร็จสิ้น พร้อม paidUsd, creditedUsd และ serviceFeeUsd
เติมยอดคงเหลือเดิม POST https://bazaarlink.ai/api/x402/topup
POST /api/x402/topup เติมยอดให้บัญชีที่เป็นเจ้าของ API key หรือ session ที่เข้าสู่ระบบ ขั้นตอน 402 เหมือนเดิมและ body มีเพียง amountUsd
ยืนยันตัวตนด้วย Authorization: Bearer และ API key ของคุณ หรือใช้ browser session ที่เข้าสู่ระบบ
curl -i -X POST https://bazaarlink.ai/api/x402/topup \
-H "Authorization: Bearer $BAZAARLINK_API_KEY " \
-H "Content-Type: application/json" \
-H "X-PAYMENT: <base64 payment payload>" \
-d '{"amountUsd":1.1}' เติมเงินสำเร็จจะได้ 200 พร้อม status เป็น credited ยอดเงินใหม่เป็นดอลลาร์สหรัฐ txHash และ paidUsd, creditedUsd, serviceFeeUsd (จำนวนที่จ่าย จำนวนที่เข้าบัญชี และค่าธรรมเนียมเติมเงินของแพลตฟอร์ม)
HTTP/1.1 200 OK
Content-Type : application/json
{
"status" : "credited" ,
"balance" : 12.5 ,
"txHash" : "0xTX_HASH" ,
"paidUsd" : 1.1 ,
"creditedUsd" : 1 ,
"serviceFeeUsd" : 0.1
}
⌄ ดูทั้งหมด 11 บรรทัด
const URL = "https://bazaarlink.ai/api/x402/topup" ;
const HEADERS = {
"content-type" : "application/json" ,
authorization : "Bearer " + process.env .BAZAARLINK_API_KEY ,
};
const BODY = JSON .stringify ({ amountUsd : 1.1 });
⌄ ดูทั้งหมด 9 บรรทัดอ่านขีดจำกัดปัจจุบัน GET https://bazaarlink.ai/api/x402/topup
GET /api/x402/topup คืนค่า minUsd, maxUsd และ network โดยไม่ต้องยืนยันตัวตน
curl https://bazaarlink.ai/api/x402/topup{ "minUsd" : 1 , "maxUsd" : 50 , "network" : "eip155:196" } การชำระเงินซ้ำและการส่งซ้ำ การอนุมัติที่เซ็นแล้วใช้ได้ครั้งเดียว เซิร์ฟเวอร์ตรวจพบการชำระเงินซ้ำก่อนติดต่อเครือข่ายการชำระเงิน ดังนั้นการลองใหม่จะไม่ทำให้คุณจ่ายสองครั้ง
เติมยอด: การส่งการชำระเงินที่บันทึกยอดแล้วซ้ำจะคืนค่า 200 โดยมี status เป็น already_credited
ลงทะเบียน: ภายใน 15 นาที การชำระเงินที่เซ็นเดียวกันจะคืนการตอบกลับ 201 เดิมพร้อม API key จึงลองใหม่ได้อย่างปลอดภัยเมื่อเครือข่ายขัดข้อง หลังจากนั้นจะคืนค่า 200 โดยมี status เป็น already_registered และ txHash ของการชำระเงิน และจะไม่แสดง API key อีก
การตอบกลับข้อผิดพลาด เส้นทาง x402 คืนข้อผิดพลาดเป็น { "error": { "message", "code" } } มีการตอบกลับที่ต่างกันสองแบบ: 410 ใช้ { "error", "code" } และ 429 ใช้ { "error" } พร้อม header Retry-After
400bad_requestBody ไม่ถูกต้อง: ชนิดผิด ไม่มี name หรือมีฟิลด์ที่ไม่รู้จัก
400topup_unavailableบัญชีนี้เติมยอดไม่ได้
401unauthenticatedเฉพาะการเติมยอด: ไม่มี API key หรือ session ที่ถูกต้อง
402(payment requirements body)ยังไม่มีการชำระเงินที่ใช้ได้ Body มีข้อกำหนด ให้เซ็นชื่อแล้วส่งซ้ำ จะคืนค่านี้เมื่อการชำระไม่ตรงข้อกำหนดหรือการตรวจสอบไม่สำเร็จด้วย
402payment_amount_too_lowจำนวนที่ชำระเสร็จน้อยกว่าจำนวนที่ขอ
403geo_blockedไม่สามารถใช้ x402 จากภูมิภาคของคุณ
410agent_register_discontinuedปิดการลงทะเบียน agent อยู่
429(Retry-After header)มีการลงทะเบียนจากแหล่งเครือข่ายเดียวกันมากเกินไป รอตามจำนวนวินาทีใน Retry-After
502facilitator_errorตรวจสอบหรือดำเนินการชำระเงินไม่สำเร็จ ลองใหม่ภายหลัง
502settlement_errorได้รับการชำระเงินแล้วแต่บันทึกยอดไม่ได้ ส่งการชำระเงินเดิมซ้ำแทนการเซ็นรายการใหม่
502registration_errorได้รับการชำระเงินแล้วแต่สร้างบัญชีไม่ได้ ส่งการชำระเงินเดิมซ้ำแทนการเซ็นรายการใหม่
503disabled / runtime_disabledx402 ปิดอยู่หรือยังไม่ได้ตั้งค่า
503asset_unavailable / dedup_unavailableไม่สามารถติดต่อส่วนประกอบที่ต้องพึ่งพา(การตั้งค่า asset การตรวจซ้ำ หรือการตรวจเติมยอด)ลองใหม่ภายหลัง
503signup_disabled / agent_register_unavailableการลงทะเบียนถูกปิดชั่วคราวหรือใช้งานไม่ได้
ส่งมอบบัญชีให้บุคคล ส่ง upgrade_url จากการตอบกลับให้เจ้าของบัญชี เมื่อเขาเข้าสู่ระบบและรับบัญชีแล้ว API key และยอดคงเหลือจะย้ายไปยังบัญชีของเขา ดำเนินการก่อน claim_expires
https://bazaarlink.ai/claim?token=<claim_token>เครือข่ายและ asset ตอนนี้เป็น USDT0 บน X Layer ชำระผ่าน x402 facilitator ของ OKX มีค่าธรรมเนียมเติมเงินของแพลตฟอร์ม ยอดเงินที่ได้รับจึงน้อยกว่าจำนวนที่จ่าย (ดูหน้าราคา) การชำระเงินเสร็จสิ้นบนเชนและย้อนกลับไม่ได้ ตรวจสอบจำนวนเงินและเครือข่ายก่อนเซ็นชื่อ
ดูภาพรวมได้ที่หน้าการชำระเงินของ agent ด้วย x402