X402:静态博客货币化新尝试
速览
X402是一个针对静态博客的货币化练习项目。它旨在帮助博主在不依赖传统广告的情况下实现收益。该项目可能提供技术方案或思路。
AI 深度解读
背景
Cloudflare 近日宣布推出 Monetization Gateway(变现网关)服务。该服务旨在降低内容变现的准入门槛,允许创作者对单次访问、单个 API 调用等细粒度资源设置极低的价格(如 1 美分)。这一机制有可能改变互联网当前的广告经济模式,让用户直接为内容付费,而非依赖第三方广告商。
在 Monetization Gateway 尚处于封闭测试阶段(需加入 Waitlist)的情况下,本文作者决定自行实现一套兼容该协议的开源方案 x402,并将其部署在自己的静态博客上,作为一次技术探索和变现实验。
核心内容
计划与架构
作者的目标是实现一个静态博客的按次付费访问功能。整个系统需要三个组成部分:
- 钱包:用于接收用户支付的加密货币(测试网 USDC)。
- Worker:执行支付处理逻辑的云函数(作者选择 Cloudflare Workers,语言为 TypeScript)。
- 付费墙资源:作者博客中的一个笑话 API 端点
/api/joke。
由于无法直接使用 Cloudflare 的托管服务,作者基于开源库 @x402/hono、@x402/evm、@x402/svm 等自行搭建支付中间件。
实现步骤
1. 创建 Hono 应用并配置支付中间件
使用 Hono 框架编写 Worker,引入 paymentMiddleware 和 x402ResourceServer。配置接受两种支付网络:EVM(Base Sepolia 测试网)和 Solana(测试网),价格统一为 0.01 美元(即 10000 最小单位)。
import { Hono } from "hono";
import type { MiddlewareHandler } from "hono";
import { paymentMiddleware, x402ResourceServer } from "@x402/hono";
import { ExactEvmScheme } from "@x402/evm/exact/server";
import { ExactSvmScheme } from "@x402/svm/exact/server";
import { HTTPFacilitatorClient } from "@x402/core/server";
const app = new Hono();
const evmAddress = "0xD040AEACCdFf083C5D4cB221F1533e8719a84F0e";
const svmAddress = "HjexCvNzgxJT3Ni7rb98WF4pQGEX2fN7G6Zh26B19mBc";
const facilitatorClient = new HTTPFacilitatorClient({
url: "https://x402.org/facilitator",
});
let payment: MiddlewareHandler | undefined;
app.use(async (c, next) => {
payment ??= paymentMiddleware(
{
"GET /api/joke": {
accepts: [
{ scheme: "exact", price: "$0.01", network: "eip155:84532", payTo: evmAddress },
{ scheme: "exact", price: "$0.01", network: "solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1", payTo: svmAddress },
],
description: "A premium, hand-picked joke",
mimeType: "application/json",
},
},
new x402ResourceServer(facilitatorClient)
.register("eip155:84532", new ExactEvmScheme())
.register("solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1", new ExactSvmScheme()),
);
return payment(c, next);
});
const jokes = [/*一些预设笑话*/];
app.get("/api/joke", (c) => {
return c.json({ joke: jokes[Math.floor(Math.random() * jokes.length)] });
});
export default app;
2. 配置 Worker 路由
wrangler.jsonc 中指定路由 shtein.me/api/*,并启用 nodejs_compat 标志以支持 Node.js 内置模块。
{
"name": "x402-poc",
"main": "src/index.ts",
"compatibility_date": "2026-07-01",
"compatibility_flags": ["nodejs_compat"],
"env": {
"production": {
"name": "x402-poc",
"routes": [{ "pattern": "shtein.me/api/*", "zone_name": "shtein.me" }]
}
}
}
3. 本地测试支付墙
使用 wrangler dev 运行本地服务,发送 curl -i http://localhost:8787/api/joke,收到 HTTP 402 Payment Required 响应,包含 PAYMENT-REQUIRED 头(Base64 编码的 JSON 支付选项)。
解码后的内容显示两种接受方案:EVM 网络(Base Sepolia,资产为 USDC)和 Solana 网络(资产为 USDC 测试代币),金额均为 10000 单位(0.01 美元)。
4. 集成 Paywall UI
为了让浏览器用户能直接支付,安装 @x402/paywall 并创建 Paywall 实例,同时启用测试网模式。更新 Worker 代码:
import { createPaywall, evmPaywall, svmPaywall } from "@x402/paywall";
// ... 在 paymentMiddleware 调用后添加
new x402ResourceServer(facilitatorClient)
.register("eip155:84532", new ExactEvmScheme())
.register("solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1", new ExactSvmScheme()),
{ appName: "Igor's corner", testnet: true },
createPaywall().withNetwork(evmPaywall).withNetwork(svmPaywall).build()
);
此后,浏览器访问 /api/joke 时会显示一个友好的支付界面,引导用户连接 MetaMask(或其他钱包)并确认支付 0.01 美元。
5. 支付流程及最终响应
用户通过 MetaMask 连接并签名后,客户端在请求头 PAYMENT-SIGNATURE 中发送签名数据,解码后包含授权信息(from、to、value、validAfter、validBefore、nonce)和签名。服务器验证无误后返回笑话内容,状态码变为 200。
关键要点
- 协议标准:x402 定义了一套 HTTP 402 状态码的标准化支付协商机制,通过
PAYMENT-REQUIRED头传递价格、网络、收款地址等参数,客户端支付后以PAYMENT-SIGNATURE头提交证明。 - 多链支持:实现同时兼容 EVM(以太坊类)和 SVM(Solana)两种主流区块链网络,用户可任选一种支付。
- 低门槛:单次支付可低至 0.01 美元,适合微支付场景(如单篇博客、单次 API 调用)。
- 静态博客适配:通过 Cloudflare Workers 作为中间件,无需修改静态站点本身即可添加付费墙,对原有部署影响小。
- 开源实现:作者使用了社区库
@x402/hono、@x402/paywall等,代码完全可复现,降低了个人开发者尝试的门槛。 - 测试与生产区别:测试网模式下 Paywall 显示“Top up”入口,生产环境则会直接要求签名支付,不会提供充值选项。
意义与影响
x402 及其背后的 Cloudflare Monetization Gateway 理念,可能对互联网内容变现模式产生深远影响:
- 去广告化:为用户提供一种直接、透明的按次付费替代方案,有望减少对第三方广告(包括追踪、隐私泄露)的依赖。
- 赋能个人创作者:即使是个人博客或小规模 API 服务,也能以极低的技术成本和用户摩擦实现变现,无需经过复杂支付系统或高额抽成平台。
- 推动 Web3 支付实用化:通过 HTTP 402 标准化协议,将加密货币微支付无缝融入网页浏览体验,降低了普通用户使用加密支付的心理和技术障碍。
- **静态
