昨天朋友向我求救一个奇葩的Bug:
APP报错信息截图iOS11下,APP内支付宝打赏功能,打赏金额0.1元,会失败,并提示“暂时无法获取订单信息,请稍后重试”,奇葩的是打赏0.5元可以成功,打赏0.51元会失败!
解决办法(先上结果)
我把代码要了过来,关键段如下
NSString *priceStr = _isSelectPrice;//获取金额
NSMutableDictionary *param = [NSMutableDictionary dictionary];
[param setObject:@([priceStr doubleValue]) forKey:@"rewardAmount"];//设置金额
改为以下代码,问题就解决了(设置金额的有效小数位为2)
NSString *priceStr=[NSString stringWithFormat:@"%.2f",[_isSelectPrice doubleValue]];//获取金额
NSMutableDictionary *param = [NSMutableDictionary dictionary];
[param setObject:priceStr forKey:@"rewardAmount"];//设置金额
解决问题的过程
- 思路1:iOS10是OK的,iOS11有问题,难道是iOS11新特性?
- 思路2:打赏0.1元失败,0.5元成功,问题跟数字紧密相关,难道是支付宝通道问题?
翻查支付宝开发平台文档,找到了问题的关键,价格位数需要精确到小数点后两位
支付宝—App支付请求参数说明
- 到此问题确实解决了。但是还有另外一个疑问?同样是没有设置小数点,为什么iOS10下,却是正常的?
原来是 代码@([priceStr doubleValue]) ,基本数据类型转对象后,通过字符流传输给后台(Java做的),后台接收到的数字小数点后末尾0的位数是不稳定的,iOS10下凑巧OK,iOS11就会偶尔出错。(本质是他们后台Java写得太弱了,也不控制下位数,前端和后台都有责任,都不看官方文档的)
网友评论