Платежное намерение 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 на всех языках. Чистое отлавливание ошибки в вашем коде позволит вам сразу увидеть ошибку и то, откуда она взялась.