傻傻分不清的openid、unionid、session_key

2018-03-21  本文已影响0人  Yuxin_Liu

基本概念

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作什么操作,可以了解下它的功能:

  1. 微信那边会对开放数据进行签名和加密,那么Developer Server就可以拿着session_key对这些数据进行校验签名和解密,然后就能知道,拿到的数据到底是不是没有被篡改过的数据。
  2. session_key是具备有效期的,因此开发者可以通过session_key的有效期对登录状态进行维护,避免反复执行登录流程。前端可以通过wx.checkSession()校验当前的session_key是否有效,无效则重新登录;但是不要忘记登录之后通过重新获取session_key的方式,进行更新。
上一篇下一篇

猜你喜欢

热点阅读