关于 Stripe Checkout 价格错误:Stripe Checkout 价格错误 – Invalid Integer

Stripe Checkout Price error - Invalid Integer

我有一个条带帐户,并且正在使用测试 API 密钥。

我创建了一个包含以下信息的计划 -

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
{
 "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 和其他值不会引发此错误。

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

错误截图 -

Stripe

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


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

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

要阅读有关 Javascript 和浮点运算的更多信息,您应该查看浮点指南


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

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


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


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

1
2
3
4
5
6
7
8
9
enter code here

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