条纹结帐价格错误 - 无效整数
Posted
技术标签:
【中文标题】条纹结帐价格错误 - 无效整数【英文标题】:Stripe Checkout Price error - Invalid Integer 【发布时间】:2015-03-17 12:40:08 【问题描述】:我有一个条带帐户,并且正在使用测试 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/
【问题讨论】:
错误到底发生在哪里?创建令牌时在 Stripe Checkout 上还是在创建费用或订阅时在服务器上?你能分享你的代码吗?您是否尝试计算金额,然后可能是舍入错误问题? 在创建令牌之前结帐时出现错误。而且价格是静态的。从条纹计划中获取。995
的数量如下所示:jsfiddle.net/4ykh2dh7 一定有其他事情发生。你能显示一个发生这种情况的 URL 吗?您必须有一些东西可以解析价格并将data-amount
设置为错误的值
@koopajah 我能够重现 jsfiddle 中的错误 - jsfiddle.net/f30z9uc6/2
【参考方案1】:
这里的问题是 javascript 中的浮点错误。如果您查看jsfiddle 的更新版本,您会看到发生了什么以及我是如何修复它的。您需要对计算结果进行四舍五入,以确保最终得到一个整数:
var amount = Math.round(9.95*100); // gives 995
要了解有关 Javascript 和浮点运算的更多信息,您应该查看 The Floating-Point Guide
【讨论】:
这对我使用 Stripe 数量很有用。如果有人需要,可以这样工作:Math.round(TotalPrice.toFixed(2)*100)
四舍五入是否使价格金额为 +/- @MatthewBennett?
是和不是。我的意思是你可能会损失十分之一美分,但这似乎并不重要。如果重要,您可以随时进行汇总。
到目前为止似乎有效,@codemilan,至少在我检查过的所有价格方面。 Stripe 最近提出了几个小数错误,但我认为这与其他内容有关,而不是这段代码。【参考方案2】:
在将变量发送到剥离之前,您必须四舍五入到最大值。 2 位小数。所以它会起作用。
为什么? 因为 Stripe 将您的值乘以 100,结果必须是整数 - 否则您会收到错误消息。
【讨论】:
【参考方案3】:如果货币是美元,价值是美分而不是美元,所以 2 是 2 美分,50 是 50 美分。 显然。
【讨论】:
【参考方案4】:在将值传递给后端之前,我在条带帐户中遇到了同样的问题,只需将您的值从对象转换为像这样的简单整数
enter code here
const TotalItems = data
.map(function(item)
return item.total;
)
.reduce(function(curval, newval)
return curval + newval;
);
【讨论】:
以上是关于条纹结帐价格错误 - 无效整数的主要内容,如果未能解决你的问题,请参考以下文章