公司最近項目須要使用微信進行分享,對微信的jssdk研究了下,因爲研究過程並不順利,遇到的坑比較多,因此特地將研究結果記錄下來,供你們批評和參考!html
官方文檔:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141115web
微信的jssdk是面向網頁開發者提供的基於微信內的網頁開發工具包,提供了諸如分享朋友圈,分享微信好友,分享QQ好友 and so on,具體支持的文檔參考上述官方文檔;api
在進行微信jssdk開發以前,首先你得擁有一個微信公衆號,而且具備對應功能的權限,注意必定要有對應開發的權限!!!(以下圖所示).另外若是你沒有微信的公衆號或者僅爲測試所用,那麼能夠去申請一個微信測試的帳號(這個給騰訊點贊!).瀏覽器
若是你有了這些基礎,那麼就能夠開始開發了,開發分爲如下五個步驟安全
在html頁面中引入js文件,最好引用https版本的js:https://res.wx.qq.com/open/js/jweixin-1.2.0.js服務器
在進行jssdk接口調用以前,必須在html頁面中進行config接口注入微信
wx.config({app
debug: true, // 開啓調試模式,調用的全部api的返回值會在客戶端alert出來,若要查看傳入的參數,能夠在pc端打開,參數信息會經過log打出,僅在pc端時纔會打印dom
appId: '', // 必填,公衆號的惟一標識異步
timestamp: , // 必填,生成簽名的時間戳
nonceStr: '', // 必填,生成簽名的隨機串
signature: '',// 必填,簽名
jsApiList: [] // 必填,須要使用的JS接口列表,全部JS接口列表見微信官方文檔
});
appid就不用說了,每一個微信公衆號惟一一個;
timestamp和nonceStr由開發者動態生成,通常在服務器端生成;
signature須要使用jsapi_ticket,url,noncestr,timestamp拼接成以下一個字符串,並對以下的求sha1的值,這個值即爲signature,其中jsapi_ticket在上述官方文檔中也能夠找到;
例如:jsapi_ticket=sM4AOVdWfPE4DxkXGEs8VMCPGGVi4C3VM0P37wVUCFvkVAy_90u5h9nbSlYy3-Sl-HhTdfl2fzFy1AOcHKP7qg&noncestr=Wm3WZYTPz0wzccnW×tamp=1414587457&url=http://mp.weixin.qq.com?params=value
全部內容應該(並非必須)經過ready接口來進行處理,在該方法內部對須要用到的接口進行處理,我以爲更像是一種註冊綁定;
如分享到朋友圈的接口,link的連接的內容必定要在前面配置的安全域名之下的內容,其餘內容也不太填敏感信息;
wx.onMenuShareTimeline({
title: '', // 分享標題
link: '', // 分享連接,該連接域名或路徑必須與當前頁面對應的公衆號JS安全域名一致
imgUrl: '', // 分享圖標
success: function () {
// 用戶確認分享後執行的回調函數
},
cancel: function () {
// 用戶取消分享後執行的回調函數
}
});
wx.error(function(res){
// config信息驗證失敗會執行error函數,如簽名過時致使驗證失敗,具體錯誤信息能夠打開config的debug模式查看,也能夠在返回的res參數中查看,對於SPA能夠在這裏更新簽名。
});
筆記本身猜想的信息驗證過程:
咱們在進行接口配置的時候將咱們從服務器拿到的noncestr,timestamp,signature寫到config方法中,config向微信發出異步請求,將咱們的配置信息傳遞到服務器,由服務器計算得出一個簽名,和咱們傳給服務器的簽名進行對比,當兩者相同的時候說明驗證信息無誤,使用此方法保證分享的安全性!
那麼說了這麼多,你服務器端代碼寫好了,html網頁代碼也寫好了,怎麼分享呢?
在微信裏面打開你的網頁,在微信的右上角,點擊進入分享,其實也就是微信官方的分享按鈕,只能經過此方法進行分享!!!
在開發過程當中能夠考慮使用微信官方的微信web開發者工具進行開發調試,裏面能夠看到jssdk的信息,若是出現config:ok基本上是沒有什麼問題了,可是有的時候不要太相信這個結果了,還要到手機環境進行測試的,切記安卓和蘋果都要測試!!!
若是你有任何批評或者疑問,能夠在下面進行評論或者向此郵箱發郵件,Email:gebizhuifengren@aliyun.com