Ошибка цены проверки полосы - неверное целое число

У меня есть страйп-аккаунт, и я использую тестовые ключи API.

Я создал план со следующей информацией -

{
  "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
}

Я использую checkout.js в моем проекте. После того, как все данные заполнены, и мы нажимаем на оплату вышеуказанного плана, возникает ошибка "Недействительное целое число 994.999999999".

Эта ошибка не возникает для $9,94, $9,96, $29,95 и других опробованных мной значений.

Это ошибка оформления заказа или что-то связанное с моими настройками??

Скриншот ошибки -

Полоса сообщение об ошибке

jsfiddle воспроизводит ошибку - http://jsfiddle.net/f30z9uc6/2/

3 ответа

Решение

Проблема здесь заключается в ошибке с плавающей точкой в ​​Javascript. Если вы посмотрите на эту обновленную версию вашего jsfiddle, вы увидите, что происходит и как я это исправил. Вам нужно округлить результат ваших расчетов, чтобы убедиться, что вы получите целое число:

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

Чтобы узнать больше о Javascript и арифметике с плавающей точкой, вам следует обратиться к Руководству по плавающей точке.

Прежде чем отправить переменную на полосу, вы должны округлить до макс. 2 десятичных знака. Так будет работать.

Зачем? Потому что Stripe умножает ваше значение на 100, и результат должен быть целым числом - в противном случае вы получите сообщение об ошибке.

Если валютой является доллар США, значение указывается в центах, а не в долларах, поэтому 2 означает 2 цента, 50 - 50 центов. По-видимому.

У меня была такая же проблема в учетной записи полосы перед передачей значения в бэкэнд, просто преобразуйте свое значение из объекта в простое целое число, подобное этому

enter code here

 const TotalItems = data
 .map(function(item) {
  return item.total;
})
.reduce(function(curval, newval) {
  return curval + newval;
});
Другие вопросы по тегам