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

微信小程序網絡

服務器網絡配置

支持request 普通網絡請求。
支持套接字通信 WebSocket
支持上傳文件 uploadFile
支持下載文件 downloadFile

回調

只要成功以后就會有success回調。

關于https

小程序必須使用https
必須經過icp備案

儲存

微信小程序有自己的本地緩存

用戶信息

小程序登錄

小程序登錄來一張時序圖,此時序圖書來自于微信官方。

image

大概也能看懂一點,整個過程需要經過開發者服務器。
其中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的接口回調。

開放數據校驗和解密

image

上面圖是來自于微信官方的流程圖
整個關鍵在于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


image

服務器配置

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.

+ 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服務器搭建

image

微信后臺添加域名

進入后臺,添加api.iming.info


image

好吧,是省事了,直接將上傳域名,下載域名全部添加為同一個域名了,事實上還是可以再分開的,在分開為上傳的一個域名,下載的一個域名,只需要添加request域名即可。
下一篇,繼續進行前后端通信

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,869評論 18 139
  • 前端開發者丨http請求 https:www.rokub.com 前言見解有限, 如有描述不當之處, 請幫忙指出,...
    麋鹿_720a閱讀 10,972評論 11 31
  • 1、和奶奶一起吃午飯:冬瓜毛豆海蝦湯+油煎荷包蛋+涼拌老黃瓜絲+水煮嫩玉米,好久沒有和奶奶一起吃飯了,我聽奶奶聊田...
    Morning小土豆閱讀 150評論 1 1
  • 世界有很多和自己價值觀不同 做事方法不一樣 觀念不和的人誘惑很大 不必要學他們 畢竟咋們不一樣不是一路人 這才是做自己
    趙揚帆閱讀 122評論 0 1
  • 王金莊人在與自然的適應與改造中,顯得是那樣的渺小和無力。很多自然科學無法弄懂,不免產生畏懼思想。 王金莊的房屋坐北...
    李彥國閱讀 680評論 3 2