微信小程序網絡
服務器網絡配置
支持request 普通網絡請求。
支持套接字通信 WebSocket
支持上傳文件 uploadFile
支持下載文件 downloadFile
回調
只要成功以後就會有success回調。
關於https
小程序必須使用https
必須經過icp備案
儲存
微信小程序有自己的本地緩存
用戶信息
小程序登錄
小程序登錄來一張時序圖,此時序圖書來自於微信官方。
大概也能看懂一點,整個過程需要經過開發者服務器。
其中code爲臨時登錄憑證,
先調用 wx.login(Object object) 獲取臨時登錄憑證,及code,然後wx.request()方法將登錄憑證發送到開發者服務器,開發者服務器得到code以後通過appiid和appsecret以及code將信息發送到微信接口服務,然後微信接口服務器將信息返回session_key + openid 等信息,接着開發者服務器進行自定義登錄態,即將登錄態將openid,session_key進行關聯,然後向小程序防返回自定義登錄態。
接着將自定義登錄態存入storage。
以後再次發送request的時候,將會攜帶開發者定義的自定義登錄態,然後將自定義登錄態查詢openid和session_key 在開發者服務器上進行查詢,接着 返回業務數據
整個過程類似於鑑權的過程。
其中session_key 是對用戶數據進行加密簽名的密鑰,即對用戶數據進行加密用的。
unionID
unionID爲用來區分用戶的唯一性用的。即同一個應用對於同一個微信開發平臺下的不同應用unioID爲相同的。
授權
部分接口需要經過用戶授權才能調用,如果用戶授權,將會調用該接口,如果用戶拒絕授權,將會調用fail的接口回調。
開放數據校驗和解密
上面圖是來自於微信官方的流程圖
整個關鍵在於session_key 通過session_key對數據進行簽名和加密,然後整個傳送到開發者服務器,在開發者服務器上進行解密操作,即使用session_key進行解密。整個過程全程加密,確保了信息在中途不能被截獲,不能被僞造,即確保了信息的安全。
數據簽名校驗
微信會對明文傳輸的數據進行簽名,開發真根據這些對明文的數據進行簽名校驗,防止數據被篡改。
簽名算法 sha1 一種哈希簽名算法,目前已經被證實可以被碰撞。 即被google證實兩份內容不同但是SHA-1會完全相同的碰撞實驗 https://zh.wikipedia.org/zh-sg/SHA-1
微信小程序HTTP網絡通信
小程序需要使用網絡通信,從後臺拉取信息。
搭建後臺服務器
後臺服務器使用node.js 外加nginx進行轉發,在node.js上爲了方便起見,直接不配置https證書,在nginx上配置https證書,爲了防止出現意外,所有的node.js暴露出的端口都在內網,只暴露nginx的接口
如下
node.js -> nginx -> 微信小程序
配置node.js
進行npm安裝koa框架,並暴露出端口
由於比較懶,就不用docker了,直接上服務器上npm,在說,本身也就一臺服務器,用不上docker,服務器配置還有點低,目前有三臺,一臺騰訊雲,配置blog,一臺燈塔國的,配置ss服務,一臺阿里雲的供自己折騰,域名解析
解析出域名api.iming.info 用於進行api
服務器配置
nginx
nginx 添加網站,並添加ssl證書
添加http://127.0.0.1:1937 進行反向代理
pm2
接着pm2管理器,添加pm2進行管理
安裝npm包
按照規範,是應該使用docker進行的,然後git上傳,在服務器端用git直接拉下來。這裏呢,只有一臺機器,直接省事,整個過程應該是全程自動化的,╮(╯▽╰)╭
進入目錄,進行npm
[root@xiao api.iming.info]# npm install --save koa npm WARN saveError ENOENT: no such file or directory, open '/www/wwwroot/api.iming.info/package.json' npm notice created a lockfile as package-lock.json. You should commit this file. npm WARN enoent ENOENT: no such file or directory, open '/www/wwwroot/api.iming.info/package.json' npm WARN api.iming.info No description npm WARN api.iming.info No repository field. npm WARN api.iming.info No README data npm WARN api.iming.info No license field. + [email protected] added 40 packages in 58.543s [root@xiao api.iming.info]#
在目錄下新建app.js
const koa = require('koa'); const app = new koa(); const main = ctx => { ctx.response.body = "hello world"; }; app.use(main); app.listen(1937);
接着用pm2管理器,啓動app.js
接着訪問 https://api.iming.info/ 出現hello world的json格式的數據即完成最基礎的node.js服務器搭建
微信後臺添加域名
進入後臺,添加api.iming.info
好吧,是省事了,直接將上傳域名,下載域名全部添加爲同一個域名了,事實上還是可以再分開的,在分開爲上傳的一個域名,下載的一個域名,只需要添加request域名即可。
下一篇,繼續進行前後端通信