最近在使用uniapp开始微信扫一扫功能,现在对这块做一个总结
1.解决跨越问题。后端接口通过花生壳内网穿透方式访问(http://97489ltvk625.vicp.fun/prod-api)
2.登录公众号配置js安全域名(不需要加http/https协议前缀例:97489ltvk625.vicp.fun)
3有需要微信授权登录的额外配置授权登录域名。类似2
4 导入jssdk模块 import jWeixin from 'weixin-js-sdk'
5. 初始化jssdk。这里一定要注意 jsApiList传的是对象.不是字符串.苹果手机如果传的是jsApiList:"['checkJsApi','scanQRCode'] "会导致errMsg: "config:fail。要没其他提示。我觉得这是个最大的坑。
let url= location.href.split('#')[0] //需要携带http前缀,hash模式只需要#号前面的网址。苹果手机如果不是hash模式需要在app.vue里获得第一次访问的链接保存作为后端url参数。url不能使用encodeURIComponent() 方法
uni.request({
url: 'http://97489ltvk625.vicp.fun/prod-api/wechat/initJsApiConfig.do',//这里是后台访问链接
method: 'POST',
data:{
url:url //签名使用的url参数。
},
header:{
'Content-Type' : 'application/x-www-form-urlencoded' //根据自己需求自行配置
},
dataType: 'json',
success: res => {
let wx_co = res.data.data
// 通过config接口注入权限设置,config信息由后端提供
jWeixin.config({
debug: true, // 是否开启调试模式
appId: wx_co.appId, // 必填,公众号的唯一标识
timestamp: wx_co.timestamp, // 必填,生成签名的时间戳
nonceStr: wx_co.nonceStr, // 必填,生成签名的随机串
signature: wx_co.signature, // 必填,签名,见附录1
jsApiList: ['scanQRCode'] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
//jsApiList一定一定不能用字符串包起来。否则苹果手机报错。初始化不了
});
// config 信息严重失败会执行该函数
jWeixin.error(function (err) {
alert("错误信息:" + JSON.stringify(err));
});
},
fail: (err) => {
console.info('接口请求失败...',err)
},
});
6调用扫码
jWeixin.scanQRCode({
needResult: 1, // 默认为0,扫描结果由微信处理,1则直接返回扫描结果,
scanType: ["barCode"], //"qrCode"二维码,"barCode"条形码
success: function(res)
var result = res.resultStr; // 当needResult 为 1 时,扫码返回的结果
},
fail(err){
log.info(err)
}
});
最后的最后如果还是有问题。还是下载微信开发者工具。在里面输入网站可以看到报错信息和调试信息。