微信小程序开发之登陆流程详解
安安 2017-09-06 来源 :网络 阅读 839 评论 0

摘要:本篇微信开发教程将为大家讲解微信开发编程的知识点,看完这篇文章会让你对微信开发编程的知识点有更加清晰的理解和运用。

本篇微信小程序开发教程将为大家讲解微信开发编程的知识点,看完这篇文章会让你对微信开发编程的知识点有更加清晰的理解和运用。


小程序登陆和登陆状态维护

1.客户端调用 wx.login() ,获得返回参数 code

2.客户端调用 wx.request() 将 code 发送到服务器

3.服务器将 code 和存储在服务器的 appid 和 appSecret 共三个参数作为请求参数加入URL,向下面的微信服务器接口发起请求:

https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code

服务器会获得返回参数 openid 和 session_key 。这两个数据主要用在支付,数据签名,数据解密等与用户登陆态和标识有关的逻辑中。

openid是用户唯一标识,但不建议直接用做后端服务器的各用户标示符。

session_key 是针对用户数据进行加密签名的密匙。session_key在文件校验,获取用户具体信息时均需使用

一般为了安全起见,这两个数据都不会发往客户端。

4.服务器应使用 openid 和 session_key 生成 3rd_session ,作为服务器派发给用户的登陆态标识token,用于用户的权限和数据管理。将其发送到小程序客户端。

5.小程序客户端将 3rd_session 存入 storage中。

6.后续用户进入小程序时,首先调用 wx.checkSession() 检测登陆态,如果失败,重新发起登陆流程。

ps.微信文档中说明使用 wx.checkSession() 来进行用户登陆态的时间管理,使开发者无需再开发用户登陆态时间管理逻辑,但实际开发中,wx.checkSession存在延迟,导致用户刚进入小程序时比较卡,所以建议开发者仍然自己去处理用户的登陆态过期时间管理,根据用户的token来使用相关逻辑进行处理。

7.如果检测用户登陆状态未失效,则从 storage 中读取 3rd_session。在需要用户标识的 wx.request() 时作为用户标识发送到服务器检验,服务器判断其是否合法。

ps.在生成 3rd_session 时,将 3rd_session 作为键,将 session_key + openid 作为值,存储在 服务器的 session 存储或数据库中。每个3rd_session都需要设置一个失效时间用来进行用户登陆态管理。

获取用户信息

微信官方禁止无必要的获取用户信息,尤其是在用户刚进入小程序时。开发者最好在需要时再调用接口获取用户信息,保证小程序的审核通过。

获取用户信息主要有以下要点:

根据微信请求用户信息接口wx.getUserinfo()函数的请求参数withCredentials的布尔值及用户的登陆状态不同,会有不同的返回值。

1.当withCredentials 为 true 且 用户登陆态未到期

返回的数据会包括 encryptedData,iv等敏感数据。

请求用户信息返回数据项如下:

1. userinfo 不包含敏感数据的用户信息

2. rawData 不包含敏感数据的原始数据字符串,用于签名校验

3. signature。 使用sha1( rawData + sessionkey ) 得到的字符串,用于签名校验数据

4. encryptedData 包含 openId,unionId 等用户敏感数据的加密数据

5. iv 加密算法的初始向量

2.当withCredentials 为 false 时

不要求登陆状态,返回数据不包含敏感数据,只包含用户的基本信息 userinfo 和 校验数据的rowData。

 

小程序的数据签名校验和数据解密

顺便提一下小程序的签名校验和数据解密

签名校验(用于校验数据完整性等):

需要使用session_key。客户端将 signature 和 rawData 发送到服务器,服务器通过相同的 sha1( rewData + session_key) 算法计算出 signature2,并与客户端发送过来的signature对比,校验数据完整性。

 

加密数据encryptedData的解密:

需要客户端将接口返回的encryptedData发送到服务器,服务器使用 appId 和 session_key ,根据加密算法的初始向量 iv 对 encryptedData 进行解密(微信提供有后端解密代码,包括python,php等(无java)


希望这篇微信开发文章可以帮助到你。总之,同学们,你想要的职坐标微信开发频道都能找到!

本文由 @安安 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程