错误如图所示,安卓或者鸿蒙端就不贴出来了都是成功。PC端微信开发者工具也没有问题。
排查了很多错误,之前一直以为是前端获取当前URL在iOS端有问题,但最终发现并不是。
直接说原因,问题出在nonceStr(随机串)这个参数上。之前我的写法是
var nonceStr=Math.random();
得到的结果是一个0到1的随机数 比如0.6428883680931894。
但是iOS端最后得到的结果却是params_empty 参数为空,怀疑是这个小数在iOS端就是当0传了。
之后在测试中把这个随机串写死,比如 sadfasdfasdfasdfsadf ,这样在iOS端就验证通过了。
最后找了一个JS生成随机串的函数:
function random_str(len) {
let = len || 16;
var cchars = 'ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz2345678';
var maxPos = cchars.length;
var pwd = '';
for (i = 0; i < len; i++) {
pwd += cchars.charAt(Math.floor(Math.random() * maxPos));
}
return pwd;
}
生成了一个16位的随机串,至此iOS也就验证通过了.
官方文档也没有明确的要求这个随机串的格式,另外在安卓端 鸿蒙端 开发者工具端也都没问题,只能理解为iOS端对于这个小数的处理是有问题的.
希望帮助到遇到这个问题的朋友.