Почему Django/console выдает мне ошибку отсутствия значения для stripe.confirmCardPayment intent secret, говоря, что это должна быть секретная строка клиента?

Я пытаюсь изучить этот учебник, пользовательский поток платежей последний бит для интеграции stripe с Django

https://justdjango.com/blog/django-stripe-payments-tutorial

в моем файле views.py у меня есть эти представления

class StripeIntentView(View):
    def post(self, request, *args, **kwargs):
        try:
            req_json = json.loads(request.body)
            customer = stripe.Customer.create(email=req_json['email'])
            price = Price.objects.get(id=self.kwargs["pk"])
            intent = stripe.PaymentIntent.create(
                amount=price.price,
                currency='usd',
                customer=customer['id'],
                metadata={
                    "price_id": price.id
                }
            )
            return JsonResponse({
                'clientSecret': intent['client_secret']
            })
        
        except Exception as e:
            return JsonResponse({'error': str(e)})

class CustomPaymentView(TemplateView):
    template_name = "custom_payment.html"

    def get_context_data(self, **kwargs):
        product = Product.objects.get(name="Test Product")
        prices = Price.objects.filter(product=product)
        context = super(CustomPaymentView, self).get_context_data(**kwargs)
        context.update({
            "product": product,
            "prices": prices,
            "STRIPE_PUBLIC_KEY": settings.STRIPE_PUBLIC_KEY
        })
        return context

и в моих урлах я имею

from django.contrib import admin
from django.urls import path
from products.views import stripe_webhook
from products.views import StripeIntentView, CustomPaymentView

urlpatterns = [
    path('admin/', admin.site.urls),
    path('create-payment-intent/<pk>/', StripeIntentView.as_view(), name='create-payment-intent'),
    path('custom-payment/', CustomPaymentView.as_view(), name='custom-payment')

и в моем custom_payment.html у меня есть

В учебнике отсутствовал токен csrf, поэтому я добавил его, и элемент карточки загрузился, а также мне пришлось добавить id цены в select

Затем я получил эту ошибку

(index):1 Uncaught (in promise) IntegrationError: Missing value for stripe.confirmCardPayment intent secret: value should be a client_secret string.
    at X ((index):1)
    at Q ((index):1)
    at uo ((index):1)
    at (index):1
    at (index):1
    at e.<anonymous> ((index):1)
    at e.confirmCardPayment ((index):1)
    at payWithCard ((index):104)
    at (index):94

Может ли кто-нибудь помочь мне с этим? Спасибо

я бы предложил добавить дополнительную строку для проверки значения data (и data.clientSecret). Похоже, что clientSecret может не иметь значения или не быть строкой.

.then(function(data) {
  console.log(data);
  payWithCard(stripe, card, data.clientSecret);
});

Затем необходимо проследить, почему clientSecret не имеет ожидаемого значения.

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