美文网首页
iOS11支付宝报“暂时无法获取订单信息,请稍后重试”

iOS11支付宝报“暂时无法获取订单信息,请稍后重试”

作者: 追云JackWu | 来源:发表于2017-10-20 18:00 被阅读0次

昨天朋友向我求救一个奇葩的Bug:

iOS11下,APP内支付宝打赏功能,打赏金额0.1元,会失败,并提示“暂时无法获取订单信息,请稍后重试”,奇葩的是打赏0.5元可以成功,打赏0.51元会失败!

APP报错信息截图

解决办法(先上结果)

我把代码要了过来,关键段如下

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支付请求参数说明

App支付请求参数说明局部截图
  • 到此问题确实解决了。但是还有另外一个疑问?同样是没有设置小数点,为什么iOS10下,却是正常的?

原来是 代码@([priceStr doubleValue]) ,基本数据类型转对象后,通过字符流传输给后台(Java做的),后台接收到的数字小数点后末尾0的位数是不稳定的,iOS10下凑巧OK,iOS11就会偶尔出错。(本质是他们后台Java写得太弱了,也不控制下位数,前端和后台都有责任,都不看官方文档的)

相关文章

网友评论

      本文标题:iOS11支付宝报“暂时无法获取订单信息,请稍后重试”

      本文链接:https://www.haomeiwen.com/subject/douvuxtx.html