feat(payments): reuse pending provider payments
This commit is contained in:
@@ -315,6 +315,45 @@ async def create_webapp_payment_record(
|
||||
)
|
||||
|
||||
|
||||
async def reusable_webapp_payment_response(
|
||||
ctx: WebAppPaymentContext,
|
||||
provider_spec: Any,
|
||||
*,
|
||||
since_minutes: Optional[int] = None,
|
||||
) -> Optional[web.Response]:
|
||||
resolver = getattr(provider_spec, "reuse_webapp_payment", None)
|
||||
if resolver is None:
|
||||
return None
|
||||
|
||||
amounts = payment_record_amounts(
|
||||
months=ctx.months,
|
||||
sale_mode=ctx.sale_mode,
|
||||
traffic_gb=ctx.traffic_gb,
|
||||
hwid_device_count=ctx.hwid_device_count,
|
||||
)
|
||||
payment = await payment_dal.find_recent_pending_provider_payment(
|
||||
ctx.session,
|
||||
user_id=ctx.user_id,
|
||||
provider=provider_spec.provider_key,
|
||||
pending_status=provider_spec.pending_status,
|
||||
amount=ctx.price,
|
||||
currency=ctx.currency,
|
||||
sale_mode=ctx.sale_mode,
|
||||
months=amounts.months,
|
||||
purchased_gb=amounts.purchased_gb,
|
||||
purchased_hwid_devices=amounts.purchased_hwid_devices,
|
||||
tariff_key=amounts.tariff_key,
|
||||
since_minutes=since_minutes,
|
||||
)
|
||||
if payment is None:
|
||||
return None
|
||||
|
||||
payment_url = await resolver(ctx, payment)
|
||||
if not payment_url:
|
||||
return None
|
||||
return payment_link_response(payment_url=payment_url, payment_id=payment.payment_id)
|
||||
|
||||
|
||||
async def mark_payment_failed_creation(session: AsyncSession, payment_id: int) -> None:
|
||||
await payment_dal.update_payment_status_by_db_id(session, payment_id, "failed_creation")
|
||||
await session.commit()
|
||||
|
||||
Reference in New Issue
Block a user