微信扫一扫二维码

653 阅读2分钟

微信扫一扫二维码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title></title>
</head>
    
<body>
    <input id="wxcode" type="button" class="test" value="微信扫一扫"/>
</body>
    
<script src="http://libs.baidu.com/jquery/1.7.2/jquery.min.js"></script>
<script src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script>
    
<script>
    $.ajax({
        type : "GET",
        url : "后台的获取的api接口",
        dataType : "json",
        success : function(data) {
            console.log(data)
            wx.config({
                debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
                appId: data.appId, // 必填,公众号的唯一标识
                timestamp: data.timestamp, // 必填,生成签名的时间戳
                nonceStr: data.nonceStr, // 必填,生成签名的随机串
                signature: data.signature,// 必填,签名,见附录1
                jsApiList: [
                    'checkJsApi',
                    'scanQRCode'// 微信扫一扫接口
                ] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
            });
            wx.error(function(res) {
                alert("出错了:" + res.errMsg);//这个地方的好处就是wx.config配置错误,会弹出窗口哪里错误,然后根据微信文档查询即可。
            });
        }
    });
            wx.ready(function() {
                wx.checkJsApi({
                    jsApiList : ['scanQRCode'],
                    success : function(res) {
                        console.log('111');
                    }
                });
                //点击按钮扫描二维码
                $('#wxcode').click(function(){
                    wx.scanQRCode({
                        needResult: 1, // 默认为0,扫描结果由微信处理,1则直接返回扫描结果,
                        scanType: ["qrCode","barCode"], // 可以指定扫二维码还是一维码,默认二者都有
                        success: function (res) {
                            var result = res.resultStr; // 当needResult 为 1 时,扫码返回的结果
                            alert(result);
                        },
                    });
                })
            });


</script>
</html>

invalid signature签名错误

  1. 确认签名算法正确,可用mp.weixin.qq.com/debug/cgi-b… 页面工具进行校验。
  2. 确认config中nonceStr(js中驼峰标准大写S), timestamp与用以签名中的对应noncestr, timestamp一致。
  3. 确认url是页面完整的url(请在当前页面alert(location.href.split('#')[0])确认),包括'http(s)://'部分,以及'?'后面的GET参数部分,但不包括'#'hash后面的部分。
  4. 确认 config 中的 appid 与用来获取 jsapi_ticket 的 appid 一致。
  5. 确保一定缓存access_token和jsapi_ticket。
  6. 确保你获取用来签名的url是动态获取的,动态页面可参见实例代码中php的实现方式。如果是html的静态页面在前端通过ajax将url传到后台签名,前端需要用js获取当前页面除去'#'hash部分的链接(可用location.href.split('#')[0]获取,而且需要encodeURIComponent),因为页面一旦分享,微信客户端会在你的链接末尾加入其它参数,如果不是动态获取当前链接,将导致分享后的页面签名失败。

the permission value is offline verifying (我遇到这种错误可能是值传的不对)

  1. 确认config正确通过。
  2. 如果是在页面加载好时就调用了JSAPI,则必须写在wx.ready的回调中。
  3. 确认config的jsApiList参数包含了这个JSAPI。

如何生成 "timestamp" , "nonceStr","signature"

案例代码

demo.open.weixin.qq.com/jssdk/sampl…

备注:链接中包含php、java、nodejs以及python的示例代码供第三方参考,第三方切记要对获取的accesstoken以及jsapi_ticket进行缓存以确保不会触发频率限制。 下载完后只需要填写Appid,AppSecret调用这个函数返回的值就是你所需要的参数

微信公众平台接口测试帐号申请

你可能先需要获取一下 临时的AppId,AppSecret

mp.weixin.qq.com/debug/cgi-b…

微信扫一扫BUG

在扫描后返回时,有时候不能alert()弹窗,但是写在回调函数的js代码会被执行,但是不能够弹窗 alert()在扫描后只能执行一个