支持request 普通網絡請求。
支持套接字通訊 WebSocket
支持上傳文件 uploadFile
支持下載文件 downloadFilenode
只要成功之後就會有success回調。nginx
小程序必須使用https
必須通過icp備案git
微信小程序有本身的本地緩存算法
小程序登陸來一張時序圖,此時序圖書來自於微信官方。docker
大概也能看懂一點,整個過程須要通過開發者服務器。
其中code爲臨時登陸憑證,
先調用 wx.login(Object object) 獲取臨時登陸憑證,及code,而後wx.request()方法將登陸憑證發送到開發者服務器,開發者服務器獲得code之後經過appiid和appsecret以及code將信息發送到微信接口服務,而後微信接口服務器將信息返回session_key + openid 等信息,接着開發者服務器進行自定義登陸態,即將登陸態將openid,session_key進行關聯,而後向小程序防返回自定義登陸態。
接着將自定義登陸態存入storage。
之後再次發送request的時候,將會攜帶開發者定義的自定義登陸態,而後將自定義登陸態查詢openid和session_key 在開發者服務器上進行查詢,接着 返回業務數據npm
整個過程相似於鑑權的過程。json
其中session_key 是對用戶數據進行加密簽名的密鑰,即對用戶數據進行加密用的。小程序
unionID爲用來區分用戶的惟一性用的。即同一個應用對於同一個微信開發平臺下的不一樣應用unioID爲相同的。後端
部分接口須要通過用戶受權才能調用,若是用戶受權,將會調用該接口,若是用戶拒絕受權,將會調用fail的接口回調。微信小程序
上面圖是來自於微信官方的流程圖
整個關鍵在於session_key 經過session_key對數據進行簽名和加密,而後整個傳送到開發者服務器,在開發者服務器上進行解密操做,即便用session_key進行解密。整個過程全程加密,確保了信息在中途不能被截獲,不能被僞造,即確保了信息的安全。
微信會對明文傳輸的數據進行簽名,開發真根據這些對明文的數據進行簽名校驗,防止數據被篡改。
簽名算法 sha1 一種哈希簽名算法,目前已經被證明能夠被碰撞。 即被google證明兩分內容不一樣可是SHA-1會徹底相同的碰撞實驗 https://zh.wikipedia.org/zh-sg/SHA-1
小程序須要使用網絡通訊,從後臺拉取信息。
後臺服務器使用node.js 外加nginx進行轉發,在node.js上爲了方便起見,直接不配置https證書,在nginx上配置https證書,爲了防止出現意外,全部的node.js暴露出的端口都在內網,只暴露nginx的接口
以下
node.js -> nginx -> 微信小程序
進行npm安裝koa框架,並暴露出端口
因爲比較懶,就不用docker了,直接上服務器上npm,在說,自己也就一臺服務器,用不上docker,服務器配置還有點低,目前有三臺,一臺騰訊雲,配置blog,一臺燈塔國的,配置ss服務,一臺阿里雲的供本身折騰,
解析出域名api.iming.info 用於進行api
nginx 添加網站,並添加ssl證書
添加http://127.0.0.1:1937 進行反向代理
接着pm2管理器,添加pm2進行管理
按照規範,是應該使用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. + koa@2.5.3 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域名便可。 下一篇,繼續進行先後端通訊