torment32
torment32

Reputation: 253

Stripe Checkout Price error - Invalid Integer

I have a stripe account and am using the test API keys.

I have created a Plan with following info -

{
  "amount": 995, 
  "created": 1418800758, 
  "currency": "usd", 
  "id": "c06e1791-1c6a-45fe-9c26-8f0c07dda967", 
  "interval": "month", 
  "interval_count": 1, 
  "livemode": false, 
  "metadata": {}, 
  "name": "Pro2", 
  "object": "plan", 
  "statement_description": null, 
  "statement_descriptor": null, 
  "trial_period_days": null
}

I'm using checkout.js in my project. Once all the data is filled and we click on pay for the above plan, it raises an error 'Invalid Integer 994.999999999'.

This error is not raised for the $9.94, $9.96, $29.95 and other values tried by me.

Is this a checkout bug or something to do with my settings ??

Screenshot of the error -

Stripe error message

jsfiddle reproducing the error - http://jsfiddle.net/f30z9uc6/2/

Upvotes: 25

Views: 26727

Answers (4)

Alexander Mills
Alexander Mills

Reputation: 100070

If currency is USD, the value is in cents not dollars, so 2, is 2 cents, 50, is 50 cents. Evidently.

Upvotes: 4

Syed Umair Shah
Syed Umair Shah

Reputation: 1

i was getting the same issue in stripe account before passing the value to the backend just convert your value from object to the simple integer like this

enter code here

 const TotalItems = data
 .map(function(item) {
  return item.total;
})
.reduce(function(curval, newval) {
  return curval + newval;
});

Upvotes: 0

mart
mart

Reputation: 354

Before you send the variable to strip you have to round to max. 2 decimals. So it will work.

Why? Because Stripe multiplies your value with 100 and the result has to be an integer - otherwise you get the error message.

Upvotes: 4

koopajah
koopajah

Reputation: 25572

The problem here is a floating point error in Javascript. If you look at this updated version of your jsfiddle you'll see what's happening and how I fixed it. You need to round the result of your calculation to ensure you end up with an integer:

var amount = Math.round(9.95*100); // gives 995

To read more about Javascript and floating point arithmetic you should look into The Floating-Point Guide

Upvotes: 43

Related Questions