Интеграция Stripe с Django дает ошибку типа, говоря, что __init__() принимает 1 позиционный аргумент, но было задано 2
Здравствуйте, я пытался узнать, как интегрировать страницу оформления заказа Stripe в мой проект django.
Документация по stripe создана для flask, поэтому я пытаюсь читать или смотреть учебники на youtube о том, как преобразовать ее в django, но у меня ничего не получается. Код в учебниках отличается от текущей документации по stripe
https://stripe.com/docs/checkout/integration-builder
from django.shortcuts import render, redirect
import stripe
from django.conf import settings
from django.http import JsonResponse
# Create your views here.
from django.views import View
from django.views.generic import TemplateView
stripe.api_key = settings.STRIPE_SECRET_KEY
class ProductLandingPageView(TemplateView):
template_name = "landing.html"
class CreateCheckoutSessionView(View):
def post(self, request, *args, **kwargs):
YOUR_DOMAIN = "http://127.0.0.1:8000"
checkout_session = stripe.checkout.Session.create(
payment_method_types=['card'],
line_items=[
{
# TODO: replace this with the `price` of the product you want to sell
'price': '{{PRICE_ID}}',
'quantity': 1,
},
],
mode='payment',
success_url=YOUR_DOMAIN + "/success",
cancel_url=YOUR_DOMAIN + "/cancel",
)
return redirect(checkout_session.url, code=303)
class Successview(TemplateView):
template_name = "success.html"
class Cancelview(TemplateView):
template_name = "cancel.html"
Я могу заставить checkout.html отображаться, но когда я нажимаю на кнопку checkout, я получаю эту ошибку
TypeError at /create-checkout-session
__init__() takes 1 positional argument but 2 were given
Request Method: POST
Request URL: http://127.0.0.1:8000/create-checkout-session
Django Version: 3.2.5
Exception Type: TypeError
Exception Value:
__init__() takes 1 positional argument but 2 were given
Exception Location: C:\Program Files\Python39\lib\site-packages\django\core\handlers\base.py, line 181, in _get_response
Python Executable: C:\Program Files\Python39\python.exe
Python Version: 3.9.5
Python Path:
['C:\\Users\\TYS\\Desktop\\Web Development\\Django\\stripetest_project',
'C:\\Program Files\\Python39\\python39.zip',
'C:\\Program Files\\Python39\\DLLs',
'C:\\Program Files\\Python39\\lib',
'C:\\Program Files\\Python39',
'C:\\Users\\TYS\\AppData\\Roaming\\Python\\Python39\\site-packages',
'C:\\Program Files\\Python39\\lib\\site-packages',
'C:\\Program Files\\Python39\\lib\\site-packages\\ibapi-9.76.1-py3.9.egg',
'C:\\Program Files\\Python39\\lib\\site-packages\\win32',
'C:\\Program Files\\Python39\\lib\\site-packages\\win32\\lib',
'C:\\Program Files\\Python39\\lib\\site-packages\\Pythonwin']
Server time: Tue, 17 Aug 2021 03:52:08 +0000
Я также попробовал код на этой странице
https://stripe.com/docs/payments/accept-a-payment?platform=web&ui=checkout
from django.shortcuts import render, redirect
import stripe
from django.conf import settings
from django.http import JsonResponse
# Create your views here.
from django.views import View
from django.views.generic import TemplateView
stripe.api_key = settings.STRIPE_SECRET_KEY
class ProductLandingPageView(TemplateView):
template_name = "landing.html"
class CreateCheckoutSessionView(View):
def post(self, request, *args, **kwargs):
YOUR_DOMAIN = "http://127.0.0.1:8000"
checkout_session = stripe.checkout.Session.create(
payment_method_types=['card'],
line_items=[{
'price_data': {
'currency': 'usd',
'product_data': {
'name': 'T-shirt',
},
'unit_amount': 2000,
},
'quantity': 1,
}],
mode='payment',
success_url=YOUR_DOMAIN + "/success",
cancel_url=YOUR_DOMAIN + "/cancel",
)
return redirect(checkout_session.url, code=303)
class Successview(TemplateView):
template_name = "success.html"
class Cancelview(TemplateView):
template_name = "cancel.html"
и все равно получаем ту же ошибку
Может ли кто-нибудь помочь мне исправить это?
Спасибо
Похоже, что это связано с отсутствием as_view()
в ваших определениях path
:
https://stackoverflow.com/a/53572256/12474862
Похоже, что это не ошибка, связанная с Stripe, а что-то в конфигурации Django.
Обновите ваш urls.py:
path('create-checkout-session', CreateCheckoutSessionView.as_view(), name='create-checkout-session'),