店铺
微信小程序有自己的本地缓存
用户信息
小程序登录
登录小程序后,有一个时序图,这个时序书来自于陌陌官网。
我大概能理解一点,整个过程需要经过开发者服务器。
其中code为临时登录账本,
首先调用wx.login(Object object)获取临时登录账本和代码,然后wx.request()方法将登录账本发送给开发者服务器,开发者服务器将信息通过appiid发送给陌生人,appsecret和code拿到code Momo socket服务后,然后Momo socket服务器返回session_key + openid等信息,然后开发者服务器进行自定义登录状态,将登录状态下的openid和session_key关联起来,然后返回小程序的自定义登录状态。
然后将自定义登录状态保存到存储中。
以后再次发送请求时,会携带开发者定义的自定义登录状态,然后在开发者服务器上查询自定义登录状态的openid和session_key,然后返回业务数据
整个过程与信令过程类似。
其中session_key是对用户数据进行加密和签名的秘钥,用于对用户数据进行加密。
联盟ID
unionID用于区分用户的唯一性。 即同一个应用程序在同一个Momo开发平台下,不同的应用程序具有相同的unioID。
授权的
有些套接字只有在用户授权后才能调用。 如果用户授权,套接字将被调用。 如果用户拒绝授权,将调用失败套接字。
开放数据校准和揭秘
上图来自Momo官方流程图
整个密钥是session_key通过session_key对数据进行签名加密,然后将整个数据传输到开发者服务器,在开发者服务器上进行解密操作,即使用session_key进行解密。 整个过程进行加密,保证信息在中间不能被夺取或伪造,即保证了信息的安全。
数据签名校准
微信会对明文传输的数据进行签名,开发者会通过这种方式对明文数据进行签名和校准,防止数据被篡改。
签名算法sha1是哈希签名算法,已被证明是可碰撞的。即谷歌否认两份内容不同,SHA-1会完全相同碰撞实验微信小程序HTTP网络通信
小程序需要利用网络通信从后台拉取信息。
搭建后台服务器
后台服务器使用node.js加nginx进行转发。 为了方便,在node.js上没有直接配置https证书,而是在nginx上配置https证书。 为了避免意外,node.js暴露的端口全部是外网,只暴露nginx的socket
如下
node.js -> nginx -> 微信小程序
配置node.js
执行npm安装koa框架并暴露端口
因为我很懒,所以不需要docker。 我直接去服务器上的npm。 换句话说,它本身只是一个服务器,我不需要docker。 服务器配置还是有点低。 目前有三个微信小程序自己的网站,一个是腾讯云的,配置博客,一个是灯塔国的,配置ss服务,自己用阿里云的一个。
域名系统
解析api.iming.info域名为api
服务器配置
nginx
nginx添加网站,并添加ssl证书
添加:1937 用于反向代理
颗粒物
然后pm2 manager,添加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
然后访问json格式的数据,其中出现hello world,完成最基本的node.js服务器设置
微信后台添加域名
进入后台,添加api.iming.info
嗯,这很容易。 您可以直接将上传域名和下载域名添加为同一个域名。 其实微信小程序自己的网站,他们还可以再次分开。 当上传域名和下载域名分离时,只需添加请求域名即可。 。