一、问题概述
scanqrcode:permissiondenied是指在使用H5页面中的JSAPI扫码功能,请求该能力时返回的错误码。该错误码表明当前应用程序没有获取到使用扫码功能的权限,导致无法进行该操作。
二、可能原因
1、未获取扫码权限
wx.config({
beta: true,
debug: false,
appId: '',
timestamp: 1000000000,
nonceStr: '',
signature: '',
jsApiList: ['scanQRCode']
});
wx.ready(function () {
// 在这里调用扫一扫API
wx.scanQRCode();
});
上述代码为微信 JSAPI 调用方式,其中需要申请“扫一扫”API权限,若未申请,调用对应的接口会被拒绝。
2、应用未通过认证
var div_qrcode = document.getElementById("qrcode");
wx.config({
beta: true,
debug: false,
appId: '',
timestamp: 1000000000,
nonceStr: '',
signature: '',
jsApiList: ['openWXDeviceLib']
});
wx.ready(function () {
wx.invoke('openWXDeviceLib', {}, function (res) {
div_qrcode.innerText = "开始扫描";
wx.scanQRCode({
success: function (res) {
div_qrcode.innerText = "扫描成功";
},
fail: function (res) {
div_qrcode.innerText = "扫描失败,请重试";
}
});
});
});
上述代码中使用了”openWXDeviceLib”接口,需要应用通过微信公众平台的认证,并且应用具有对应接口的权限才可以调用,未经认证的应用无法进行该操作。
三、解决方案
1、正确申请权限
wx.config({
beta: true,
debug: false,
appId: '',
timestamp: 1000000000,
nonceStr: '',
signature: '',
jsApiList: ['scanQRCode']
});
wx.ready(function () {
wx.checkJsApi({
jsApiList: ['scanQRCode'],
success: function (res) {
if (res.checkResult.scanQRCode) {
wx.scanQRCode();
} else {
alert('请先调用wx.config接口注入所需权限');
}
}
});
});
可以用checkJsApi方法验证调用JSAPI是否成功,并且可以同时检验多个JSAPI是否可用,如果返回的checkResult属性中对应JSAPI为true,则表示当前应用具备调用该JSAPI的权限,可直接使用。
2、检查设备网络状态
wx.checkJsApi({
jsApiList: [
'getNetworkType',
'startRecord',
'stopRecord',
'translateVoice',
'onMenuShareTimeline',
'onMenuShareAppMessage'
],
success: function (res) {
console.log(JSON.stringify(res));
document.getElementById("btn").onclick = function () {
wx.checkJsApi({
jsApiList: ['scanQRCode'],
success: function (res) {
if (res.checkResult.scanQRCode) {
wx.scanQRCode({
needResult: 1,
scanType:["qrCode"],
success: function (res) {
alert(res.resultStr);
},
fail: function (res) {
alert(JSON.stringify(res));
}
});
} else {
alert("请先调用wx.config注入相关权限");
}
}
});
};
}
});
通过检查微信环境中网络状态,如果设备的网络状态欠佳,可引导用户利用其他网络环境,或者重新加载页面,以确保能够获取到使用扫码功能的权限。
四、小结
以上就是scanqrcode:permissiondenied问题的解析,对于该问题的解决方案,可以通过正确申请权限,检查设备网络状态等多方面展开。在开发过程中,需要认真排查错误,仔细检查代码问题,从不同角度思考问题的可能性,以确保应用程序的正常运行。
原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/256533.html