Установка
Cargo.toml:
Быстрый старт
Самый быстрый способ — использоватьManagedProvider: не нужен собственный узел Lightning Network, комиссия 0.3%:
LightningProvider — см. Пользовательский провайдер ниже.
Пользовательский провайдер
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::middleware::Layer, совместимый с axum 0.8+.
Поведение
| Запрос | Ответ |
|---|---|
Отсутствует заголовок Authorization | 402 + WWW-Authenticate: L402 macaroon="...", invoice="lnbc..." |
Корректный L402 <macaroon>:<preimage> | Обработчик выполняется |
| Недействительный или истёкший токен | 401 Unauthorized |
| Повторно использованный preimage | 401 Token already used |
Тело ответа 402
Коллбэк on_payment
Флаги функциональности
axum-middleware, чтобы использовать только базовые функции верификации без axum или reqwest:
Верификация
SHA256(preimage) == paymentHash проверяется локально с помощью крейта sha2 — без сетевых вызовов на горячем пути. Срок действия токена проверяется в той же операции.
Коды ошибок
| Статус | Значение |
|---|---|
402 | Отсутствует платёжный токен — оплатите счёт |
401 | Недействительный токен или истёкший macaroon |
401 | Повторно использованный preimage (уже применялся) |