用 HTTP 402 幫 API 收錢
x402 讓 API 直接回「402 Payment Required」,呼叫方用錢包簽一筆 USDC 授權後重送請求,就拿得到資料。沒有帳號、沒有 API key、沒有月結帳單。
流程
- 呼叫
GET /api/fortune,伺服器回402,PAYMENT-REQUIREDheader 寫明要付多少、付給誰。 - 呼叫方用錢包簽一筆 EIP-3009 授權(不用付 gas),放進
PAYMENT-SIGNATUREheader 重送。 - 伺服器交給 facilitator 驗證並上鏈結算,成功後回傳資料,結算結果放在
PAYMENT-RESPONSEheader。
自己試
「用錢包付費開啟」會跳出 x402 的付款頁,需要 MetaMask 之類的錢包,以及 Base Sepolia 的測試 USDC(到 faucet.circle.com 免費領)。
用程式付費
import { wrapFetchWithPaymentFromConfig } from "@x402/fetch";
import { ExactEvmScheme } from "@x402/evm/exact/client";
import { privateKeyToAccount } from "viem/accounts";
const account = privateKeyToAccount(process.env.PAYER_PRIVATE_KEY);
const pay = wrapFetchWithPaymentFromConfig(fetch, {
schemes: [{ network: "eip155:84532", client: new ExactEvmScheme(account) }],
});
const res = await pay("https://x402.yth.tw/api/fortune");
console.log(await res.json());
這支 API 的設定
價格:$0.001(USDC)
網路:eip155:84532(Base Sepolia)
收款地址:0x205e40C9B3585A8326C35DAF643220Abd8231961