调起扫一扫遇到的坑,签名失效。
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>