微信小程序的星级评价样式和处理逻辑
前段时间写了一个微信公众号,里面有一个扫码登录网页端的操作,明明是按照在别的界面扫码获取条形码数字的方法来写的,但是却不知道为什么一直提示签名错误。
jssdk报config:fail,Error: 系统错误,错误码:63002,invalid signature
想了挺久,明明配置,appid等参数都是一样的,为何在另外一个界面可行,在“我的”界面却是不行。难道是因为iframe导致的问题?因为我在子界面使用location.href.split(’#’)[0]获取的链接和我的界面链接对不上。
界面如下所示:
因此我想了一个法子,我将获取签名、wxConfig等方法写入到主界面main.jsp之中,然后在iframe里面调用父界面的代码,果然签名就成功通过,可以调用扫码功能了。
大概的jsp代码如下:
(1)main中的代码:
_getWechatSignUrl为java文件中定义的获取微信签名的代码,因为不是重点,便不再此累述。
//获取签名
function getsign(){
var _getWechatSignUrl = 'wechat/getSign';
var token_data = encodeURIComponent(location.href.split('#')[0]);
$.ajax({
url:_getWechatSignUrl,
data:{"url":token_data},
dataType:"json",
type: 'POST',
cache:false,
success:function(res){
console.log(res);
//获得签名之后传入配置中进行配置
wxConfig(res.appId,res.timestamp,res.nonceStr,res.signature);
}
})
}
function wxConfig(_appId,_timestamp, _nonceStr, _signature) {
wx.config({
debug:false,// 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
appId: _appId,// 必填,公众号的唯一标识
timestamp: _timestamp,// 必填,生成签名的时间戳
nonceStr: _nonceStr,// 必填,生成签名的随机串
signature: _signature,// 必填,签名,见附录1
jsApiList: ['checkJsApi', 'startRecord', 'stopRecord','translateVoice','scanQRCode', 'openCard']
// 必填,需要使用的JS接口列表,所有JS接口列表见附录2
});
}
function ScanQrCode(){
wx.scanQRCode({
desc: 'scanQRCode desc',
needResult : 1, // 默认为0,扫描结果由微信处理,1则直接返回扫描结果,
scanType : [ "qrCode", "barCode" ], // 可以指定扫二维码还是一维码,默认二者都有
success : function(res) {
//调用你需要调用的代码
},
error:function(res){
$.toptip(res.errMsg);
}
});
}
(1)mine中的代码:
mine主要是在点击扫码图标之后,调用父界面的开启摄像头扫码的方法。
$("#scanQRCode").click(function(event){
//调用父界面的扫一扫功能
parent.ScanQrCode();
})