在微信 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> 请注意,以上代码只是一个示例,实际开发中你需要根据自己的业务逻辑进行调整。
网友回复


