fix: lnd/lndrest failed canceled/expired invoices (#3143)

This commit is contained in:
dni ⚡ 2025-05-05 10:31:11 +02:00 committed by GitHub
parent 5818c3c2ba
commit 6a9089fd98
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 17 additions and 6 deletions

View file

@ -16,6 +16,7 @@ from lnbits.utils.crypto import AESCipher, random_secret_and_hash
from .base import (
InvoiceResponse,
PaymentFailedStatus,
PaymentPendingStatus,
PaymentResponse,
PaymentStatus,
@ -237,6 +238,9 @@ class LndWallet(Wallet):
if resp.settled:
return PaymentSuccessStatus(preimage=resp.r_preimage.hex())
if resp.state == "CANCELED":
return PaymentFailedStatus()
return PaymentPendingStatus()
except grpc.RpcError as exc:
logger.warning(exc)

View file

@ -225,16 +225,23 @@ class LndRestWallet(Wallet):
try:
r.raise_for_status()
data = r.json()
if r.is_error or not data.get("settled"):
# this must also work when checking_id is not a hex recognizable by lnd
# it will return an error and no "settled" attribute on the object
return PaymentPendingStatus()
except Exception as e:
logger.error(f"Error getting invoice status: {e}")
return PaymentPendingStatus()
if r.is_error or data.get("settled") is None:
# this must also work when checking_id is not a hex recognizable by lnd
# it will return an error and no "settled" attribute on the object
return PaymentPendingStatus()
if data.get("settled") is True:
return PaymentSuccessStatus()
if data.get("state") == "CANCELED":
return PaymentFailedStatus()
return PaymentPendingStatus()
async def get_payment_status(self, checking_id: str) -> PaymentStatus:
"""
This routine checks the payment status using routerpc.TrackPaymentV2.