微信小程序有关登录流程的梳理

1,601 阅读3分钟

微信小程序中有许多标识,像code、AppId、AppSecret、openid、session_key、unionid、Sessionid这些,不梳理清楚就很容易搞晕。

code:前端开发者时候wx.login可以拿到用户的带有时效性的凭证,这个凭证就是code,在wx.login()API中不直接获取用户id是为了安全考虑。code的时效性为5分钟, 如果五分钟内小程序的后台不拿着这个临时身份证来微信后台服务器换取用户id的话,那么这个这个临时凭证就会作废。总结来说就是一个临时凭证,用来向微信服务器换取用户id的

AppId和AppSecret:AppId相当于一个小程序的身份证。微信为了确保拿code过来换取身份信息的人就是刚刚对应的小程序开发者,到微信服务器上请求用户id时需要同时带上AppId和AppSecret,AppId和AppSecret是微信鉴别开发者身份的重要信息,AppId是公开信息,泄露AppId不会带来安全风险,但AppSecret是开发者的隐私数据不应该泄露,如果发现泄露需要到小程序管理平台进行重置AppSecret,而code在成功换取一次信息之后也会立即失效,即便凭证code生成时间还没过期。

openid、seeion_key、unionId:当开发者服务器向微信服务器提供的参数(code,AppId,AppSecret)合法的话,接口会返回以下字段:

openid:微信用户的唯一标识,用来区分不同的微信用户

session_key:微信服务器给开发者服务器颁发的身份凭证,开发者可以用session_key请求微信服务器的其他接口来获取一些其他信息。session_key的意义是如果我们每次都通过小程序前端wx.login()生成登录凭证code去微信服务器请求信息,步骤太多造成整体耗时比较严重。所以需要给开发者服务器颁发一个时效性更长的会话密钥(session_key),session_key也存在过期时间

SessionId:是开发者服务器和开发者的小程序之间的会话密钥,用户登录成功之后,开发者服务器需要生成会话密钥SessionId,在服务端保持Sessionid对应的用户身份信息,同时把Sessionid返回给小程序。小程序后续发起的请求中携带上Sessionid,开发者服务器就可以通过服务器端的Sessionid信息查询到当前登录用户的身份,我们也可以把Sessionid在本地储存起来,以便在它没过期的时候能够重复利用,提高通信的性能

获取公众号的openid和用户是否关注过公众号

在小程序内无法获取到公众号的openid,需要使用webview跳转到一个空白的H5页面调用获取公众号openid接口才能获取openid,同时无论是否关注公众号都可以使用公众号中的获取用户基本信息接口来获取subscribe,用来判断用户是否关注公众号,如果需要使用公众号的获取用户信息接口获取用户的基本信息,则需要关注公众号。

详情查看微信公众号developers.weixin.qq.com/doc/offiacc…