Checkout 条带签出价格错误-无效整数

Checkout 条带签出价格错误-无效整数,checkout,stripe-payments,Checkout,Stripe Payments,我有一个条带帐户,正在使用测试API密钥 我创建了一个包含以下信息的计划- { "amount": 995, "created": 1418800758, "currency": "usd", "id": "c06e1791-1c6a-45fe-9c26-8f0c07dda967", "interval": "month", "interval_count": 1, "livemode": false, "metadata": {}, "nam

我有一个条带帐户,正在使用测试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.99999999”

对于我尝试的$9.94、$9.96、$29.95和其他值,不会出现此错误

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

错误截图-


JSFIDLE复制错误-

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

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

要了解更多有关Javascript和浮点运算的信息,在将变量发送到strip之前,您应该先了解一下

,然后再将变量四舍五入到最大2位小数。所以它会起作用

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

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

在将值传递到后端之前,我在stripe帐户中遇到了相同的问题,只需将您的值从object转换为简单的整数,如下所示

enter code here

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

错误到底发生在哪里?创建令牌时在条带上签出,或创建费用或订阅时在服务器上签出?你能分享你的代码吗?您是否正在尝试计算金额,然后可能出现舍入错误问题?该错误发生在创建令牌之前的签出时。价格是静态的。从条带计划中提取。金额
995
如下所示:一定有其他事情发生。你能显示一个发生这种情况的URL吗?你一定有什么东西在解析价格,并将数据量设置为错误的value@koopajah我能够在JSFIDLE中重现错误——这对我来说只是条带数量有用。如果有人需要它,它是这样工作的:
Math.round(TotalPrice.toFixed(2)*100)
四舍五入是否会使amount@MatthewBennett的价格增加+/-呢?是和否。我的意思是你可能会损失十分之一美分,但这似乎并不重要。“如果有什么问题,你可以随时凑齐。到目前为止,似乎还有效,@codemilan,至少从我查过的所有价格来看是如此。”。Stripe最近引发了几个十进制错误,但我认为这与其他东西有关,而不是这段代码。