```py
import os
import stripe
from flask import Flask, request, jsonify
from dotenv import load_dotenv
load_dotenv()
app = Flask(__name__)
stripe.api_key = os.getenv('STRIPE_SECRET_KEY')
PRICE_ID = os.getenv('STRIPE_PRICE_ID')
WEBHOOK_SECRET = os.getenv('STRIPE_WEBHOOK_SECRET')
@app.route('/create-checkout-session', methods=['POST'])
def create_checkout_session():
session = stripe.checkout.Session.create(
mode='subscription',
payment_method_types=['card'],
line_items=[{
'price': PRICE_ID,
'quantity': 1
}],
success_url='https://yourdomain.com/success',
cancel_url='https://yourdomain.com/cancel'
)
return jsonify({'url': session.url})
@app.route('/webhook', methods=['POST'])
def webhook():
payload = request.data
sig_header = request.headers.get('Stripe-Signature')
try:
event = stripe.Webhook.construct_event(
payload, sig_header, WEBHOOK_SECRET
)
except Exception:
return '', 400
if event['type'] == 'checkout.session.completed':
session = event['data']['object']
customer_id = session['customer']
subscription_id = session['subscription']
# mark user active in DB
elif event['type'] == 'customer.subscription.deleted':
subscription = event['data']['object']
# revoke access in DB
return '', 200
if __name__ == '__main__':
app.run(debug=True)
```
Jump