diff --git a/handlers/payments/kassai.py b/handlers/payments/kassai.py index 8231ad0a..c09f5259 100644 --- a/handlers/payments/kassai.py +++ b/handlers/payments/kassai.py @@ -12,7 +12,7 @@ from sqlalchemy.ext.asyncio import AsyncSession from config import ( KASSAI_ENABLE, KASSAI_API_KEY, KASSAI_SECRET_KEY, KASSAI_DOMAIN, KASSAI_SHOP_ID, - REDIRECT_LINK, FAIL_REDIRECT_LINK, WEBHOOK_HOST, KASSAI_IP + REDIRECT_LINK, FAIL_REDIRECT_LINK, WEBHOOK_HOST, KASSAI_IP, KASSAI_SUCCESS_URL, KASSAI_FAILURE_URL ) from handlers.buttons import BACK, PAY_2, KASSAI_CARDS, KASSAI_SBP @@ -287,7 +287,7 @@ async def generate_kassai_payment_link(amount: int, tg_id: int, method: dict) -> """ nonce = int(time.time()) unique_payment_id = f"{nonce}_{tg_id}" - url = f"https://api.fk.life/v1/orders/create?paymentId={unique_payment_id}" + url = "https://api.fk.life/v1/orders/create" headers = { "Content-Type": "application/json", @@ -303,7 +303,10 @@ async def generate_kassai_payment_link(amount: int, tg_id: int, method: dict) -> "email": client_email, "ip": client_ip, "amount": int(amount), - "currency": "RUB" + "currency": "RUB", + "success_url": KASSAI_SUCCESS_URL, + "failure_url": KASSAI_FAILURE_URL, + "paymentId": unique_payment_id } sorted_keys = sorted(data_for_signature.keys()) diff --git a/web/kassai_payment.py b/web/kassai_payment.py index d21169f2..c8a4c425 100644 --- a/web/kassai_payment.py +++ b/web/kassai_payment.py @@ -37,6 +37,8 @@ async def kassai_payment_webhook(request: web.Request): p_email = data_dict.get("P_EMAIL") intid = data_dict.get("intid") + logger.info(f"KassaAI payment: intid={intid}, MERCHANT_ORDER_ID={merchant_order_id}, amount={amount}") + if not amount or not intid: logger.error(f"KassaAI: Missing AMOUNT or intid") return web.Response(status=400, text="Missing required fields") @@ -45,6 +47,10 @@ async def kassai_payment_webhook(request: web.Request): logger.warning(f"KassaAI: Duplicate payment intid={intid}") return web.Response(status=200, text="YES") + if merchant_order_id and merchant_order_id in processed_payments: + logger.warning(f"KassaAI: Duplicate payment MERCHANT_ORDER_ID={merchant_order_id}") + return web.Response(status=200, text="YES") + try: if p_email and "@" in p_email: tg_id = int(p_email.split("@")[0]) @@ -80,8 +86,10 @@ async def kassai_payment_webhook(request: web.Request): logger.warning(f"Error handling payment message deletion: {e}") processed_payments.add(intid) + if merchant_order_id: + processed_payments.add(merchant_order_id) - logger.info(f"✅ KassaAI: Payment processed for user {tg_id}, amount {amount_float}, intid={intid}") + logger.info(f"✅ KassaAI: Payment processed for user {tg_id}, amount {amount_float}, intid={intid}, MERCHANT_ORDER_ID={merchant_order_id}") return web.Response(status=200, text="YES") except Exception as e: