喂,快給我打一個小程式預覽碼

發表於2018-07-12

需求

開發小程式的朋友們隨時都會聽到一句話:“喂,快給我打一個xxx環境的預覽碼”,無論你正在幹什麼,都得趕緊地回一句:“稍等,這就給你打碼……”

然後苦逼的你build了一個xxx環境的包,開啟了微信開發者工具,點了一下預覽,等了一下,預覽碼出來了,你複製丟給你的爸爸們。

終於有一天,你正在專心致志做一些不可描述的事情時,“喂,快給我打一個xxx環境的預覽碼”,這時你內心怒吼了一句:“老子不給你打碼!你自己打去!”

於是就有了這個需求,要搞個東西讓爸爸們自主打碼,嗯,應該就是隻有一個按鈕,點一下就可以出現預覽二維碼的東西,意淫了一下應該是這樣的:

打碼過程

沒錯!就這樣幹!

規劃一下

幹大事就要從胡思亂想開始,現在來想想要搞成這個功能,需要做點什麼準備工作吧。

找微信開發者工具的介面
最重要的事情莫過於看看微信開發者工具有沒有給我們提供這樣的介面讓我們去操作,經過一番查閱文件我們會發現,果然有!

https://developers.weixin.qq….
會發現,文件給我們提供了兩種方式的介面,命令列呼叫以及HTTP呼叫。有了介面,一切都好辦了,無非就是調一下介面,拿到二維碼,貼到頁面上去而已嘛,很簡單。

梳理開發流程
我們就把這個簡單的事情,用流程圖說明一下:
https://www.processon.com/vie…
流程圖

所需技術

工欲善其事,必先利其器,我們要搞這個東西,還是先要把用到的技術整理一下。

  1. 微信開發者工具
  2. 一個小程式專案(這裡以一個mpvue專案為例子)
  3. 前端vue + vux,這裡前端沒什麼需要做的東西,這樣的搭配純屬是因為本來就正在做移動端的東西,直接拿來用而已。
  4. 後端koa2,當然後端用什麼都可以,這裡選擇koa2,純屬是因為我也不會用別的……
  5. 前後端HTTP請求統一用axios
  6. 涉及到node操作命令列需要用到shelljs

好像沒別的東西了,用到了再說吧。

擼起袖子從後端開始

為了省事,直接把前後端的東西放在一起。專案目錄:

專案目錄

可以看到server這個目錄下放的都是後端的東西。

server/index.js
先看看入口檔案index.js,從這裡我們可以知道後端要做兩件事情,第一要能訪問到前端build出來的靜態資源,第二要能與前端通過HTTP介面進行互動。見程式碼:

靜態資源方面的話使用koa-static即可,重點是怎樣給前端提供介面,這就要看路由了。

server/router/index.js

這裡可以清晰看到,後端提供了四個介面,但具體每個介面的業務邏輯則封裝在controller裡的wx.js,如果以後還有別的業務邏輯,就在controller加相應的模組即可。

server/controller/wx.js

為了程式碼更加清晰,這裡將具體操作微信開發者工具的介面邏輯抽到util/wxToolApi.js裡去了,僅僅處理怎樣以統一格式返回給前端。
util/wxToolApi.js

這裡有一點需要注意,為什麼只有open介面需要用命令列呼叫方式?那是因為HTTP呼叫方式必須加埠,比如open介面

如果你根本都沒有開啟微信開發者工具,在以下地方就會找不到埠:

所以作為一個全自動化打碼工具,怎麼可能還要自己去手動開啟微信開發者工具呢!

前端

後端的東西基本就那麼多,終於到前端了,前端十分簡單,就不多說了:

這裡有一個坑就是,login返回的base64是帶了data:image/jpeg;base64,字首的,所以可以直接放到img的src裡,但是獲取預覽碼的preview返回的卻沒有這個字首!所以需要自己加上去,就是那個base64Prefix:'data:image/png;base64,'

最後

其實到這裡已經基本實現了整個打碼功能,但如果真的要可以用還有很多事情沒做。

  1. 部署到測試機器上。雖然可以直接用自己的機子作為部署這個工具的機器,但這實在是有點……如果要部署到測試機器上,有一個問題就是,微信開發者工具依賴圖形介面,而伺服器一般是命令列,雖然有 https://github.com/cytle/wech… 這樣的專案移植微信開發者工具到linux,但這種部署方式似乎還是怪怪的。
  2. 假設完成了上述部署,進行小程式專案打包的環節需要修改一下,變成根據選擇的環境,到相應的程式碼倉庫(比如gitlab)拉取該環境的最新程式碼,然後進行安裝依賴才能執行打包命令。
  3. 既然都做到這一步了,也不差把上傳小程式也加上去,微信開發者工具介面也有提供,這樣一來整個測試打碼到上線的步驟都有了。

End~

相關文章