寫在前面:
做微信的網頁基本上都要接入微信的sdk,我在做的時候,也頗費了一番功夫,然後就想記錄一下,供自己日後翻閱,以及讓有需要的朋友可以做一下參考,如果喜歡的可以點波贊,或者關注一下,希望可以幫到大家。
本文首發於我的個人blog:obkoro1.com
安裝sdk
npm install weixin-js-sdk --save
複製程式碼
開始之前大家可以先讀一讀微信公眾號的 接入文件,vue是單頁面專案,比如你想要接入微信分享功能,分享功能在每個路由地址都要有,因為每個路由的url是不一樣的,所以就需要在每個路由地址都引入一遍。
整體步驟:
-
vue引入sdk的話,就是在路由元件裡面的,元件生命週期的:creatd()和mounted()裡面放程式碼。
-
用虛擬碼,熟悉一下整體的流程,要做哪些事情:
//wx是引入的微信sdk wx.config('這裡有一些引數');//通過config介面注入許可權驗證配置 wx.ready(function() { //通過ready介面處理成功驗證 // config資訊驗證成功後會執行ready方法 wx.onMenuShareAppMessage({ // 分享給朋友 ,在config裡面填寫需要使用的JS介面列表,然後這個方法才可以用 title: '這裡是標題', // 分享標題 desc: 'This is a test!', // 分享描述 link: '連結', // 分享連結 imgUrl: '圖片', // 分享圖示 type: '', // 分享型別,music、video或link,不填預設為link dataUrl: '', // 如果type是music或video,則要提供資料連結,預設為空 success: function() { // 使用者確認分享後執行的回撥函式 }, cancel: function() { // 使用者取消分享後執行的回撥函式 } }); wx.onMenuShareTimeline({ //分享朋友圈 title: '標題', // 分享標題 link: '連結', imgUrl: '圖片', // 分享圖示 success: function() { // 使用者確認分享後執行的回撥函式 }, cancel: function() { // 使用者取消分享後執行的回撥函式 } }); }); wxx.error(function(res){//通過error介面處理失敗驗證 // config資訊驗證失敗會執行error函式 }); 複製程式碼
上面的流程多看幾遍,對整個流程有個概念,其中最重要的一步就是下面這個介面注入許可權。
config介面注入許可權
接入微信介面的最主要也是最重要一步步就是填寫下面這些資訊,填完這些資訊之後,基本就好了。下面這些資訊通常是通過後端介面來獲取的。
wx.config({
debug: true, // 開啟除錯模式,呼叫的所有api的返回值會在客戶端alert出來,若要檢視傳入的引數,可以在pc端開啟,引數資訊會通過log打出,僅在pc端時才會列印。
appId: '', // 必填,公眾號的唯一標識
timestamp: , // 必填,生成簽名的時間戳
nonceStr: '', // 必填,生成簽名的隨機串
signature: '',// 必填,簽名,見附錄1
jsApiList: [] // 必填,需要使用的JS介面列表,所有JS介面列表見附錄2
});
複製程式碼
獲取config配置資訊:
前端要獲取上面那些資訊,不用做太多東西,只要調後端介面就可以了。後端會把那些資訊處理好,然後通過一個介面返給你這些引數。你要給後端傳一個當前路由頁面的完整url,後端就會返回上述的那些資訊給你,後面就可以根據自己的需求呼叫相應的介面,自定義裡面的東西。
坑點:url
這裡要注意的就是url的問題,如果url沒有正確傳遞,後端也會返回資訊,但是簽名資訊會是錯誤的。
上面提到的完整url指的是:'http(s)://'部分,以及'?'後面的GET引數部分,但不包括'#'hash後面的部分。可以通過location.href
來獲取。
注意: 如果你的vue專案,路由沒有開啟history 模式,也就是你的url上面包含“#”,這個時候要從後端正確獲取簽名,就需要去掉url上#後面的字元。(url去掉'#'hash部分,可用location.href.split('#')[0]
)
封裝呼叫sdk注入:
因為要在每個路由頁面都注入sdk,這個肯定要複用的,不然那麼多程式碼,看著就頭大。
我是這麼做的:
- 因為我把axios包了一層,然後把axios介面,在main.js裡面掛載到Vue例項。
- 然後在全域性函式裡面呼叫這個介面,然後在每個路由頁面的相應元件裡面呼叫這個函式,把當前頁面的url以及其他標題、圖片什麼的傳進去。
裡面的具體步驟就不說了,最重要的是參考上面的那個流程,函式裡面的東西也都是基於那個流程的。
簽名校驗:
當你反覆確認步驟都沒有問題,微信sdk注入還是簽名失敗的時候,這個時候你就要考慮是不是後端那邊的演算法有問題,可以把後端返回的簽名和微信提供的JS 介面簽名校驗工具生成的簽名對比一下,或許是後端那邊演算法的問題也不一定。
後話
實不相瞞,當時我做的時候就是被url這個坑了,第一次做這個東西,沒有經驗,折騰了好久。引入sdk並不難,重要的是那個配置資訊要填寫正確,然後其他的就根據實際需求來做了。
最後:如需轉載,請放上原文連結並署名。碼字不易,感謝支援!本人寫文章本著交流記錄的心態,寫的不好之處,不撕逼,但是歡迎指點。然後就是希望看完的朋友點個喜歡,也可以關注一下我。 個人blog and 掘金個人主頁
以上2017.12.16