美文网首页
傻傻分不清的openid、unionid、session_key

傻傻分不清的openid、unionid、session_key

作者: Yuxin_Liu | 来源:发表于2018-03-21 11:47 被阅读0次

    基本概念

    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的方式,进行更新。

    相关文章

      网友评论

          本文标题:傻傻分不清的openid、unionid、session_key

          本文链接:https://www.haomeiwen.com/subject/mayvqftx.html