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