Django и stripe обрабатывают успешный платеж

Я пытаюсь обработать успешный платеж с помощью stripe webhook, в моей приборной панели stripe я вижу, что события срабатывают и payment_intent успешен, но заказ не создается

views.py :

from django.shortcuts import render
from django.http import JsonResponse
from django.http import HttpResponse
import stripe
import json
from django.views.decorators.csrf import csrf_exempt, csrf_protect
from django.views.decorators.http import require_POST
from article.models import Order






endpoint_secret = '1wwww'
@require_POST
@csrf_exempt
def my_webhook_view(request):

    payload = request.body
    sig_header = request.META['HTTP_STRIPE_SIGNATURE']
    event = None

    # Try to validate and create a local instance of the event
    try:
        event = stripe.Webhook.construct_event(payload, sig_header, endpoint_secret)
    except ValueError as e:
        # Invalid payload
        return HttpResponse(status=400)
    except stripe.error.SignatureVerificationError as e:
        # Invalid signature
        return HttpResponse(status=400)

  # Handle the checkout.session.completed event
    if event['type'] == 'payment_intent.succeeded':
        checkout_session = event['data']['object']
        # Make sure is already paid and not delayed
       
        _handle_successful_payment(checkout_session)

    # Passed signature verification
    return HttpResponse(status=200)

def _handle_successful_payment(checkout_session):

    payed_order = Order.objects.create(order_id='test22')
    return payed_order

Согласно Stripe, они рекомендуют слушать события вместо webhook для обеспечения отслеживания статуса платежа.

"Stripe рекомендует обрабатывать события payment_intent.succeeded, payment_intent.processing и payment_intent.payment_failed.

Слушайте эти события, а не ждите обратного вызова от клиента. На клиенте клиент может закрыть окно браузера или выйти из приложения до выполнения обратного вызова. Настройка вашей интеграции на прослушивание асинхронных событий позволяет вам принимать различные типы методов оплаты с помощью одной интеграции." https://stripe.com/docs/payments/quickstart

Я немного изменил checkout.js, предоставленный stripe. В моем случае я отключил return_url и жду успешной оплаты и отправляю скрытую форму для оформления заказа.

Вот мой обходной путь. Если у кого-то есть что-то лучше, буду признателен.

Вернуться на верх