基本概念
openid: 用户唯一标识
session_key: 会话密钥
unionid: 同一个微信开放平台下的用户唯一标识
1. openid
小程序官方登录流程时序.png如何获取openid?官方的时序图就一目了然了:
step 1. 在登录的时候js调用wx.login(),拿到返回的code
step 2. 把code用wx.request()发送给Developer Server
step 3. Developer Server拿着code,连同appid和appsecret,调微信给的api
step 4. 微信把openid和session_key返回给Developer Server
step 5. Developer Server做处理:关联、加密等等
step 6. Developer Server把自定义的登录态返回给js
微信负责提供openid和session_key,至于业务方怎么用,看自己的了,但微信不建议业务方拿到openid和session_key,在不处理的情况下就返回给js。
2. unionid
阅读官方文档当中的UnionID机智说明就不难理解unionid是什么东西了:
"同一用户,对同一个微信开放平台下的不同应用,unionid是相同的。"
但是unionid能够获取是具备前提的:
“微信开放平台帐号必须已完成开发者资质认证”
开发者用认证过的账号登录,在进行小程序开发的时候,才能够通过调用接口wx.getUserInfo(),然后解密获得unionid。
3. session_key
小程序官方加密解密流程获取session_key的方式和openid一样。
官方文档中的加密签名详细解释了关于session_key的原理和算法。
其实前端不需要对session_key作什么操作,可以了解下它的功能:
- 微信那边会对开放数据进行签名和加密,那么Developer Server就可以拿着session_key对这些数据进行校验签名和解密,然后就能知道,拿到的数据到底是不是没有被篡改过的数据。
- session_key是具备有效期的,因此开发者可以通过session_key的有效期对登录状态进行维护,避免反复执行登录流程。前端可以通过wx.checkSession()校验当前的session_key是否有效,无效则重新登录;但是不要忘记登录之后通过重新获取session_key的方式,进行更新。
网友评论