问题场景:
调用微信扫一扫的 sdk时,安卓系统没有问题,苹果系统怎么点击都没反应
解决一:扫一扫的页面,是需要给接口传递当前页面地址生成签名的,ios系统不行,不能访问根路径/的地址,访问根路径,微信会用根路径签名,签名会过不去(必须用当前页面地址签名),所以项目a页面跳转b页面(有扫一扫按钮的页面)时,最好是location.href的方式跳转到b页面
window.location.href = import.meta.env.VITE_APP_CONTEXTURL + '/ticket-verificate'
解决二:根据官网要求调用ready方法,在 config信息验证后会执行ready方法,所有接口调用都必须在config接口获得结果之后 概述 | 微信开放文档
// 获取微信jsdk配置 扫一扫
const sdkData = ref({})
const urlsdk = location.href
const onClickScanIt = async () => {
useData.value = {}
const { code, data, msg } = await apiGetJssdkConfig({ url: urlsdk })
if (code == 200) {
sdkData.value = data
wx.config({
beta: true,// 必须这么写,否则wx.invoke调用形式的jsapi会有问题
appId: import.meta.env.VITE_APP_ID, // 必填,公众号的唯一标识
timestamp: data.timeStamp, // 必填,生成签名的时间戳 <%= Html.Encode(ViewData["timestamp" ]) %>
nonceStr: data.nonceStr, // 必填,生成签名的随机串
signature: data.signature, // 必填,签名
jsApiList: ['checkJsApi', 'scanQRCode'] // 必填,需要使用的JS接口列表, 这里只需要调用扫一扫
});
wx.ready(function () {
wx.scanQRCode({
needResult: 1, // 默认为0,扫描结果由微信处理,1则直接返回扫描结果,
scanType: ["qrCode", "barCode"], // 可以指定扫二维码还是一维码,默认二者都有
success: function (res) {
console.log("调用扫描成功", res);
var result = res.resultStr; // 当needResult 为 1 时,扫码返回的结果
searchValue.value = result;
getUseorderinfo();
},
error: function (res) {
console.log(res)
if (res.errMsg.indexOf('function_not_exist') > 0) {
alert('版本过低请升级')
}
}
});
wx.error(function (res) {
alert("错误信息:" + JSON.stringify(res));
});
})
}
}