vue如何通過NodeJs本地獲取微信access_token及簽名,並調用微信接口

一直都想搞一下微信公衆號網頁開發,公司忙沒有時間自己也沒開發過所以也沒有頭緒,前兩天通過自己的摸索以及自行查找的資料,終於通過nodejs在本地成功的獲取到了微信的access_token及簽名,以及調用微信的接口.因爲筆者自己在做的時候費了挺長時間,沒有找到一個相對完整,詳細的一個項目借鑑,有很多的坑,所以下面我將詳細的把自己做的過程給大家講一下,從一開始的註冊微信公衆號到成功調用微信接口,以給那些還沒有開發過經驗的人借鑑,第一次寫文章,文筆不好,勿怪.

1.註冊一個微信公衆號

怎麼註冊微信公衆號,可以自行百度一下,網上很多註冊的教程,這裏就不浪費口舌了

2.開通"開發者模式"

在微信公衆平臺官網登錄之後,我們第一步是要成爲開發者,在首頁點擊"基本配置",右邊會出現一個頁面,有個"成爲開發者"按鈕,點擊它,我這裏我已經是開發者了,所以已經沒有了

clipboard.png

3.查看基本信息

成爲開發者之後,可以看到如下頁面,我們可以看到自己的AppId和Appsecret(這個很重要,最好記在哪裏,記在手機/筆記本都可以)

clipboard.png

4.申請微信公衆號測試賬號

爲什麼申請測試賬號,一因爲微信公衆號的接口它是有調用次數限制的,二是測試賬號比較方便,可以胡來,哈哈哈,點擊"開發->開發者工具",就在之前點擊的"基本配置"下面(如後面出現一些點擊"xxx",一般都在頁面左側),可以看到如下頁面,選擇"公衆平臺測試賬號",然後我們需要用手機微信掃碼登錄

clipboard.png

5.測試賬號配置

登錄成功之後,會看到下面的頁面,在我圈的紅色框中,填寫你的域名,比如我vue本地項目啓動成功後是localhost:9999,你就填localhost:9999,如果是雲服務器域名,你就填你申請的域名,如www.xxx.com,上面的接口配置信息暫時可以不用配置,到這裏我們已經完成了整個微信公衆號測試賬號的配置

clipboard.png

6.創建vue項目

這裏的前提是你已經安裝了node並且會vue,我們通過vue-cli創建一個項目,創建項目過程的截圖我就不放出來了,移步到這裏查看,如果看不懂,也可以自行百度一下 哈哈哈,網上也有很多怎麼通過vue-cli創建vue項目,我創建這個項目用的是vue-cli 2.0,現在已經是vue-cli 3.0,我自己也是在摸索中 嘿嘿...下面的圖就是通過vue-cli創建的項目

clipboard.png

7.node配置

注意在上圖中,server文件夾是需要自行創建的,vue-cli創建的項目是沒有這個文件夾的,裏面放了相關的nodejs代碼,接下來我們看看裏面都有什麼文件,下圖中我給主要的文件都作了註釋,其餘2個是鏈接Mysql數據庫的,我這裏就不講了,我自己也不是很會,也是參照別人的,哈哈哈,就不獻醜了

clipboard.png

我們先看看api.js,這裏面就寫了一個方法是用來獲取access_token和簽名的,這裏用的是axios,所以在vue項目裏你要安裝axios.接下來我們先定義一下appId和appsecret,值就是你之前申請測試賬號時的appId和appsecret,請求地址在微信開發者文檔裏有,移步微信開發者文檔,獲取到access_token之後,我們通過access_token獲取微信簽名(微信簽名算法在sign.js,稍後我會貼出來),然後返回獲取到的數據,這裏的定義的config對象也可以在微信開發者文檔裏看,你也可以定義在前端-----我們是通過module.exports把代碼暴露出去以便引用

clipboard.png

微信簽名算法

var createNonceStr = function () {
  return Math.random().toString(36).substr(2, 15);
};

var createTimestamp = function () {
  return parseInt(new Date().getTime() / 1000) + '';
};

var raw = function (args) {
  var keys = Object.keys(args);
  keys = keys.sort();
  var newArgs = {};
  keys.forEach(function (key) {
    newArgs[key.toLowerCase()] = args[key];
  });

  var string = '';
  for (var k in newArgs) {
    string += '&' + k + '=' + newArgs[k];
  }
  string = string.substr(1);
  return string;
};

/**
* @synopsis 簽名算法 
*
* @param jsapi_ticket 用於簽名的 jsapi_ticket
* @param url 用於簽名的 url ,注意必須動態獲取,不能 hardcode
*
* @returns
*/
var sign = function (jsapi_ticket, url) {
  var ret = {
    jsapi_ticket: jsapi_ticket,
    nonceStr: createNonceStr(),
    timestamp: createTimestamp(),
    url: url
  };
  var string = raw(ret);
      jsSHA = require('jssha');
      shaObj = new jsSHA(string, 'TEXT');
  ret.signature = shaObj.getHash('SHA-1', 'HEX');

  return ret;
};

