Почему 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
не имеет ожидаемого значения.