公众号调起微信扫一扫

调起扫一扫遇到的坑,签名失效。
1、获取后台接口签名时,一定要确保,后台处理将ticket和token进行缓存处理。
2、动态参数url.获取方式:location.href.split('#')[0],一开始加了encodeURIComponent,但是验签还是失败,抱着试试的态度将他去掉了。结果成功了。
<script type="text/javascript">
        var _appId ='当前公众号的appid';
        var openid="";
    $(function() {
        //需要把当前页面的url地址传到后台,生成签名信息时需要使用到。下面的地址是controller层调用当前页面的路径
        // //获取签名的后台接口
        openid = getUrlParam('openid');
        $(document).ready(function(){
             //需要把当前页面的url地址传到后台,生成签名信息时需要使用到。下面的地址是controller层调用当前页面的路径
            //var tokenUrl= encodeURIComponent(location.href.split('#')[0]);
            var tokenUrl = location.href.split('#')[0];
            //获取签名
            $.ajax({
                type:'post',
                url: 'getCYPZGZHticket',
                data: { 'url': tokenUrl },
                success:function(res){
                    var json = $.parseJSON(res);
                    var code = json.info;
                    if(code !='1'){
                        error();
                    }else{
                        wx.config({
                            debug:false,// 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
                            appId: _appId,// 必填,公众号的唯一标识
                            timestamp: json.data.sjc,// 必填,生成签名的时间戳
                            nonceStr: json.data.noncestr,// 必填,生成签名的随机串
                            signature: json.data.sign,// 必填,签名,见附录1
                            jsApiList: ['checkJsApi','scanQRCode']
                            // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
                        });
                        wx.scanQRCode({
                            desc: 'scanQRCode desc',
                            needResult: 1, // 默认为0,扫描结果由微信处理,1则直接返回扫描结果,
                            scanType: ["qrCode", "barCode"], // 可以指定扫二维码还是一维码,默认二者都有
                            success: function (res) {
                                var url = res.resultStr;
                                //拿到二维码的值进行处理操作
                                uploadData(url);
                            }
                        });
                    }
                }
            })
        })
        function uploadData(qrcode) {
            if (isEmpty(openid)) {
                error();
            }else{
                $.ajax({
                    url: 'uploadSYS',
                    data: { 'openid': openid,'qrval':qrcode },
                    success: function (res) {
                        var json = $.parseJSON(res);
                        var code = json.info;
                        if (code != '1') {
                            error();
                        } else {
                            ok();
                        }
                    },
                })
            }
            
       }

</script>

  

原文地址:https://www.cnblogs.com/syeacfpl/p/14885802.html