记录一次支付宝无法跳转到支付页面Bug处理过程
背景
使用apicloud将h5项目打包成app,在该项目中用到了支付宝付款的api,流程是前端将订单信息提交到后端,后端返回一个url,前端跳转到这个url,页面如下。在浏览器中可以正常跳转到支付宝付款页面,打包成app后在安卓高版本中有些机型无法打开支付宝。
调试过程
尝试获取报错信息
打不开的话,按经验来说应该会有报错,要解决问题,首先要获取到报错信息或者警告信息。但这是外部界面,又在app中才能复现,log没有那么好获取。获取log尝试如下:
1 apicloud是否有什么配置,可以在app中弹出log,经过寻找没有找到。
2 apocloud真机同步,可以在apicloud studio中输出日志。但是不知道打开方式不对还是怎么样,现在的项目是老项目翻新的,同步死活连不上。于是新建了一个项目,编译自定义loader,成功同步了,一点点从老项目搬运代码到新项目。获取警告如下:
[WARN] 已设置yuyanId,其他 id 将不生效 at index.umd.min.js:1
但没查到有用信息,然后悲剧的是第二天新项目也无法同步了,再新建项目也不行,各种尝试后决定使用其他方法。
3 尝试给支付宝页面插入一段加载vconsole的js。思路是打开新页面的同时,给新页面插入一段js代码,查了一下好像没有直接实现的方法。变通一下,在iframe中打开支付宝页面,然后在iframe中插入js代码。
结果在iframe中内嵌支付宝页面显示不正常,操作部分的按钮没有加载出来。
获取报错信息失败,尝试使用openApp
openApp是apicloud提供的一个方法,可以打开其他应用。然后发现兼容性很差,安卓高版本中提示“未找到可执行的应用”,我猜测是安卓高版本中无法直接访问data。所以获取不到对应的应用。
退一步,通过浏览器跳转到支付宝
实在无法解决,只能在浏览器中打开支付宝页面,再在浏览者跳转到支付宝付款页面了。摆烂一点,直接把url暴露出来,让用户复制到手机浏览器中打开。稍微优化一点,直接打开浏览器。
使用apicloud的jumpBrowser模块,使用前必须要在APP先添加jumpBrowser模块;然后再具体代码使用处引入。
引入示例代码:
let jumpbrowser=api.require('jumpbrowser');
真正使用方式:
let param = {Url:"http://www.baidu.com"};
jumpbrowser.jumpBrowser(param, function(ret, err){
});
}
打开浏览器参考了以下链接
https://blog.csdn.net/LiAly66/article/details/127725909