diff --git a/lnbits/core/services.py b/lnbits/core/services.py index d623b1183..10b33073b 100644 --- a/lnbits/core/services.py +++ b/lnbits/core/services.py @@ -29,6 +29,10 @@ from .crud import ( ) +class PaymentFailure(Exception): + pass + + async def create_invoice( *, wallet_id: str, @@ -162,8 +166,9 @@ async def pay_invoice( ) await delete_payment(temp_id, conn=conn) else: - raise Exception( - payment.error_message or "Failed to pay_invoice on backend." + raise PaymentFailure( + payment.error_message + or "Payment failed, but backend didn't give us an error message." ) return invoice.payment_hash diff --git a/lnbits/core/views/api.py b/lnbits/core/views/api.py index 2d1b99a9b..02cb788a8 100644 --- a/lnbits/core/views/api.py +++ b/lnbits/core/views/api.py @@ -12,7 +12,7 @@ from lnbits import bolt11 from lnbits.decorators import api_check_wallet_key, api_validate_post_request from .. import core_app, db -from ..services import create_invoice, pay_invoice, perform_lnurlauth +from ..services import PaymentFailure, create_invoice, pay_invoice, perform_lnurlauth from ..tasks import sse_listeners @@ -127,6 +127,8 @@ async def api_payments_pay_invoice(): return jsonify({"message": str(e)}), HTTPStatus.BAD_REQUEST except PermissionError as e: return jsonify({"message": str(e)}), HTTPStatus.FORBIDDEN + except PaymentFailure as e: + return jsonify({"message": str(e)}), 520 except Exception as exc: raise exc