Skip to main content

安装

环境要求:Node.js 18+,Express 4+

快速开始


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_URLSUPABASE_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 表中的列: