想要实现H5页面调用微信扫一扫功能,必须先了解微信JS-SDK接口
企业号开发接口文档地址:https://qydev.weixin.qq.com/wiki/index.php?title=%E9%A6%96%E9%A1%B5
我们来看下使用的大概步骤
1、在页面引入js文件http://res.wx.qq.com/open/js/jweixin-1.2.0.js
2、通过config接口注入权限验证配置
所有需要使用JS-SDK的页面必须先注入配置信息
wx.config({
debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
appId: '', // 必填,企业号的唯一标识,此处填写企业号corpid
timestamp: , // 必填,生成签名的时间戳
nonceStr: '', // 必填,生成签名的随机串
signature: '',// 必填,签名,见附录1
jsApiList: [] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
});
3、通过ready接口处理成功验证
wx.ready(function(){
// config信息验证后会执行ready方法,所有接口调用都必须在config接口获得结果之后,config是一个
客户端的异步操作,所以如果需要在页面加载时就调用相关接口,则须把相关接口放在ready函数中调用来确保正确执行。对于用户触发时才调用的接口,则可以直接调用,不需要放在ready函数中。
});
4、通过error接口处理失败验证
wx.error(function(res){
// config信息验证失败会执行error函数,如签名过期导致验证失败,具体错误信息可以打开config的debug模式查看,也可以在返回的res参数中查看,对于SPA可以在这里更新签名。
});
5、接口调用说明
所有接口通过wx对象来调用,有以下通用参数:
(1)success:接口调用成功的回调
(2)fail:接口调用失败的回调
(3)complete:接口调用完成时执行,不论失败或成功都执行
(4)cancel:用户点击取消时执行
(5)trigger: 监听Menu中的按钮点击时触发的方法
6、项目实例:
<html>
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title></title>
<script src="../../js/jweixin-1.3.2.js"></script>
</head>
<body>
<button v-on:click="scan()">扫描二维码</button>
<script>
...
...
doconfig() {
let url = location.href.split('#')[0];
let params = {
url: encodeURIComponent(url),
jsApiList: ['scanQRCode']
}
this.$http.post(this.baseUrl + '/api/wechat/jssdk', params, {
headers: {
Authorization: this.token
}
}).then(function (res) {
let data = JSON.parse(res.body.message);
wx.config({
debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,测试完成后需要关闭。
appId: data.appId, // 必填,公众号的唯一标识
timestamp: data.timestamp, // 必填,生成签名的时间戳
nonceStr: data.nonceStr, // 必填,生成签名的随机串
signature: data.signature, // 必填,签名(加密后,下文有实现)
jsApiList: ['scanQRCode'] // 必填,需要使用的JS接口列表,开发文档上有所有接口名称,根据需要选用就好。
});
}, function () {
console.log('请求失败处理');
});
},
scan() {
this.doconfig();
let that = this;
wx.scanQRCode({
needResult: 1, // 默认为0,扫描结果由微信处理,1则直接返回扫描结果,
scanType: ["qrCode"], // 可以指定扫二维码还是一维码,默认二者都有
success: function (res) {
var result = res.resultStr; // 当needResult 为 1 时,扫码返回的结果
that.putscan(res.resultStr)
}
});
},
</script>
</body>
</html>