diff --git a/conservancy/supporters/views.py b/conservancy/supporters/views.py index 68160f0aa7ddfffa577202f7541d7dd5ca80fb4f..5af28a40abaf1eef6a01246cd526b8b536182856 100644 --- a/conservancy/supporters/views.py +++ b/conservancy/supporters/views.py @@ -45,7 +45,8 @@ def sponsors(request): return render(request, "supporters/sponsors.html", c) -def create_checkout_session(reference_id, email, amount, base_url): +def create_checkout_session(reference_id, email: str, amount: int, recurring: bool, base_url: str): + # https://docs.stripe.com/payments/accept-a-payment YOUR_DOMAIN = base_url try: checkout_session = stripe.checkout.Session.create( @@ -55,13 +56,15 @@ def create_checkout_session(reference_id, email, amount, base_url): 'price_data': { 'currency': 'usd', 'product_data': {'name': 'Contribution'}, - 'unit_amount': amount * 100, + 'unit_amount': amount * 100, # in cents + # https://docs.stripe.com/products-prices/pricing-models#variable-pricing + 'recurring': {'interval': 'month'} if recurring else None, }, 'quantity': 1, }, ], customer_email=email, - mode='payment', + mode='subscription' if recurring else 'payment', success_url=YOUR_DOMAIN + '/sustainer/success/?session_id={CHECKOUT_SESSION_ID}', cancel_url=YOUR_DOMAIN + '/sustainer/stripe/', ) @@ -78,9 +81,13 @@ def sustainers_stripe2(request): if request.method == 'POST': form = forms.SustainerForm(request.POST) if form.is_valid(): - order = form.save() + order = form.save(commit=False) + if form.data['recurring'] == 'monthly': + order.amount = form.cleaned_data['amount_monthly'] + order.monthly_recurring = True + order.save() base_url = f'{request.scheme}://{request.get_host()}' - stripe_checkout_url = create_checkout_session(order.id, order.email, order.amount, base_url) + stripe_checkout_url = create_checkout_session(order.id, order.email, order.amount, order.monthly_recurring, base_url) return redirect(stripe_checkout_url) else: form = forms.SustainerForm()