Как выполнять код каждый раз, когда сессия Stripe была оплачена
Я использую Stripe для интеграции платежей на моем сайте электронной коммерции и Django в качестве веб-фреймворка, и я хотел бы создать пользовательский административный сайт для управления магазином, поэтому я хочу создать модель Command всякий раз, когда сессия stripe была оплачена.
from .models import Command # I have a Command model
class CommandView(views.APIView):
def post(self, request, format=None):
try:
checkout_session = stripe.checkout.Session.create(
line_items=[
{
'price': 'some price id',
'quantity': 1,
},
],
mode='payment',
success_url='http://localhost:3000/success/{CHECKOUT_SESSION_ID}',
cancel_url='http://localhost:3000/store',
billing_address_collection='auto',
)
if checkout_session['payment_status'] == 'paid':
# this will never work because the status in this view is always unpaid
return Response({'url': checkout_session['url']})
except Exception as e:
return Response({'error': e})
Решением, которое я нашел, является выполнение кода в представлении success_url
, но мне интересно, можно ли заплатить и не попасть в этот url, например, сразу закрыть вкладку...
И может быть мое решение создать модель Command, чтобы видеть детали команды в администрировании, например цвет товара... неправильно, можете ли вы дать несколько советов.
Вы можете попробовать использовать Ajax для вызова функции представления и обработать ее с помощью JQuery / Javascript.
Этот вопрос на stackoverflow может помочь вам дальше.
Рекомендуемый способ достижения этой цели - webhooks. Хорошим примером является это руководство по выполнению заказов.