2015-01-19 3 views
5

У меня есть учетная запись stripe и я использую ключи API проверки.Stripe Checkout Ошибка в цене - Invalid Integer

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

{ 
    "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 в моем проекте. После того, как все данные будут заполнены, и мы нажмем на оплату вышеуказанного плана, вы получите сообщение об ошибке «Invalid Integer 994.999999999».

Эта ошибка не поднята для $ 9.94, $ 9.96, $ 29.95 и других значений, которые я использовал.

Это ошибка проверки или что-то делать с моими настройками?

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

Stripe error message

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

+0

Какая ошибка происходит точно? На странице «Проверка полосы» при создании маркера или на сервере при создании заряда или подписки? Не могли бы вы поделиться своим кодом? Вы пытаетесь рассчитать сумму, а затем, возможно, проблему с округлением? – koopajah

+0

Ошибка при проверке перед созданием токена. И цена статична. Поставляется из плана полосы. – torment32

+0

количество '995' работает, как показано здесь: http://jsfiddle.net/4ykh2dh7/ должно быть что-то еще. Можете ли вы показать URL-адрес, где это происходит? У вас должно быть что-то синтаксическое вычисление цены и установка 'data-amount' на неправильное значение – koopajah

ответ

15

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

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

Чтобы прочитать больше о Javascript и арифметики с плавающей точкой, вы должны смотреть в The Floating-Point Guide

+1

Это было просто полезно для меня с суммой Stripe. Работает так, если кому-то это нужно: 'Math.round (TotalPrice.toFixed (2) * 100)' –

-1

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

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

Смежные вопросы