微信公众号调用扫一扫的方法及注意事项

时间:2024-03-02 20:18:18

调用方法:

  1. 绑定域名:在微信公众平台设置
  2. 引入JS文件:<script src=\'https://res.wx.qq.com/open/js/jweixin-1.2.0.js\'></script> 
  3. 通过config接口注入权限验证配置(很重要),通过ready接口处理成功验证,通过error接口处理失败验证
  4. <script type="text/javascript">
             
            function scan(){
                 
                wx.config({
                    debug: true,   //是否调试,true,会弹窗
                    appId: \'<%=appID%>\', //得到这个东西,首先必须有一个公众号,或者企业号,如果已经拥有了,你可以就知道AppId在哪里了。
                    timestamp: \'<%=time%>\',//生成签名的时间戳,随机数,之后会用这个生成一个签名
                        nonceStr: \'<%=randstr%>\',//生成签名的随机串,随机串,之后会用这个生成一个签名
                    signature: \'<%=signstr%>\',//这个就是签名了,在步骤4,我会详细讲解
                    jsApiList: [
                      \'scanQRCode\' //开启扫一扫功能,这里还可以添加更多的功能,比如微信支付
                    ]
                });
                
                wx.ready(function () {
                    wx.scanQRCode({
                        desc: \'scanQRCode desc\',
                        needResult: 1, // 默认为0,扫描结果由微信处理,1则直接返回扫描结果,
                        scanType: ["qrCode", "barCode"], // 可以指定扫二维码还是一维码,默认二者都有
                        success: function (res) {
                            var url = res.resultStr;
                            var tempArray = url.split(\',\');
                            var tempNum = tempArray[1];//这个就是扫描后返回值扫描值
                        }
                    });
                }); 
            }
             
            </script>
注意事项:1. wx.config,wx.ready,wx.scanQRCode等是微信浏览器内置的接口,只有微信浏览器才能识别,用电脑上的IE是调试不了的,会报未定义错误

                       2.     appId,timestamp,nonceStr分别是公众号的APPID,时间戳以及随机数,这个应该没什么疑问

                                     关键是签名signature的算法,步骤如下:

                                     ①  根据APPID和APPSECRET获取access_tocken:

                                           接口网址是"https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + appid + "&secret=" + secret

                                     ②   根据access_tocken获取jsapi_ticket:

                                           接口网址是 "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=" + accesstocken + "&type=jsapi"

                                           注意:一定是type=jsapi,我一开始签名一直算不对的原因就是写成了type=wx_card(这是调用卡券接口用的,当时直接拷过来给忽略了)造成我算出来的签名使用签名校验工具校验没有问题,但是调用扫一扫接口就是报签名错误,因为这个疏忽浪费了两天时间查原因!

                                     ③  计算签名:

                string url = this.Request.Url.ToString();//注意:url要动态获取
                string string1 = "jsapi_ticket=" + api_ticket + "&noncestr=" + randstr + "&timestamp=" + time + "&url=" + url + "";
                //使用sha1加密这个字符串
                signature = FormsAuthentication.HashPasswordForStoringInConfigFile(string1, "SHA1");
                signature = signstr.ToLower();

按照这个步骤走,应该就没有问题了。