[docs]classStripeIntegration:"""Handles integration with the Stripe payment plugin for subscription operations"""def__init__(self):pass
[docs]asyncdefcreate_checkout_session(self,username:str,plan:SubscriptionPlan)->str:"""Create a Stripe checkout session for subscription Args: username: User to create checkout for plan: Subscription plan details Returns: str: Checkout URL """try:# Import here to avoid circular importsfrommr_stripe.modimportsubscription_checkout,CheckoutUrls# Create checkout sessioncheckout_url=awaitsubscription_checkout(user_id=username,plan_name=plan.name,amount=Decimal(str(plan.price)),interval=plan.interval,currency=plan.currency,metadata={'plan_id':plan.plan_id,'credits_per_cycle':plan.credits_per_cycle,'source':'subscription_plugin'})logger.info(f"Created Stripe checkout for {username}, plan: {plan.plan_id}")returncheckout_urlexceptExceptionase:logger.error(f"Failed to create Stripe checkout: {str(e)}")raise
[docs]asyncdefcancel_subscription(self,provider_subscription_id:str,at_period_end:bool=True)->bool:"""Cancel a Stripe subscription Args: provider_subscription_id: Stripe subscription ID at_period_end: Whether to cancel at period end or immediately Returns: bool: Success status """try:importstripe# Cancel subscriptionstripe.Subscription.modify(provider_subscription_id,cancel_at_period_end=at_period_end)logger.info(f"Cancelled Stripe subscription {provider_subscription_id}")returnTrueexceptExceptionase:logger.error(f"Failed to cancel Stripe subscription: {str(e)}")raise