环境要求:Node.js 18+,Express 4+
快速开始
自有钱包(0% 手续费)
托管模式(无需自建节点)
l402(options) —— 中间件
返回一个 Express RequestHandler,对路由强制执行 L402 支付验证。
行为说明
402 响应体
WWW-Authenticate 请求头
提供商
AlbyProvider —— 推荐用于主权模式
Alby —— 非托管钱包,您掌控私钥。
BTCPayProvider —— 自托管,零信任
运行您自己的 BTCPay Server,实现完全主权。
BlinkProvider —— 托管模式,最易上手
Blink —— 免费,小额无需 KYC。
LNbitsProvider
自托管或使用 legend.lnbits.com。
OpenNodeProvider
ManagedProvider —— 云托管模式(0.3% 手续费)
l402kit.com 托管 Lightning 节点,您可获得每笔付款的 99.7%,需明确选择启用。
注册在启动时触发一次(即发即忘,错误静默处理)。API 将出现在 l402kit.com/apis.json,供代理自动发现。
重放攻击防护
默认 —— 内存模式(适用于开发环境)
内置功能,重启后重置,适合单进程部署。
Redis(生产环境 —— 多实例部署)
RedisReplayAdapter 使用 SET key 1 NX EX ttl —— 原子操作,无竞态条件。
支付 webhook
每次支付后接收已签名的事件通知。
Webhook 负载:
onPayment 回调
在每次支付验证通过后、next() 执行前同步触发的钩子:
Supabase 支付日志
在环境变量中设置 SUPABASE_URL 和 SUPABASE_ANON_KEY,即可自动记录支付日志。
支付表结构(payments):
payment_hash 存储的是 SHA256(preimage),而非原始 preimage。preimage 是 32 字节的 Lightning 支付密钥 —— 其哈希值已在 BOLT11 发票中公开。
独立工具函数
类型定义
验证耗时
令牌验证在内存中执行 SHA256(preimage) == paymentHash —— 亚毫秒级,热路径上无网络请求。
内存模式 ReplayAdapter(默认)同样为同步执行。若使用 RedisReplayAdapter,每次请求需额外承担 5–50 ms 的 Redis 往返延迟。请根据高频端点的实际情况合理规划容量。
x402 兼容性(X-Payment 请求头)
该中间件在支持标准 Authorization: L402 … 请求头的同时,也静默接受 X-Payment 请求头(由 Coinbase 的 x402 协议 使用)。两者处理方式完全相同 —— 适用于需要同时兼容两种协议客户端的场景。
无需任何配置,始终处于启用状态。
迁移指南
v1.1 → v1.2
重命名 payments 表中的列: