Интеграция 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'),
Вернуться на верх