您的位置:首页 > 移动开发 > 微信开发

微信 JSSDK 报 config:invalid signature 错误

2016-05-18 00:00 761 查看
在微信公众号开发中遇到自定义分享内容。使用 JSSDK 的时候一直报 config:invalid signature 错误。

大家可以先参考一下腾讯的官方说明。

然后需注意一下几点:

签名要用到的jsapi_ticket需要保存的,2小时有效期。如果在2小时内出现问题需要删除才能工作,一般是自身程序的问题,请检查。

nonceStr和noncestr的大小写,当心!

url一定要当心,如果是"http://x.com/jspay?oid=0&attr=1#wechat"的形式,那么应该保留的是"http://x.com/jspay?oid=0&attr=1"。

据此,url在JavaScript中是location.href.split('#')[0]获取。

据此,url在php中用$protocol$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]拼装,

据说会有多余的80端口问题,但是记录者没有遇到过,总之请小心。

url在JavaScript中千万别忘记“encodeURIComponent”!否则后果很诡异,遇到过初始化的时候报invalid
signature,但是API接口又能调用的情况。

1、页面请求的 url 和生成 signature 的 url 必须一致。

2、url 需去除 # 号后面的内容 ( encodeURIComponent(location.href.split('#')[0]) )

我的是通过 ajax 调用生成签名来配置 wx.config({ }) 的

<script type="text/javascript">
$.ajax({
type: "Get",
data: "url=" + encodeURIComponent(location.href.split('#')[0]),
url: "{:U('Index/getSignPackage')}",
success: function(res){
var res = eval("(" + res + ")");
//                alert(JSON.stringify(res));
//                console.log(res);
if(res.code != 0){
wx.config({
debug: false,
appId: res.appId,
timestamp: res.timestamp,
nonceStr: res.nonceStr,
signature: res.signature,
jsApiList: [
// 所有要调用的 API 都要加到这个列表中
'onMenuShareTimeline',
'onMenuShareAppMessage',
'onMenuShareQQ',
'onMenuShareWeibo',
'hideMenuItems',
'showMenuItems',
'hideOptionMenu',
'showOptionMenu'
]
});
wx.ready(function () {
// 在这里调用 API
wx.onMenuShareTimeline({
title: '丹阳国际眼镜城欢迎您来开红包!\n红包来袭,全民疯抢中!快来参与吧!', // 分享标题
link: 'http://dyyj.vxiaoxiao.cn/index.php?s=/Home/Index/index.html', // 分享链接
imgUrl: 'http://dyyj.vxiaoxiao.cn/Public/Home/images/danyang/logo.jpg', // 分享图标
success: function () {
// 用户确认分享后执行的回调函数
},
cancel: function () {
// 用户取消分享后执行的回调函数
}
});
wx.onMenuShareAppMessage({
title: '丹阳国际眼镜城欢迎您来开红包!\n红包来袭,全民疯抢中!快来参与吧!', // 分享标题
desc: '丹阳国际眼镜城欢迎您来开红包!\n红包来袭,全民疯抢中!快来参与吧!', // 分享描述
link: 'http://dyyj.vxiaoxiao.cn/index.php?s=/Home/Index/index.html', // 分享链接
imgUrl: 'http://dyyj.vxiaoxiao.cn/Public/Home/images/danyang/logo.jpg', // 分享图标
type: '', // 分享类型,music、video或link,不填默认为link
dataUrl: '', // 如果type是music或video,则要提供数据链接,默认为空
success: function () {
// 用户确认分享后执行的回调函数
},
cancel: function () {
// 用户取消分享后执行的回调函数
}
});
});
}
}
})
</script>

后台php

//获取微信JSSDK配置信息
function getSignPackage($url){
$jssdk = new JSSDK("addId", "appSecret");
$signPackage = $jssdk->GetSignPackage($url);
$signPackage['code']=(empty($signPackage))?0:1;
$this->ajaxReturn(json_encode($signPackage));
exit();
}

ps:
具体怎么使用微信自定义的分享功能可以参考 http://www.huceo.com/post/414.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: