在微信公众号开发中遇到自定义分享内容。使用 JSSDK 的时候一直报 config:invalid signature 错误。javascript
你们能够先参考一下腾讯的官方说明。php
而后需注意一下几点:html
签名要用到的jsapi_ticket须要保存的,2小时有效期。若是在2小时内出现问题须要删除才能工做,通常是自身程序的问题,请检查。java
nonceStr和noncestr的大小写,小心!ajax
url必定要小心,若是是"http://x.com/jspay?oid=0&attr=1#wechat"的形式,那么应该保留的是"http://x.com/jspay?oid=0&attr=1"。json
据此,url在JavaScript中是location.href.split('#')[0]获取。api
据此,url在php中用$protocol$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]拼装,微信
听说会有多余的80端口问题,可是记录者没有遇到过,总之请当心。app
url在JavaScript中千万别忘记“encodeURIComponent”!不然后果很诡异,遇到过初始化的时候报invalid
signature,可是API接口又能调用的状况。jsp
一、页面请求的 url 和生成 signature 的 url 必须一致。
二、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