Установка
Быстрый старт
Режим самостоятельного размещения (собственный провайдер)
l402.Options
| Поле | Тип | По умолчанию | Описание |
|---|---|---|---|
PriceSats | int | обязательно | Цена за вызов в satoshi |
Lightning | LightningProvider | обязательно | Ваш Lightning-бэкенд (используйте NewBlinkProvider) |
OnPayment | func(L402Token, int) | — | Коллбэк, вызываемый после каждого подтверждённого платежа |
l402.Middleware(opts Options, next http.Handler) http.Handler
Возвращает http.Handler, совместимый с net/http, Chi, Gorilla Mux и любым стандартным Go HTTP-фреймворком.
Поведение
| Запрос | Ответ |
|---|---|
Нет заголовка Authorization | 402 + WWW-Authenticate: L402 macaroon="...", invoice="lnbc..." |
Валидный L402 <macaroon>:<preimage> | next.ServeHTTP(w, r) |
| Недействительный или истёкший токен | 401 Unauthorized |
| Повторно использованный preimage | 401 Token already used |
Тело ответа 402
Интерфейс LightningProvider
Коллбэк OnPayment
Верификация
SHA256(preimage) == paymentHash проверяется локально в памяти — менее миллисекунды, без сетевых вызовов на горячем пути. Срок действия токена (поле exp в macaroon) проверяется в той же операции.
Защита от повторного воспроизведения использует карту в памяти по умолчанию (безопасно для одного процесса). При развёртывании с несколькими экземплярами используйте общее хранилище (Redis или аналогичное) — что добавляет 5–50 мс задержки на каждый проверяемый запрос.
Пример с Chi-роутером
l402.Middleware возвращает стандартный http.Handler, поэтому он работает напрямую с r.Handle в Chi:
Коды ошибок
| Статус | Значение |
|---|---|
402 | Нет токена оплаты — оплатите счёт |
401 | Недействительный токен или истёкший macaroon |
401 | Повторно использованный токен (preimage уже применялся) |