基于 x402 协议的 AI Agent HTTP 原生微支付方案与实战
- 作者

- 姓名
- Nino
- 职业
- Senior Tech Editor
当由 DeepSeek-V3、Claude 3.5 Sonnet 或 OpenAI o3 驱动的自主 AI Agent(人工智能智能体)从简单的文本生成器蜕变为能够在互联网上自我决策、调用 API 和执行任务的独立经济个体时,传统的支付基础设施就成为了最严峻的瓶颈。
在构建需要进行网络爬虫、动态数据检索或即用即付(Pay-as-you-go)任务的自主 Agent 架构时,传统的支付系统(如信用卡、Stripe 结算或基于 OAuth 的用户登录界面)完全失效。这些传统方案依赖于人类交互、网页表单、身份验证(KYC)以及按月订阅的固定付费模式。即便是开发者广泛使用的 API Key 模式(如通过 n1n.ai 统一采购的 API 服务),也需要前期的人工开户、预充值和双边信任。
如果一个自主 Agent 正在网络上自由探索,动态发现了一个未曾预注册的第三方服务,并希望以 0.005 美元的成本购买一次性的数据计算服务,传统基础设施根本无法支持。x402 协议正是为了解决这一痛点而生的架构模式。它重新激活了 HTTP 标准中长期保留的 HTTP 402 Payment Required(需要付款)状态码,结合超低手续费的 Layer-2 (L2) 区块链(如 Base)以及稳定币(如 USDC),在标准 HTTP 标头中实现了机器与机器(Machine-to-Machine)之间无缝的微支付握手。
机器间商业交易的架构瓶颈
为了理解 x402 协议的必要性,我们需要对比人类用户与自主 Agent 在获取 API 资源时的交易逻辑差异:
| 功能特性 | 传统支付 (Stripe / OAuth) | 静态 API Key | x402 协议 |
|---|---|---|---|
| 付款人身份 | 人类用户 (信用卡 / 身份认证) | 预注册的开发者 | 密码学钱包地址 |
| 信任模型 | 高信任、需要审核账户 | 高信任、预充值资金 | 零信任、密码学验证 |
| 支付粒度 | 按月订阅 / 5 美元起充 | 预扣费账户余额 | 原子级单次请求 (< 0.001 美元) |
| 人工干预 | 必须 (验证码、网页支付) | 必须 (手动申请 Key / 充值) | 完全无需 (100% 自动化) |
| 结算速度 | T+2 天 | 平台内部账本延迟扣款 | 链上实时终局性 (< 2 秒) |
当 AI Agent 利用 n1n.ai 提供的高性能 API 聚合服务处理复杂推理时,它可以在代码逻辑中实时计算是否值得为了获取某项外部数据而支付微量的费用。传统的按月付费或预充值模式完全无法满足这种程序化、精细化调用的需求。
x402 协议的握手工作流
x402 协议的交互逻辑沿用了标准 HTTP 挑战-响应(Challenge-Response)设计规范,类似于 HTTP Digest 或 Bearer 身份验证模式:
┌──────────┐ GET /api/resource ┌──────────┐
│ │──────────────────────────────────────────────────>│ │
│ │ 402 Payment Required │ │
│ │ X-402-Payment-To: 0xAddress... │ │
│ │ X-402-Amount: 10000 (0.01 USDC) │ │
│ Agent │ X-402-Token: 0x833... (USDC) │ Service │
│ (客户端) │ X-402-Chain-Id: 8453 (Base) │ Provider │
│ │ X-402-Invoice-Id: uuid-123 │ (服务端) │
│ │<──────────────────────────────────────────────────│ │
│ │ │ │
│ │ ─── 执行 L2 链上转账 (Base) ─── │ │
│ │ │ │
│ │ GET /api/resource │ │
│ │ X-402-Payment-Proof: 0xTxHash... │ │
│ │ X-402-Invoice-Id: uuid-123 │ │
│ │──────────────────────────────────────────────────>│ │
│ │ 200 OK + 返回资源数据 │ │
│ │<──────────────────────────────────────────────────│ │
└──────────┘ └──────────┘
服务发现与挑战 (Discovery & Challenge):AI Agent 发起标准的 HTTP GET 或 POST 请求。服务端检测到请求头中未附带有效的支付凭证,拦截请求并返回
402 Payment Required状态码。同时在响应头中包含机器可读的支付账单信息:X-402-Payment-To:收款方的 Web3 钱包地址。X-402-Amount:所需代币的基础单位数量(例如10000代表 0.01 USDC)。X-402-Token:ERC-20 代币合约地址(如 Base 链上的原生 USDC)。X-402-Chain-Id:EVM 链的网络 ID(8453代表 Base 主网)。X-402-Invoice-Id:该笔交易的唯一凭证标识符 / UUID。
清算结算 (Settlement):Agent 解析 HTTP 响应头,核对费用是否符合自身设定的预算策略,确认无误后通过 L2 区块链向指定地址发起代币转账。
兑验与验证 (Redemption & Verification):Agent 重新发起最初的 HTTP 请求,并将区块链交易哈希写入
X-402-Payment-Proof标头。服务端收到请求后在链上实时校验该交易(核对接收方、转账金额、代币类型及账单标识),校验通过后返回200 OK及目标资源。
完整 TypeScript 实战代码实现
下面是一个工业级的 TypeScript 实战示例,包含客户端 Agent 与服务端 Service Provider 的完整代码。服务端基于 Express 框架,链上交互基于高性能 Web3 库 viem。
1. 自主 AI Agent(客户端实现)
Agent 封装了一个拦截器,能够自动捕获 402 响应、完成链上转账并自动重试。
import { createWalletClient, createPublicClient, http, erc20Abi } from 'viem';
import { privateKeyToAccount } from 'viem/accounts';
import { base } from 'viem/chains';
// 配置 Agent 的私钥与账户
const PRIVATE_KEY = process.env.AGENT_PRIVATE_KEY as `0x${string}`;
const account = privateKeyToAccount(PRIVATE_KEY);
const publicClient = createPublicClient({
chain: base,
transport: http('https://mainnet.base.org')
});
const walletClient = createWalletClient({
account,
chain: base,
transport: http('https://mainnet.base.org')
});
export async function fetchWithX402(url: string, options: RequestInit = {}): Promise<Response> {
// 1. 发起第一次常规 HTTP 请求
let response = await fetch(url, options);
// 2. 检查是否触发 402 支付挑战
if (response.status === 402) {
console.log('[x402] 收到 402 Payment Required 响应,解析支付参数...');
const recipient = response.headers.get('X-402-Payment-To') as `0x${string}`;
const amountStr = response.headers.get('X-402-Amount');
const tokenAddress = response.headers.get('X-402-Token') as `0x${string}`;
const invoiceId = response.headers.get('X-402-Invoice-Id');
if (!recipient || !amountStr || !tokenAddress || !invoiceId) {
throw new Error('[x402] 响应头缺失必要的 402 支付信息。');
}
const amount = BigInt(amountStr);
console.log(`[x402] 执行转账: ${amount.toString()} 单位代币至 ${recipient} (账单 ID: ${invoiceId})`);
// 3. 在 Base L2 链上执行 ERC-20 代币转账
const txHash = await walletClient.writeContract({
address: tokenAddress,
abi: erc20Abi,
functionName: 'transfer',
args: [recipient, amount]
});
console.log(`[x402] 交易已提交至链上,Hash: ${txHash}`);
// 4. 等待 1 个区块确认(Base 链通常 < 2 秒)
await publicClient.waitForTransactionReceipt({ hash: txHash });
// 5. 附带支付证明重新发起 HTTP 请求
const retryHeaders = new Headers(options.headers || {});
retryHeaders.set('X-402-Payment-Proof', txHash);
retryHeaders.set('X-402-Invoice-Id', invoiceId);
response = await fetch(url, {
...options,
headers: retryHeaders
});
}
return response;
}
2. 服务端中间件(服务端实现)
服务端通过 Express 中间件对访问授权进行校验。
import express, { Request, Response, NextFunction } from 'express';
import { createPublicClient, http } from 'viem';
import { base } from 'viem/chains';
import crypto from 'crypto';
const app = express();
const PORT = process.env.PORT || 3000;
// 服务端收款配置
const PROVIDER_WALLET = '0xYourWalletAddressHere' as `0x${string}`;
const USDC_BASE_ADDRESS = '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' as `0x${string}`;
const COST_PER_CALL = '10000'; // 0.01 USDC (USDC 精度为 6 位)
const publicClient = createPublicClient({
chain: base,
transport: http('https://mainnet.base.org')
});
// 防重放攻击的高效缓存
const processedInvoices = new Set<string>();
async function x402Middleware(req: Request, res: Response, next: NextFunction) {
const paymentProof = req.header('X-402-Payment-Proof') as `0x${string}` | undefined;
const invoiceId = req.header('X-402-Invoice-Id');
// 场景 1:未提供支付证明,返回 402 状态码及支付 Header
if (!paymentProof || !invoiceId) {
const newInvoiceId = crypto.randomUUID();
res.setHeader('X-402-Payment-To', PROVIDER_WALLET);
res.setHeader('X-402-Amount', COST_PER_CALL);
res.setHeader('X-402-Token', USDC_BASE_ADDRESS);
res.setHeader('X-402-Chain-Id', '8453');
res.setHeader('X-402-Invoice-Id', newInvoiceId);
return res.status(402).json({
error: 'Payment Required',
message: '访问此 API 接口需要通过 x402 协议进行微支付。'
});
}
// 场景 2:检查是否重放攻击
if (processedInvoices.has(paymentProof)) {
return res.status(400).json({ error: '该支付证明已被使用,请勿重复提交。' });
}
// 场景 3:链上验证支付证明
try {
const txReceipt = await publicClient.getTransactionReceipt({ hash: paymentProof });
if (!txReceipt || txReceipt.status !== 'success') {
return res.status(402).json({ error: '链上交易未完成或执行失败。' });
}
// 检查日志事件,确保转账合约为 USDC
const transferLogs = txReceipt.logs.filter(
(log) => log.address.toLowerCase() === USDC_BASE_ADDRESS.toLowerCase()
);
if (transferLogs.length === 0) {
return res.status(402).json({ error: '未找到有效的 USDC 转账日志。' });
}
// 标记凭证已使用并放行
processedInvoices.add(paymentProof);
next();
} catch (error) {
console.error('[x402 验证失败]:', error);
return res.status(500).json({ error: '无法在链上验证支付凭证。' });
}
}
// 受保护的受费资源接口
app.get('/api/data', x402Middleware, (req: Request, res: Response) => {
res.json({
status: 'success',
data: '这是由自主 Agent 成功付费后获取的高价值数据。',
timestamp: new Date().toISOString()
});
});
app.listen(PORT, () => console.log(`x402 服务端已启动,监听端口: ${PORT}`));
AI Agent 架构中的 x402 整合实践
在企业级 AI 系统中,Agent 的工作流通常包含模型推理、工具调用与外部资源获取。借助 x402 协议与聚合 API 平台,开发者可以构建出高效、经济的分布式 Agent 系统:
┌─────────────────────────────────────────────────────────────┐
│ 自主 AI Agent 决策核心 │
│ │
│ ┌───────────────────────┐ ┌───────────────────────┐ │
│ │ 推理思考层 │ │ 工具执行层 │ │
│ │ DeepSeek-V3 / Claude │ │ 动态付费网页抓取 │ │
│ │ 通过 [n1n.ai](https://n1n.ai) 接入 │ │ & 按次计费工具 API │ │
│ └───────────┬───────────┘ └───────────┬───────────┘ │
└──────────────┼───────────────────────────────┼──────────────┘
│ │
▼ ▼
高并发大模型推理 API API x402 HTTP 原生微支付
(由 [n1n.ai](https://n1n.ai) 统一接入) (链上直接结算)
- 核心推理层:Agent 通过 n1n.ai 获取稳定的 API 接入,实时调用 DeepSeek-V3 或 Claude 3.5 Sonnet 进行高阶逻辑推理与决策。
- 工具扩展层:当 Agent 发现缺失必要的外部数据时(例如实时行业报告、付费 API 接口),触发 x402 协议完成微支付。
- 自主预算控制:Agent 可在代码中动态设置阈值(如单次 API 费用
< 0.05 USDC才允许自动支付),彻底摆脱人工开卡充值的束缚。
企业级优化建议与 Pro Tips
在生产环境中大规模部署 x402 架构时,推荐关注以下性能与架构优化策略:
1. 离线签名与 Gas 抽象 (ERC-3009 / EIP-712)
如果每次 API 调用都在链上发起原生转账,Agent 仍需要承担额外的 Gas 开销。采用 ERC-3009 (transferWithAuthorization) 规范,Agent 仅需对离线 Message 进行签名,无需消耗 Gas。服务端收集签名后可在后台离线批量结算,实现极度流畅的无感微支付。
2. 乐观验证与 Redis 缓存
在高并发场景下,每次 API 请求都向区块链 RPC 节点查询 getTransactionReceipt 会带来额外延迟(通常在 100ms - 500ms 之间)。建议配置 Redis 缓存防重放标志,或针对拥有良好信用记录的 Agent 钱包采用乐观验证(Optimistic Verification)策略。
3. 大模型基础设施保障
x402 解决了 Agent 在外部生态中的付费问题,而 Agent 自身的决策稳定性则取决于底层 LLM API 的质量。开发者应优先使用 n1n.ai 等高可用 API 聚合平台,确保在调取 OpenAI o3、DeepSeek-V3 或 Claude 3.5 Sonnet 模型时获得低延迟与高并发保障。
Get a free API key at n1n.ai