module.exports = sign;

我們再看一下router.js,代碼很少,就是你前端要請求的路由地址,這裏我們要用到express,所以你也要保證你的vue項目裏的node_modules包裏有express,沒有你就安裝一下,不會安裝就百度(屢試不爽),反正你缺少什麼模塊你就安裝什麼模塊就行了,跑題了,繼續說下圖中的代碼,我們引入之前的api.js,然後調用express.Router(express.Router可以認爲是一個微型的只用來處理中間件與控制器的 app,它擁有和 app 類似的方法,例如 get、post、all、use 等等),定義了前端請求接口地址'/getToken',調用api.js裏定義的方法,也需要把router暴露出去

clipboard.png

最後我們看看index.js,這裏我們把剛剛寫好的router.js引入進來,把express也引入進來,並且創建一個express應用程序app(就是第4行代碼),設置一下請求頭和跨域還有返回的狀態碼,app.use()一下後端api路由,'/api'是調用中間件函數的路徑,我前端用了代理,請求路徑都增加了'/api',所以後端的所有請求路徑也要加上,最後app.listen(8088)監聽端口號(你喜歡什麼數字都行,端口號不用和我一樣)

clipboard.png

下面我們通過cmder(或者你用window自帶的cmd命令打開DOS窗口)進入server文件夾,輸入node index.js啓動8088端口,看啓動成功了...

clipboard.png

8.啓動vue項目

也通過cmder進入到vue項目所在的目錄,npm run dev啓動

clipboard.png

9.前端環境配置

然後我在static文件夾下面創建了一個js文件夾,裏面放了一個環境配置的文件

clipboard.png

clipboard.png

本地請求接口是localhost:8088,你也可以添加生產環境的,我這裏還沒添加,比如

'production': { apiRoot: 'http://www.xxx.cn:8088'}

線上的不添加後面的端口號8088不知道可不可以我還沒試過…然後在index.html裏引用一下

clipboard.png

在"src"文件夾下創建一個api文件夾,在此文件下創建一個index.js,用來封裝我們前端的請求

clipboard.png

clipboard.png

這裏的window._ENV.apiRoot就是我在static文件夾裏的環境配置文件, 之前我們已經在index.html引入過了,所以能在這裏用, 爲什麼這裏要傳url,因爲在node裏請求籤名的時候簽名算法那裏需要

10.修改config配置

打開vue項目下的config文件夾裏的index.js,設置一下代理,因爲這裏添加了"/api",所以後端的都要加上,修改了配置,vue項目需要重新啓動一下

clipboard.png

11.測試獲取token及簽名,並調用微信接口

我們先看看"src"文件夾裏的目錄結構,我把vue-cli自動創建的刪了部分,然後自己創建了部分

clipboard.png

我們在pages文件夾裏創建一個頁面組件index

clipboard.png

clipboard.png

下面是index.vue裏的代碼,這裏我用到iview,所以是<i-button>,還有一個非常重要,安裝一下微信jssdk,npm install weixin-js-sdk --save,也可以自行百度查一下怎麼安裝,不然你什麼功能都用不了,哈哈哈,我一開始就沒安裝,引入我們定義的api

clipboard.png

把請求token的方法寫在methods裏,然後created的時候調用,我這裏寫了兩個按鈕進行測試,用到了獲取地理位置,打開地址位置,微信掃一掃接口,這裏除了獲取地理位置,其他通過用戶交互的都寫在methods裏

clipboard.png

clipboard.png

12.使用微信開發者工具調試

下載並安裝一下微信開發者工具(微信開發者工具下載),用二維碼登錄,在地址欄輸入你的vue啓動地址,就OK了,可以查看接口是否調用成功了,這裏一開始獲取地理位置成功

clipboard.png

點擊了兩個按鈕之後,也是成功了看下圖,哈哈哈,很開心....

clipboard.png

文章到這裏就結束了...大家也可以去我的github上查看我的源碼(項目地址),後面我會繼續寫一篇《如何將node + vue 項目部署到服務器上,並調用微信接口》,大家可以先感受一些我線上的demo(線上demo),用手機微信打開,access_token一天上限是2000次,如果你沒有體驗成功,可能就是到上限了,也可以關注我的微信公衆號,後面陸續的我會把文章發佈到微信公衆號上...附上公衆號的二維碼,目前還沒有發佈文章,不要嫌棄哈哈哈...如有問題可以在下面評論,或者指出我的問題,大家互相學習,謝謝...

clipboard.png

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章