web-dev-qa-db-ja.com

ストライプチェックアウト価格エラー-無効な整数

ストライプアカウントを持っていて、テスト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ドルなど、私が試した値では発生しません。

これはチェックアウトのバグですか、それとも私の設定と関係がありますか?

エラーのスクリーンショット-

Stripe error message

エラーを再現するjsfiddle http://jsfiddle.net/f30z9uc6/2/

13
torment32

ここでの問題は、Javascriptの浮動小数点エラーです。 jsfiddle のこの更新されたバージョンを見ると、何が起こっているのか、そして私がそれをどのように修正したのかがわかります。最終的に整数になるように、計算結果を丸める必要があります。

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

Javascriptと浮動小数点演算の詳細については、 浮動小数点ガイド を調べる必要があります。

27
koopajah

変数をストリップに送信する前に、最大に丸める必要があります。小数点以下2桁。だからそれはうまくいくでしょう。

どうして? Stripeは値に100を乗算し、結果は整数でなければならないため、そうでない場合はエラーメッセージが表示されます。

2
mart

通貨がUSDの場合、値はドルではなくセントであるため、2は2セント、50は50セントです。どうやら。

2
Alexander Mills

値をバックエンドに渡す前に、ストライプアカウントで同じ問題が発生していました。値をオブジェクトから、このような単純な整数に変換するだけです。

enter code here

 const TotalItems = data
 .map(function(item) {
  return item.total;
})
.reduce(function(curval, newval) {
  return curval + newval;
});
0
Syed Umair Shah