| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 | import loggingimport stripefrom flask import request, current_appfrom flask_restful import Resourcefrom controllers.console import apifrom controllers.console.setup import setup_requiredfrom controllers.console.wraps import only_edition_cloudfrom services.provider_checkout_service import ProviderCheckoutServiceclass StripeWebhookApi(Resource):    @setup_required    @only_edition_cloud    def post(self):        payload = request.data        sig_header = request.headers.get('STRIPE_SIGNATURE')        webhook_secret = current_app.config.get('STRIPE_WEBHOOK_SECRET')        try:            event = stripe.Webhook.construct_event(                payload, sig_header, webhook_secret            )        except ValueError as e:            # Invalid payload            return 'Invalid payload', 400        except stripe.error.SignatureVerificationError as e:            # Invalid signature            return 'Invalid signature', 400        # Handle the checkout.session.completed event        if event['type'] == 'checkout.session.completed':            logging.debug(event['data']['object']['id'])            logging.debug(event['data']['object']['amount_subtotal'])            logging.debug(event['data']['object']['currency'])            logging.debug(event['data']['object']['payment_intent'])            logging.debug(event['data']['object']['payment_status'])            logging.debug(event['data']['object']['metadata'])            session = stripe.checkout.Session.retrieve(                event['data']['object']['id'],                expand=['line_items'],            )            logging.debug(session.line_items['data'][0]['quantity'])            # Fulfill the purchase...            provider_checkout_service = ProviderCheckoutService()            try:                provider_checkout_service.fulfill_provider_order(event, session.line_items)            except Exception as e:                logging.debug(str(e))                return 'success', 200        return 'success', 200api.add_resource(StripeWebhookApi, '/webhook/stripe')
 |