美文网首页
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