BazaarLinkBazaarLink
เข้าสู่ระบบ
เอกสารAPI ข้อมูลอ้างอิงSDK ข้อมูลอ้างอิงการใช้งาน AgentAI ทักษะ

การชำระเงิน OKX x402: ลงทะเบียน agent และเติมยอด

x402 ให้ไคลเอนต์ชำระคำขอด้วย stablecoin ได้ BazaarLink รับการชำระเงิน x402 ซึ่งชำระผ่าน x402 facilitator ของ OKX บน X Layer เพื่อลงทะเบียนบัญชี agent และเติมยอดคงเหลือที่มีอยู่ หน้านี้อธิบายการทำงานจริงของทั้งสองเส้นทาง

ขั้นตอน 402

ทั้งสองเส้นทางมีสามขั้นตอนเหมือนกัน: ขอ, เซ็นชื่อ, ส่งซ้ำ

  1. ส่งคำขอโดยไม่ชำระเงิน เซิร์ฟเวอร์จะตอบ 402 Payment Required พร้อม JSON ที่มี x402Version, resource และ accepts(network, asset, amount, payTo, maxTimeoutSeconds)
  2. ใช้คีย์กระเป๋าของคุณเซ็นการอนุมัติการชำระเงินสำหรับรายการหนึ่งใน accepts
  3. ส่งคำขอเดิมอีกครั้งพร้อม payload การชำระเงินที่เข้ารหัสแบบ base64 ใน header X-PAYMENT โดยยอมรับชื่อ header payment-signature เป็นชื่อแทนด้วย
อ่านข้อกำหนดจากการตอบกลับ
นำ network, asset และ amount จากการตอบกลับ 402 อย่ากำหนดค่าตายตัว amount อยู่ในหน่วยย่อยที่สุดของ asset(USDT0 มีทศนิยม 6 ตำแหน่ง)ส่ง JSON body เดิมในการขอทั้งสองครั้ง

ลงทะเบียน agent

POSThttps://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}'
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" }
    }
  ]
}

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 หรือคีย์กระเป๋าใดก็ได้ คีย์ส่วนตัวอยู่ในเครื่องของคุณ มีเพียงการอนุมัติที่เซ็นแล้วเท่านั้นที่ถูกส่ง

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 });

// 1. Ask without paying. The 402 body lists what the server accepts.
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();

// 2. Sign the payment authorization with your own wallet key.
const privateKey = readSecret("payer-private-key") as `0x${string}`; // from your own secret store, never from source code
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");

// 3. Send the same request again with the signed payment.
const res = await fetch(URL, { method: "POST", headers: { ...HEADERS, "x-payment": xPayment }, body: BODY });
const account = await res.json(); // 201: api_key, credits, claim_token, payment ...
console.log(res.status, account.credits_usd);

เก็บคีย์ส่วนตัวของกระเป๋าไว้ใน environment variable หรือ secret store อย่าใส่ไว้ในซอร์สโค้ด

การตอบกลับการลงทะเบียน

การลงทะเบียนสำเร็จจะคืนค่า 201 พร้อมฟิลด์เหล่านี้ API key จะแสดงที่นี่เพียงครั้งเดียว จึงควรบันทึกทันที

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
  }
}
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

เติมยอดคงเหลือเดิม

POSThttps://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
}
// Same three steps against /api/x402/topup; only the URL, body and auth header change.
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 });
// ...reuse the challenge / sign / resend code from the registration example.
// 200 -> { "status": "credited", "balance": 12.5, "txHash": "0x...", "paidUsd": 1.1, "creditedUsd": 1, "serviceFeeUsd": 0.1 }

อ่านขีดจำกัดปัจจุบัน

GEThttps://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

HTTP
รหัส
ความหมาย
400bad_request
Body ไม่ถูกต้อง: ชนิดผิด ไม่มี 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_disabled
x402 ปิดอยู่หรือยังไม่ได้ตั้งค่า
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

Support
Support
Hi! How can we help you?
Send a message and we'll get back to you soon.