安装
Cargo.toml 中:
快速开始
最快的方式是使用ManagedProvider — 无需 Lightning 节点,手续费 0.3%:
LightningProvider trait — 参见下方自定义 provider。
自定义 provider
Options
| 字段 | 类型 | 说明 |
|---|---|---|
price_sats | u64 | 每次调用的价格,单位为 satoshi(必填) |
lightning | Arc<dyn LightningProvider> | 你的 Lightning 后端(必填) |
on_payment | Option<Box<dyn Fn(L402Token, u64)>> | 每次验证支付成功后触发的回调 |
已废弃:with_address()
Options::with_address(address) 已在 v1.4.0 中移除。请改用 Options::new(sats, ManagedProvider::new(address)):
l402_middleware(opts: Options)
返回一个与 axum 0.8+ 兼容的 axum::middleware::Layer。
行为说明
| 请求 | 响应 |
|---|---|
无 Authorization 请求头 | 402 + WWW-Authenticate: L402 macaroon="...", invoice="lnbc..." |
有效的 L402 <macaroon>:<preimage> | 执行处理器 |
| 无效或已过期的 token | 401 Unauthorized |
| 重放的 preimage | 401 Token already used |
402 响应体
on_payment 回调
功能标志
axum-middleware 可在不依赖 axum 或 reqwest 的情况下,仅使用核心验证函数:
验证
SHA256(preimage) == paymentHash 使用 sha2 crate 在本地验证 — 热路径上无需网络调用。Token 过期检查在同一操作中完成。
错误码
| 状态码 | 含义 |
|---|---|
402 | 无支付 token — 请支付发票 |
401 | 无效 token 或已过期的 macaroon |
401 | 重放的 preimage(已使用) |