微信小程序網絡通信(一)

微信小程序網絡

服務器網絡配置

支持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域名即可。

下一篇,繼續進行前後端通信

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章