| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 | 
							- import logging
 
- import stripe
 
- from flask import request, current_app
 
- from flask_restful import Resource
 
- from controllers.console import api
 
- from controllers.console.setup import setup_required
 
- from controllers.console.wraps import only_edition_cloud
 
- from services.provider_checkout_service import ProviderCheckoutService
 
- class 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', 200
 
- api.add_resource(StripeWebhookApi, '/webhook/stripe')
 
 
  |