背景
我多嘴,說我知道微信公眾號的配置流程,然後公司原來負責公眾號的人離職了,讓我先研究然後去教後端大哥,我也是醉了。但是多學一種東西,又何樂而不為呢。本來我也在學習koa2,想給自己的小程式寫介面。於是就開始了踩坑之路,也感謝網上很多大佬的分享。
本地開發除錯環境搭建
開發環境
- MacOs
- Node v8.9.1
- Koa2複製程式碼
微信公眾平臺開發的基本原理
我們先來看看微信公眾平臺開發的基本原理:在進行微信開發的時候,需要在我們在自己的伺服器上部署服務對微信訊息進行處理。微信伺服器就相當於一個轉發伺服器。終端(手機、Pad等)發起請求至微信伺服器,微信伺服器然後將請求轉發給自定義服務(這裡就是我們的具體實現)。服務處理完畢,然後轉發給微信伺服器,微信伺服器再將具體響應回覆到終端,通訊協議為:HTTP;資料格式為:XML。我們的服務需要做的就是對請求做出響應,解析XML,進行相應的處理後再返回特定的XML。
ngrok微信本地開發
這兒我們瞭解到了接入微信開發需要一個自己的響應伺服器,我們可以購買伺服器或者新浪雲百度雲之類的服務。但是在我們開發階段這樣做是很麻煩的,我們需要搭建一個好用的本地除錯環境,將內網對映出去,讓外網能夠訪問的。
這兒推薦使用Ngrok服務。win、mac都能方便使用,而且穩定,外網域名是固定的。
開啟它的網站www.ngrok.cc/註冊登入然後開通隧道。同時你需要下載相應的客戶端
在win中這是個批處理檔案,執行它然後填入相應的隧道id回車即可,在Mac下載客戶端目錄中執行如下命令。
./sunny clientid 隧道id複製程式碼
這裡在Ngrok官網上配置埠要設定成8080(設定成別的會造成token驗證失敗)
初始化專案並安裝依賴
$ mkdir koa-wechat && cd koa-wechat && npm init -y
$ npm i -S koa co-wechat 複製程式碼
推薦cnpm下載
業務邏輯
新建app.js
//app.jsconst Koa = require('koa');const wechat = require('co-wechat');
const app = new Koa();
app.use(async(ctx, next) => { if (ctx.path === '/wechat') { //自定義的路由,微信後臺配置的url await next(); } else { ctx.body = `Hello, koa2! Path is: ${ctx.path}`; }});
app.use(wechat({ token: '', //微信後臺配置的token appid: '', //微信公眾號的appid encodingAESKey: '' //微信公眾號的encodingAESKey}));
app.listen(8080); //埠要跟ngrok裡配置的對應
複製程式碼
確認程式碼裡的變數後,啟動服務。
node index.js複製程式碼
我們執行app.js,將服務跑起來,瀏覽器開啟localhost:8080
我們將能夠看見返回了Hello, koa2! Path is
。這兒推薦使用supervisor,它會監視你對程式碼的改動,並自動重動 Node
npm install -g supervisor
supervisor app.js複製程式碼
接下來就是用前面講的ngrok進行內網轉發了
./sunny clientid 隧道id複製程式碼
此時已經離成功一步之遙。
接入微信公眾平臺開發
接入流程
接入微信公眾平臺開發,開發者需要按照如下步驟完成:
1、填寫伺服器配置
2、驗證伺服器地址的有效性
3、依據介面文件實現業務邏輯
我們登入微信公眾平臺介面測試帳號mp.weixin.qq.com/debug/cgi-b…,登入後填寫介面配置資訊
,這時肯定不能配置成功的。我們需要驗證伺服器地址的有效性,開發者提交資訊後,微信伺服器將傳送GET請求到填寫的伺服器地址URL上,GET請求攜帶引數如下表所示:
signature 微信加密簽名,signature結合了開發者填寫的token引數和請求中的timestamp引數、nonce引數。 timestamp 時間戳 nonce 隨機數 echostr 隨機字串
開發者通過檢驗signature對請求進行校驗。若確認此次GET請求來自微信伺服器,原樣返回echostr引數內容,則接入生效,成為開發者成功,否則接入失敗。加密/校驗流程如下:
- 將token、timestamp、nonce三個引數進行字典序排序
- 將三個引數字串拼接成一個字串進行sha1加密
- 開發者獲得加密後的字串可與signature對比,標識該請求來源於微信
幸運的是這些事 co-wechat都幫我們做了~~~ 送給作者一朵小發發
進入測試號的頁面重新提交介面配置資訊,你將會看見一個一閃而過的配置成功過提示框。恭喜,這標誌著你正式跳進了微信開發的坑了。
github地址
參考連結
我的部落格
歡迎大佬們多多指點
https://www.jonathon.cn/