Stripe超1000美元订单显示1美元扣费问题技术求助
问题分析与解决方案
我一眼就看出问题出在你用的number_format()函数上!
当订单金额超过1000美元时,number_format($grand_total, 2)会返回带千位分隔符的字符串,比如1,200.00。而PHP在把这个字符串转换成数字进行乘法运算时,会遇到逗号就停止解析——结果"1,200.00"会被当成1来处理,乘以100后就变成了100分(也就是1美元),这正好对应你遇到的异常情况!
解决方法有两种,选哪种都可以:
方案一:直接跳过number_format,用原始数值转换
既然Stripe只需要整数形式的“分”,直接把原始订单金额乘以100后转成整数就行,完全没必要先格式化字符串:// 基础写法,适用于$grand_total精度没问题的情况 $charge_amount = (int)($grand_total * 100); // 如果担心浮点数精度问题,先做四舍五入处理 $charge_amount = (int)round($grand_total * 100);方案二:保留number_format,但去掉千位分隔符
如果你因为其他需求必须用number_format,记得显式关闭千位分隔符的生成(number_format默认会加逗号):// 第四个参数设置为空字符串,就不会生成千位分隔符了 $charge_amount = number_format($grand_total, 2, '.', '') * 100;
最后提醒下:Stripe的amount参数必须是整数类型的分,所以确保最终的$charge_amount是整数,别传字符串或者小数进去哦。
内容的提问来源于stack exchange,提问作者JAS
相关产品推荐
相关产品推荐

