文章目录
- AppId
- OpenID
- UnionId
- 处理方法
- session_key
AppId
appid 是微信账号的唯一标识,这个是固定不变的;
如果了解微信公众号开发的就需要注意一下,小程序的appid 和 公众号的appid 是不一致的
OpenID
为了识别用户,每个用户针对每个公众号或小程序等应用会产生一个安全的OpenID,公众号或应用可将此ID进行存储,便于用户下次登录时辨识其身份,或将其与用户在第三方应用中的原有账号进行绑定
UnionId
UnionId也是用户的标识符,但它与OpenID不同的是,同一个微信用户,登录同一个开发主体下的多个小程序或公众号的时候,分配的UnionId是一样的。
处理方法
首先我们已经知道了 UnionID 和 OpenID 是一对多的关系,
同一个开放平台下的多个应用对于同一微信用户所生成的 UnionID 是一致的,
所以 UnionID 就和我们在用户表里给注册用户生成的 userID 一样,可以作为用户的唯一标识,
但是同一用户分别在多端(小程序、App)登录时的 OpenID 却是多个,
此时我们就要通过不同端(小程序、App)的标识来把这几个不同的 OpenID 区分开来关联到 UnionID 和 userID 上,
也就是一条用户信息里会包含有:1 个 userID、1 个 UnionID、多个可以区分开来的 OpenID;
有人可能会说了,有 UnionID 就行了,为啥还要存储这个不能作为唯一标识的 OpenID 呢,那我来告诉你吧,主要就以下几点:
微信 SDK 的某些 api 可能会用到 OpenID 作为参数;
之前,OpenID 的获取不需要用户授权就能拿到,但是 UnionID 的获取就需要用户授权同意了之后才能获取到,你不能排除公司的某些业务为了缩短流程链路,不想进行用户授权,所以这个时候就需要用 OpenID 作为当前平台用户的唯一标识来使用了;
补充一点:现在微信对 UnionID 的获取做了调整,无需授权也可以直接获取到了;
还有最重要一点,涉及到开放平台主体迁移的时候,OpenID 可是能派上大用场,往下看👇🏻;
微信登录过程
wx.login() 这个方法会返回一个code
后台根据 code + appid + appsecret 这个三个参数完成登录的认证,得到微信客户端的appid + session_key
session_key
微信客户端通过wx.getUserInfo()获取用户的信息
后台有时候也需要获取微信客户端的用户信息,因此,就需要利用session_key这个秘钥来从微信平台中获取
官方文档原文
后台如果想要获取用户的信息,就一定要知道session_key,如果session_key 过期,就需要客户端完成一次登录的流程
签名校验以及数据加解密涉及用户的会话密钥 session_key。 开发者应该事先通过 wx.login 登录流程获取会话密钥 session_key 并保存在服务器。为了数据不被篡改,开发者不应该把 session_key 传到小程序客户端等服务器外的环境。