MarkGo
MarkGo
  • 发布:2022-05-06 13:58
  • 更新:2022-05-06 14:08
  • 阅读:575

【已解决】【报Bug】支付宝支付-IOS闪退[]

分类:uni-app

产品分类: uniapp/App

PC开发环境操作系统: Windows

PC开发环境操作系统版本号: WIN10

HBuilderX类型: 正式

HBuilderX版本号: 3.4.7

手机系统: iOS

手机系统版本号: iOS 15

手机厂商: 苹果

手机机型: Iphone Xr

页面类型: vue

vue版本: vue2

打包方式: 云端

项目创建方式: HBuilderX

操作步骤:
                        uni.requestPayment({  
                            provider:'alipay',  
                            orderInfo:res.data,  
                            success: function(res){  
                                uni.navigateTo({  
                                    url:'/pages/order/detail?serial='+Serial  
                                })  
                            },  
                            fail:function(){  
                                uni.showToast({  
                                    icon:'error',  
                                    title:'支付失敗'  
                                })  
                            }  
                        })

预期结果:

支付成功/失败

实际结果:

闪退

bug描述:

安卓下正常能支付成功;
IOS下直接闪退
自定义基座和正式版本都这样。

2022-05-06 13:58 负责人:DCloud_iOS_XHY 分享
已邀请:
MarkGo

MarkGo (作者) - mark

发现问题了,
SDK中的out_trade_no必须是字符串,不能是数字;
当out_trade_no为数字时,安卓正常,但是IOS会异常,猜测是前端验签的时候IOS和安卓处理不一致导致的。

解决方法PHP:
原来:

                $object = new \stdClass();  
                $object->total_amount = $onlinePay*1;  
                $object->subject = mb_substr($row->productName,0,32,'UTF-8').'...';  
                $object->time_expire = date("Y-m-d H:i:s", "${endDate}");  
                $object->out_trade_no = $row->reqID;

修改为:

                $object = new \stdClass();  
                $object->total_amount = $onlinePay*1;  
                $object->subject = mb_substr($row->productName,0,32,'UTF-8').'...';  
                $object->time_expire = date("Y-m-d H:i:s", "${endDate}");  
                $object->out_trade_no = strval($row->reqID);

即out_trade_no强制转为字符类型即可。

该问题目前已经被锁定, 无法添加新回复