2015-01-19 20 views
5

Mam konto paska i używam testowych kluczy API.Stripe Checkout Cena error - Invalid Integer

Stworzyłem plan z następującą informacją -

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

Używam checkout.js w moim projekcie. Po wypełnieniu wszystkich danych i kliknięciu opcji zapłaty za powyższy plan, powstaje błąd "Nieważna liczba całkowita 994.999999999".

Ten błąd nie został podniesiony dla 9,94 USD, 9,96 USD, 29,95 USD i innych wartości wypróbowanych przeze mnie.

Czy jest to błąd kasy lub coś związanego z moimi ustawieniami?

Zrzut ekranu z błędem -

Stripe error message

jsfiddle odtworzenia błędu - http://jsfiddle.net/f30z9uc6/2/

+0

Gdzie dokładnie się dzieje błąd? On Stripe Checkout podczas tworzenia tokena lub na serwerze podczas tworzenia opłaty lub subskrypcji? Czy możesz udostępnić swój kod? Czy próbujesz obliczyć kwotę, a następnie może problem z błędem zaokrąglania? – koopajah

+0

Błąd występuje przy kasie przed utworzeniem tokena. A cena jest statyczna. Pochodzi z planu pasków. – torment32

+0

Kwota '995' działa tak, jak pokazano tutaj: http://jsfiddle.net/4ykh2dh7/ musi być coś innego. Czy możesz pokazać adres URL, gdzie to się dzieje? Musisz mieć coś parsującego cenę i ustawiającego 'data-amount' na niewłaściwą wartość – koopajah

Odpowiedz

15

Problemem tutaj jest błąd pływający punkt w JavaScript. Jeśli spojrzysz na tę zaktualizowaną wersję swojego jsfiddle, zobaczysz, co się dzieje i jak to naprawiłem. Trzeba zaokrąglić wynik kalkulacji, aby upewnić się skończyć z całkowitą:

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

aby przeczytać więcej o JavaScript i arytmetyce zmiennoprzecinkowej należy spojrzeć na The Floating-Point Guide

+1

To było po prostu przydatne dla mnie z ilością pasków. Działa tak, jeśli ktoś tego potrzebuje: 'Math.round (TotalPrice.toFixed (2) * 100)' –

-1

Przed wysłaniem zmienną rozebrać musisz zaokrąglić do max. 2 miejsca dziesiętne. Więc to zadziała.

Dlaczego? Ponieważ Stripe mnoży twoją wartość przez 100, a wynik musi być liczbą całkowitą - w przeciwnym razie pojawi się komunikat o błędzie.