条纹结帐价格错误 - 无效整数

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;
);

【讨论】:

以上是关于条纹结帐价格错误 - 无效整数的主要内容,如果未能解决你的问题,请参考以下文章

Stripe 抛出无效的整数错误

在结帐时为条纹产品添加描述

条纹错误 - 您的卡的到期年份无效

Omnipay Paypal Express 结帐错误:安全标头无效

SVN 结帐失败,“块分隔符无效”

条纹元素抛出“未处理的承诺拒绝”