Ошибка Page not found (404) в Django при создании сессии оформления заказа с помощью Stripe
Я работаю над своим первым проектом по интеграции Stripe в Django и столкнулся с проблемой, решение которой мне не удалось найти. Я пытаюсь создать сессию, с помощью которой пользователи могут быть перенаправлены на страницу, где они могут произвести оплату. Вот мой views.py:
class ProductLandingPageView(TemplateView):
template_name = "landing.html"
def get_context_data(self, **kwargs):
product = Product.objects.get(name="Test Product")
context = super(ProductLandingPageView, self).get_context_data(**kwargs)
context.update({
"product": product,
"STRIPE_PUBLIC_KEY": settings.STRIPE_PUBLISHABLE_KEY
})
return context
class CreateCheckoutSessionView(View):
def post(self, request, *args, **kwargs):
product_id = self.kwargs["pk"]
product = Product.objects.get(id=product_id)
YOUR_DOMAIN = "http://127.0.0.1:8000"
checkout_session = stripe.checkout.Session.create(
line_items=[
{
# Provide the exact Price ID (for example, pr_1234) of the product you want to sell
'price': '{{product.price}}',
'quantity': 1,
},
],
metadata={
"product_id": product.id
},
mode='payment',
success_url=YOUR_DOMAIN + '/success/',
cancel_url=YOUR_DOMAIN + '/cancel/',
)
return redirect(checkout_session.url, code=303)
Вот мой urls.py;
urlpatterns = [
path('', ProductLandingPageView.as_view(), name='landing'),
path('success/', SuccessView.as_view(), name='success'),
path('cancel/', CancelView.as_view(), name='cancel'),
path('create-checkout-session/<pk>', CreateCheckoutSessionView.as_view(), name='create-checkout-session'),
]
Также вот шаблон, где находится кнопка оформления заказа:
<body>
<section>
<div class="product">
<!-- <img src="https://i.imgur.com/EHyR2nP.png" alt="The cover of Stubborn Attachments" /> -->
<div class="description">
<h3>{{product.name}}</h3>
<h5>${{product.price}}</h5>
</div>
</div>
<form action="/create-checkout-session" method="POST">
<button type="submit" id="checkout-button">Checkout</button>
</form>
</section>
{% csrf_token %}
</body>
<script type="text/javascript">
const csrftoken = document.querySelector('[name=csrfmiddlewaretoken]').value;
// Create an instance of the Stripe object with your publishable API key
var stripe = Stripe("{{ STRIPE_PUBLISHABLE_KEY }}");
var checkoutButton = document.getElementById("checkout-button");
checkoutButton.addEventListener("click", function () {
fetch("{% url 'create-checkout-session' pk=product.id %}", {
method: "POST",
headers: {
'X-CSRFToken': csrftoken
}
})
.then(function (response) {
return response.json();
})
.then(function (session) {
return stripe.redirectToCheckout({ sessionId: session.id });
})
.then(function (result) {
if (result.error) {
alert(result.error.message);
}
})
.catch(function (error) {
console.error("Error:", error);
});
});
</script>
</html>
Прилагается скриншот ошибки в браузере Скриншот ошибки
Любая помощь будет высоко оценена.
Ваш urls.py ожидает, что вы предоставите pk в качестве параметра URL, на картинке вы ничего не предоставляете. Поэтому urls.py никогда не найдет правильный маршрут.
И пожалуйста, urls.py:
urlpatterns = [
...
path('create-checkout-session/<int:pk>', CreateCheckoutSessionView.as_view(), name='create-checkout-session'),
]