由於工作項目的原因,需要使用vue開發微信公眾號,但是這種微信公眾號更多是將APP套了一個微信的殼子,除了前面的授權和微信有關系以外,其他的都和微信沒多大的關系了,特此記錄
開發流程
首先需要在電腦上安裝微信web開發者工具和花生殼(內網穿透),然后有一個微信公眾平台的賬號
第一步:
下載安裝花生殼,點擊內網穿透
然后會在瀏覽器中打開下面這個界面
這里需要注意的是外網訪問地址和內網主機地址。
第二步:
登錄微信公眾平台后,滾動頁面到最下面,點擊開發下面的開發者工具。
然后選擇公眾平台測試賬號,會新打開一個測試號管理的頁面
在測試號管理頁面,需要修改兩個地方,將地址換成第一步中的外網訪問地址:
第一個:
第二個(此時不需要前面的http://):
除了修改上面兩個地方以外,作為測試號,還需要將當前頁面前面的測試號信息發給后台
現在,前台的基本配置已經完成了。
項目配置
第一步:
首先需要創建項目,和創建其他的vue項目一模一樣,直接使用腳手架創建就可以了。
項目創建完成后,需要安裝微信的SDK:npm
install
weixin-js-sdk --save
另外,由於vue項目默認是使用localhost打開的,但是這樣是微信公眾號,需要在微信web開發者工具中打開,所以需要更改為通過ip訪問:
打開根目錄下的config/index.js,修改文件內dev里面的host和port
這里的地址應該是電腦的IP,端口是可以自定義的,修改完成后,需要修改第一步花生殼中的那個內網主機,讓兩者保持一致。
現在,啟動項目,在瀏覽器中輸入192.168.0.3:8080如果可以打開項目的話,那么項目創建就沒有問題了。
由於使用花生殼穿透以后,192.168.0.3:8080對應的就是花生殼里面的外網訪問地址,所以打開微信web開發者工具,輸入穿透后的外網訪問地址,也是可以打開項目的。
第二步:
在進行授權前,需要獲取code,然后通過code去到后台換取openID。由於在本項目中采用的是強制授權,分別寫了兩個頁面:login和getCode用於進行授權:
login.vue是項目的默認顯示頁面
<template> <div class="hello"></div> </template> <script> import * as sessiondate from '../service/staticData' import { Indicator } from 'mint-ui'; import { mapMutations,mapState } from 'vuex' export default { data () { return { msg: 'Welcome to Your Vue.js App' } }, created(){ window.location.href=sessiondate.weixin; }, methods: {} } </script> <style scoped> </style>
其中的sessiondate.weixin是自己配置的。
staticData.js
export const weixin='https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx503236dfa82f2a64&redirect_uri=http%3A%2F%2F2ir3745783.zicp.vip%2f%23%2fgetCode&response_type=code&scope=snsapi_base&state=STATE&connect_redirect=1#wechat_redirect'
其中appid=wx503236dfa82f2a64是測試號管理中的appId,redirect_uri=http%3A%2F%2F2ir3745783.zicp.vip%2f%23%2fgetCode則表示的是獲取code的頁面,也就是上面說的getCode.vue這個頁面的訪問路徑,然后通過了轉碼。
當項目啟動,進入login頁面后,就會自動執行生命周期函數里面的代碼,頁面就會跳轉到getCode.vue頁面。
getCode.vue
<template> <div class="hello"></div> </template> <script> import * as apidate from "../service/api"; import { Indicator } from "mint-ui"; import { mapMutations, mapState } from "vuex"; export default { data() { return { msg: "Welcome to Your Vue.js App" }; }, created() { // 'snake'、'fading-circle'、'double-bounce'、'triple-bounce' Indicator.open({ text: "Loading...", spinnerType: "triple-bounce" }); this.Code(); }, methods: { getQueryString(name) { var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i"); var r = window.location.search.substr(1).match(reg); if (r != null) return unescape(r[2]); return null; }, Code() { this.$store.commit("changeToken", null); this.$store.commit("changeCode", this.getQueryString("code")); this.axios .get(apidate.getOpenId1 + "?code=" + this.getQueryString("code")) .then(res => { if (res.data.msg == "bind") { Indicator.close(); this.$store.commit("changeOpenId",res.data.data); this.$router.push("bind"); } else if (res.data.msg == "newtoken") { this.$store.commit("changeToken", res.data.data.token.access_token); this.$store.commit("changeUserInfo", res.data.data.user); this.$store.commit("changeOpenId",res.data.data.user.openId); Indicator.close(); this.$router.push("home"); } }) .catch(err => {}); } } }; </script> <style scoped> </style>
路由跳轉到這個頁面后,地址欄里面就會帶有code,我們需要拿到這個code,然后去后台換取openid和其他的信息。由於這個過程需要時間,因此在頁面進入時,默認顯示一個加載圈。
獲取code
通過code去后台換取openID
前面兩行是為了存數據的,暫時可以不用看,這里主要是拿到code以后,去后台換取openID,然后根據后台的返回,判斷頁面跳轉(我們公司做了一個用戶綁定,所以后台會根據這個接口判斷當前用戶是否進行了綁定:如果已經綁定,則直接跳轉到內容主頁面;如果沒有綁定,則跳轉到用戶綁定頁面)
完成了授權以后,后面的就和常規的vue項目一樣的處理就可以了。