stripe.py 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. import logging
  2. import stripe
  3. from flask import request, current_app
  4. from flask_restful import Resource
  5. from controllers.console import api
  6. from controllers.console.setup import setup_required
  7. from controllers.console.wraps import only_edition_cloud
  8. from services.provider_checkout_service import ProviderCheckoutService
  9. class StripeWebhookApi(Resource):
  10. @setup_required
  11. @only_edition_cloud
  12. def post(self):
  13. payload = request.data
  14. sig_header = request.headers.get('STRIPE_SIGNATURE')
  15. webhook_secret = current_app.config.get('STRIPE_WEBHOOK_SECRET')
  16. try:
  17. event = stripe.Webhook.construct_event(
  18. payload, sig_header, webhook_secret
  19. )
  20. except ValueError as e:
  21. # Invalid payload
  22. return 'Invalid payload', 400
  23. except stripe.error.SignatureVerificationError as e:
  24. # Invalid signature
  25. return 'Invalid signature', 400
  26. # Handle the checkout.session.completed event
  27. if event['type'] == 'checkout.session.completed':
  28. logging.debug(event['data']['object']['id'])
  29. logging.debug(event['data']['object']['amount_subtotal'])
  30. logging.debug(event['data']['object']['currency'])
  31. logging.debug(event['data']['object']['payment_intent'])
  32. logging.debug(event['data']['object']['payment_status'])
  33. logging.debug(event['data']['object']['metadata'])
  34. session = stripe.checkout.Session.retrieve(
  35. event['data']['object']['id'],
  36. expand=['line_items'],
  37. )
  38. logging.debug(session.line_items['data'][0]['quantity'])
  39. # Fulfill the purchase...
  40. provider_checkout_service = ProviderCheckoutService()
  41. try:
  42. provider_checkout_service.fulfill_provider_order(event, session.line_items)
  43. except Exception as e:
  44. logging.debug(str(e))
  45. return 'success', 200
  46. return 'success', 200
  47. api.add_resource(StripeWebhookApi, '/webhook/stripe')