Stripe Checkout 价格错误 - 无效整数

Stripe Checkout Price error - Invalid Integer

我有一个 stripe 帐户并且正在使用测试 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。 填写完所有数据后,我们点击上述计划的付款,它会引发错误 'Invalid Integer 994.999999999'。

我尝试过的 $9.94、$9.96、$29.95 和其他值不会引发此错误。

这是结帐错误还是与我的设置有关??

错误截图-

jsfiddle 重现错误 - http://jsfiddle.net/f30z9uc6/2/

这里的问题是 Javascript 中的浮点错误。如果您查看 jsfiddle 的这个更新版本,您会看到发生了什么以及我是如何修复它的。您需要对计算结果进行四舍五入以确保最终得到一个整数:

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

要阅读有关 Javascript 和浮点运算的更多信息,您应该查看 The Floating-Point Guide

在将变量发送到 strip 之前,您必须四舍五入到最大值。 2 位小数。所以它会起作用。

为什么? 因为 Stripe 将您的值乘以 100,结果必须是整数 - 否则您会收到错误消息。

如果货币是美元,价值是美分而不是美元,所以 2,是 2 美分,50,是 50 美分。 显然。

在将值传递给后端之前,我在条带帐户中遇到了同样的问题,只需将您的值从对象转换为简单整数,就像这样

enter code here

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