'Stripe parameter_invalid_integer
I am trying to setup PaymentIntents API from Stripe and the amount needed to be passed to the API is very confusing.
Stripe Docs: All API requests expect amounts to be provided in a currency’s smallest unit. For example, to charge 10 USD, provide an amount value of 1000 (i.e., 1000 cents). For zero-decimal currencies, still provide amounts as an integer but without multiplying by 100. For example, to charge ¥500, provide an amount value of 500.
My frontend code to pass my backend the price:
const { data: clientSecret } = await axios.post("http://127.0.0.1:8000/paymentIntent/", {
amount: price * 100
});
My backend:
@api_view(['POST'])
def payment(request):
try:
amount = request.amount
paymentIntent = stripe.PaymentIntent.create(
amount = amount,
currency = "usd",
# capture_method='manual',
# metadata={'integration_check': 'accept_a_payment'},
)
data = paymentIntent.client_secret
If I put amount = 45 (random number for example), the payment intent works and everything goes through. If I put amount as the price from the request sent from my frontend,, it says this error message:
{
"error": {
"code": "parameter_invalid_integer",
"doc_url": "https://stripe.com/docs/error-codes/parameter-invalid-integer",
"message": "Invalid integer: {\"amount\":4300}",
"param": "amount",
"type": "invalid_request_error"
}
}
In the above error the price of the item is $43 so I just pass in 43 x 100, isn't that correct? Maybe the amount isn't being passed as an integer but It looks fine to me.
Solution 1:[1]
The error is saying you've passed a value of {\"amount\":4300}
-- it looks like you're accidentally passing some object instead of the integer value.
eg: you're sending something like amount={\"amount\":4300}
instead of the expected amount=4300
.
You need to review how amount
is being passed around and provided to the Payment Intent create call.
Update (not a fix): Try using a different variable name:
requestAmount = request.amount
paymentIntent = stripe.PaymentIntent.create(
amount = requestAmount,
currency = "usd",
)
Update 2: Likely need to parse the json body:
data = json.loads(request.body)
paymentIntent = stripe.PaymentIntent.create(
amount = data.amount,
currency = "usd",
)
Solution 2:[2]
check the result of price * 100 for example in javascript:
price=270.59
Logger.log(price*100) => 27058.999999999996
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 | |
Solution 2 |