Платежное намерение Stripe выбрасывает недействительное целое число

Я пытался сгенерировать намерение оплаты stripe, но я вижу эту ошибку invalid Integer

Traceback (most recent call last):

  File "/usr/local/lib/python3.8/site-packages/asgiref/sync.py", line 472, in thread_handler

    raise exc_info[1]

  File "/usr/local/lib/python3.8/site-packages/django/core/handlers/exception.py", line 42, in inner

    response = await get_response(request)

  File "/usr/local/lib/python3.8/site-packages/django/core/handlers/base.py", line 253, in _get_response_async

    response = await wrapped_callback(

  File "/usr/local/lib/python3.8/site-packages/asgiref/sync.py", line 435, in __call__

    ret = await asyncio.wait_for(future, timeout=None)

  File "/usr/local/lib/python3.8/asyncio/tasks.py", line 455, in wait_for

    return await fut

  File "/usr/local/lib/python3.8/concurrent/futures/thread.py", line 57, in run

    result = self.fn(*self.args, **self.kwargs)

  File "/usr/local/lib/python3.8/site-packages/asgiref/sync.py", line 476, in thread_handler

    return func(*args, **kwargs)

  File "/usr/local/lib/python3.8/contextlib.py", line 75, in inner

    return func(*args, **kwds)

  File "/usr/local/lib/python3.8/site-packages/django/views/decorators/csrf.py", line 54, in wrapped_view

    return view_func(*args, **kwargs)

  File "/usr/local/lib/python3.8/site-packages/django/views/generic/base.py", line 84, in view

    return self.dispatch(request, *args, **kwargs)

  File "/usr/local/lib/python3.8/site-packages/rest_framework/views.py", line 509, in dispatch

    response = self.handle_exception(exc)

  File "/usr/local/lib/python3.8/site-packages/rest_framework/views.py", line 469, in handle_exception

    self.raise_uncaught_exception(exc)

  File "/usr/local/lib/python3.8/site-packages/rest_framework/views.py", line 480, in raise_uncaught_exception

    raise exc

  File "/usr/local/lib/python3.8/site-packages/rest_framework/views.py", line 506, in dispatch

    response = handler(request, *args, **kwargs)

  File "/yacht-away/bookings/views.py", line 94, in post

    print(payment.create_payment_intent())

  File "/yacht-away/bookings/payments.py", line 14, in create_payment_intent

    payment = stripe.PaymentIntent.create(

  File "/usr/local/lib/python3.8/site-packages/stripe/api_resources/abstract/createable_api_resource.py", line 22, in create

    response, api_key = requestor.request("post", url, params, headers)

  File "/usr/local/lib/python3.8/site-packages/stripe/api_requestor.py", line 122, in request

    resp = self.interpret_response(rbody, rcode, rheaders)

  File "/usr/local/lib/python3.8/site-packages/stripe/api_requestor.py", line 399, in interpret_response

    self.handle_error_response(rbody, rcode, resp.data, rheaders)

  File "/usr/local/lib/python3.8/site-packages/stripe/api_requestor.py", line 159, in handle_error_response

    raise err

stripe.error.InvalidRequestError: Request req_4TngiwH4P1ztKp: Invalid integer: {:"0"=>"2400"}

Я следовал этой документации и написал класс оплаты следующим образом -

class Payments:
    def __init__(self, amount):
        self.amount = amount,
        self.currency = "sgd",
        self.automatic_payment_methods = {"enabled": True}

        stripe.api_key = "sk_test_51LAvboSE9yL96I7XGzEIe7GQyAPWbVHMBULDK4yw0raYGn2NF4ksodn8nF7V5HKtKNiPMnOPOCd1neNcqolGXPjG00vCJUTtuX"

    def create_payment_intent(self):
        payment = stripe.PaymentIntent.create(
            payment_method_types=["paynow"],
            payment_method_data={"type": "paynow"},
            amount=self.amount,
            currency=self.currency,
        )
        print(payment)

Вот как я вызывал метод намерения оплаты -

payment = Payments(
            amount=int(bill["payable_amount"]) * 100,
        )

Где я ошибаюсь? Код выглядит хорошо, и я использую тот же api_key, который указан в документации.

Внизу вашего вопроса вы поделились id запроса req_4TngiwH4P1ztKp, который можно загрузить непосредственно в вашей панели управления Stripe здесь: https://dashboard.stripe.com/test/logs/req_4TngiwH4P1ztKp

Сообщение об ошибке также пытается показать, что вы сделали неправильно, так как оно гласит

Недопустимое целое число: {:"0"=>"2400"}

Обычно это означает, что вы передаете параметр не так, как ожидает API. Где-то он ожидает целое число, но вместо этого вы передали хэш, где целое число связано с ключом 0. Единственный параметр, передаваемый вашим кодом, который должен быть целым числом, это amount. Это означает, что ваш self.amount сейчас, вместо того, чтобы быть 2400, является { 0: '2400'}, вероятно, из-за того, как вы отправляете его от вашего клиента. Это та часть, которую вы хотите отладить.

Я также рекомендую внимательно прочитать документацию Stripe по обработке ошибок, поскольку она охватывает основы их API на всех языках. Чистое отлавливание ошибки в вашем коде позволит вам сразу увидеть ошибку и то, откуда она взялась.

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