在微信 H5 页面中调用微信扫码接口,需要使用微信 JS-SDK 提供的 wx.scanQRCode API。
步骤如下:
1. 绑定域名:
在微信公众平台后台的 "设置" -> "公众号设置" -> "功能设置" 中配置 "JS 接口安全域名"。 你需要将你的 H5 页面所在域名添加到该列表中,并且需要下载校验文件放到对应目录下。2. 引入 JS 文件:
在你的 H5 页面中引入微信 JS-SDK 文件,可以使用如下代码:
<script src="https://res.wx.qq.com/open/js/jweixin-1.6.0.js"></script>
(请注意版本号,可能会有更新)
3. 通过 wx.config 接口注入权限验证配置:
wx.config({ debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。 appId: '', // 必填,公众号的唯一标识 timestamp: , // 必填,生成签名的时间戳 nonceStr: '', // 必填,生成签名的随机串 signature: '',// 必填,签名,见附录1 jsApiList: ['scanQRCode'] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2 });
其中:
debug:调试模式,建议开发时开启,发布时关闭。appId,timestamp,nonceStr,signature 这几个参数需要通过调用你的服务器端接口来获取,用于验证你的网页授权。 signature 的计算方法可以参考微信官方文档:https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/JS-SDK.html#6 jsApiList: 表示你要调用的接口列表,这里需要包含 scanQRCode。4. 处理 wx.ready 和 wx.error 事件:
wx.ready(function(){ // config信息验证后会执行ready方法,所有接口调用都必须在config接口获得结果之后,config是一个客户端的异步操作,所以如果需要在页面加载时就调用相关接口,则须把相关接口放在ready函数中调用来确保正确执行。对于用户触发时才调用的接口,则可以直接调用,不需要放在ready函数中。 // 在这里调用微信扫码接口 wx.scanQRCode({ needResult: 1, // 默认为0,扫描结果由微信处理,1则直接返回扫描结果, scanType: ["qrCode","barCode"], // 可以指定扫二维码还是一维码,默认二者都有 success: function (res) { var result = res.resultStr; // 当needResult 为 1 时,扫码返回的结果 // 处理扫码结果 } }); }); wx.error(function(res){ // config信息验证失败会执行error函数,如签名过期导致验证失败,具体错误信息可以打开config的debug模式查看,也可以在返回的res参数中查看,对于SPA可以在这里更新签名。 });在 wx.ready 回调函数中,表示 wx.config 验证成功,可以调用微信扫码接口。在 wx.error 回调函数中,表示 wx.config 验证失败,需要根据错误信息进行排查和处理。
代码示例:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>微信扫码示例</title> <script src="https://res.wx.qq.com/open/js/jweixin-1.6.0.js"></script> </head> <body> <button id="scanBtn">扫一扫</button> <script> document.getElementById('scanBtn').onclick = function() { // 获取签名等配置信息 // (这里需要调用你的服务器端接口,代码示例仅供参考) fetch('/get-wx-config') .then(response => response.json()) .then(data => { wx.config({ debug: false, appId: data.appId, timestamp: data.timestamp, nonceStr: data.nonceStr, signature: data.signature, jsApiList: ['scanQRCode'] }); wx.ready(function() { wx.scanQRCode({ needResult: 1, scanType: ["qrCode", "barCode"], success: function (res) { var result = res.resultStr; alert("扫描结果:" + result); } }); }); wx.error(function(res) { console.error('微信JS-SDK初始化失败:', res); }); }); } </script> </body> </html>
请注意,以上代码只是一个示例,实际开发中你需要根据自己的业务逻辑进行调整。
网友回复