import logging import requests import stripe from flask import (abort, redirect, request, url_for, render_template, make_response) from flask.ext.login import login_user, UserMixin, login_required from flask.ext.principal import identity_changed, Identity, AnonymousIdentity from data import model from app import app, login_manager, mixpanel from auth.permissions import QuayDeferredPermissionUser from data.plans import USER_PLANS, BUSINESS_PLANS, get_plan from util.invoice import renderInvoiceToHtml from util.email import send_invoice_email logger = logging.getLogger(__name__) @app.route('/webhooks/stripe', methods=['POST']) def stripe_webhook(): request_data = request.get_json() logger.debug('Stripe webhook call: %s' % request_data) event_type = request_data['type'] if 'type' in request_data else None if event_type == 'charge.succeeded': data = request_data['data'] if 'data' in request_data else {} obj = data['object'] if 'object' in data else {} invoice_id = obj['invoice'] if 'invoice' in obj else None customer_id = obj['customer'] if 'customer' in obj else None if invoice_id and customer_id: # Find the user associated with the customer ID. user = model.get_user_or_org_by_customer_id(customer_id) if user and user.invoice_email: # Lookup the invoice. invoice = stripe.Invoice.retrieve(invoice_id) if invoice: invoice_html = renderInvoiceToHtml(invoice, user) send_invoice_email(user.email, invoice_html) return make_response('Okay')