在微信公衆號開發中遇到自定義分享內容。使用 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