2015-01-19 4 views
5

Ich habe ein Stripe-Konto und verwende die Test-API-Schlüssel.Stripe Checkout Preis Fehler - Ungültige Ganzzahl

Ich habe einen Plan mit folgenden Informationen erstellt -

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

Ich checkout.js in meinem Projekt verwenden. Sobald alle Daten gefüllt sind und wir auf "Bezahlen" für den obigen Plan klicken, wird der Fehler "Invalid Integer 994.999999999" angezeigt.

Dieser Fehler wird nicht für die $ 9,94, $ 9,96, $ 29,95 und andere von mir versuchte Werte ausgelöst.

Ist das ein Bug Kasse oder etwas mit meinen Einstellungen zu tun ??

Screenshot des Fehlers -

Stripe error message

jsfiddle den Fehler reproduzieren - http://jsfiddle.net/f30z9uc6/2/

+0

Wo genau passiert der Fehler? On Stripe Checkout beim Erstellen des Tokens oder auf dem Server beim Erstellen einer Gebühr oder eines Abonnements? Könnten Sie Ihren Code teilen? Versuchen Sie, den Betrag zu berechnen und dann möglicherweise ein Rundungsfehlerproblem? – koopajah

+0

Der Fehler tritt beim Auschecken auf, bevor das Token erstellt wird. Und der Preis ist statisch. Aus dem Stripe-Plan. – torment32

+0

die Menge '995' funktioniert wie hier gezeigt: http://jsfiddle.net/4ykh2dh7/ da muss noch etwas anderes los sein. Können Sie eine URL anzeigen, wo dies geschieht? Sie müssen etwas parsing den Preis und die Einstellung "Datenmenge" auf den falschen Wert haben – koopajah

Antwort

15

Das Problem hier ist ein Floating-Point-Fehler in Javascript. Wenn Sie sich diese aktualisierte Version Ihrer jsfiddle ansehen, werden Sie sehen, was passiert und wie ich es behoben habe. Sie müssen das Ergebnis Ihrer Berechnung runden Sie mit einer ganzen Zahl am Ende zu gewährleisten:

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

Um mehr über Javascript und Gleitkomma-Arithmetik lesen Sie in The Floating-Point Guide

+1

Dies war nur nützlich für mich mit Streifenbeträgen. Funktioniert so, wenn jemand es benötigt: 'Math.round (TotalPrice.toFixed (2) * 100)' –

-1

aussehen sollten, bevor Sie die Variable senden abzustreifen Du musst auf max runden. 2 Dezimalstellen. So wird es funktionieren.

Warum? Da Stripe multipliziert Ihren Wert mit 100 und das Ergebnis muss eine ganze Zahl sein - andernfalls erhalten Sie die Fehlermeldung.