本文转自:http://www.jianshu.com/p/d9996cafdb31

官方文档

文档相关地址:

用户登录 获取用户数据 用户数据的签名验证和加解密

登录时序图.png

微信两个api所拿到的信息:login和getUserInfo

返回的信息.png

注册/登录

小程序端:

通过上面wx.login和wx.getUserInfo两个api拿到相应的信息,并通过上方接口传给自己的服务器. 需要传输的信息有7个参数:

appid  小程序唯一标识
secret  小程序的 app secret
js_code //wx.login登录时获取的 code,用于后续获取session_key //下面两个参数用户服务器端签名校验用户信息的 signature 使用 sha1( rawData + sessionkey ) 得到字符串,用于校验用户信息。 rawData 不包括敏感信息的原始数据字符串,用于计算签名。 //下面两个参数是用于解密获取openId和UnionId的 encryptedData 包括敏感数据在内的完整用户信息的加密数据 iv 加密算法的初始向量

当然,可以精简为以下三个参数. 其余的签名校验的参数可省略,而appid和secret可以直接写在服务器.

js_code //  wx.login登录时获取的 code,用于后续获取session_key
encryptedData  包括敏感数据在内的完整用户信息的加密数据
iv 加密算法的初始向量

服务端处理逻辑

相关的信息传输给服务器后,服务器

1.先根据js_code去微信服务器拿到session_key 2.(此步可省略)使用 sha1( rawData + sessionkey )拿到字符串,判断与signature值是否相同,如果相同则用户信息无误,可进行下一步.如果不同,则说明用户信息被篡改或过期. 3.然后根据解密算法自行解密(输入参数为appId,sessionKey,encryptedData,iv,返回一个jsonObj),拿到openId和unionId等信息,执行服务器端的注册/登录操作. 4.注册/登录操作逻辑完成后,将我们服务器的sessionId(或其他token),以及用户信息返回给客户端.

其中,服务器去获取session_key的请求为:

(小写为固定写好的,大写为待替换的) https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code

返回:

    //正常返回的JSON数据包{"openid": "OPENID","session_key": "SESSIONKEY" "expires_in": 2592000 } //错误时返回JSON数据包(示例为Code无效) { "errcode": 40029, "errmsg": "invalid code" }

相关解密算法:

https://mp.weixin.qq.com/debug/wxadoc/dev/api/signature.html

注意:示例代码中有node,c++,php,python的,没有java的.

需要服务器返回的信息:

sessionId/token 登录状态标识
userInfo: jsonObject,用户在我们平台上的信息,其内容与getPersonalInfo接口返回的相同.

最后,将登录操作封装成方法,需要处调用即可

//最终供外面调用的方法
function login(){ console.log('logining..........'); //调用登录接口 wx.login({ success: function (e) { console.log('wxlogin successd........'); var code = e.code; wx.getUserInfo({ success: function (res) { console.log('wxgetUserInfo successd........'); var encryptedData = encodeURIComponent(res.encryptedData); thirdLogin(code,encryptedData,res.iv);//调用服务器api } }) } }); } function thirdLogin(code,encryptedData,iv){ var url = "eeee/xxx/login/ttttt"; var params = new Object(); params.code = code; params.encryptedData = encryptedData; params.iv =iv; buildRequest(new Object(),url,params,{ onPre: function(page){}, onSuccess:function (data){ console.log('my login successd........'); console.log(data); getApp().globalData.session_id = data.session_id; getApp().globalData.uid = data.uid; getApp().globalData.isLogin = true; }, onError : function(msgCanShow,code,hiddenMsg){ } }).send(); }
微信小程序

转载于:https://www.cnblogs.com/freeliver54/p/6529564.html

[转]微信小程序登录逻辑梳理相关推荐

  1. 微信小程序登录逻辑以及代码php后端

    逻辑梳理:首先前端发送code 给后端,后端拿到code 请求微信api接口获得 openid 和access_token,后端返回login_code 废话不多说 直接上代码 public func ...

  2. 小程序---365笔记第11天---微信小程序登录接入

    接入前的准备工作参考文档:微信小程序登录接入 (必做) 登录逻辑:小程序登录逻辑梳理 使用插件参考文档:https://developers.weixin.qq.com/miniprogram/dev ...

  3. 微信小程序登录功能的前端设计与实现

    导语 | 登录/注册这模块就像个冰山,我们通常以为它就是「输入账号密码,就完成登录了」,但实际下面还有各种需要考虑的问题.作为应用的基础能力,登录/注册的设计需要有足够的健壮性,避免出现全站性阻塞.同 ...

  4. 微信小程序研发问题梳理:翻页:下拉:缓存:canvas:富文本:分享

    微信小程序研发问题梳理 最近鼓捣小程序的时候,着实遇到了一些问题,尽管有些再翻看文档几遍,就能找到答案,但还是要发挥下烂笔头的功效,顺便梳理下. 问题列表 登录流程 小程序标签页地址无法跳转问题 页面 ...

  5. java后端微信小程序登录与注册

    java后端微信小程序登录与注册&微信登录授权 分析: 微信小程序用户表 的字段来源于微信服务器 , 必须想办法去获取到对应的用户信息 找到微信开放平台: 微信开放平台 以下是微信开放平台给出 ...

  6. java微信小程序接口openid过期_Java微信小程序登录接口获取openid

    根据官方文档,wx.login()的回调函数中,需要我们传递生成的用户登录凭证到code2accessToken的接口中 小程序登录方法 code2accessToken的方法中要求传入如下参数 co ...

  7. Spring Boot + Spring Security + JWT + 微信小程序登录

    Spring Boot + Spring Security + JWT + 微信小程序登录整合教程 参考文章 文章目录 整合思想 整合步骤 1. AuthenticationToken 2. Auth ...

  8. SpringBoot中,使用WxJava SDK 实现微信小程序登录

    概述 WxJava SDK是一个比较实用的第三方微信开发 Java SDK github地址:https://github.com/Wechat-Group/WxJava SpringBoot项目中使 ...

  9. springBoot+微信小程序登录

    微信小程序登录流程 微信小程序登录流程涉及到三个角色:小程序.开发者服务器.微信服务器 三者交互步骤如下: 第一步:小程序通过wx.login()获取code. 第二步:小程序通过wx.request ...

最新文章

  1. [新手-数据分析师]numpy学习笔记(2nd)
  2. 分布式事务不理解?一次给你讲清楚!
  3. 手写简版spring --5--资源加载器解析文件注册对象
  4. Android 7.0 Keyguard流程分析
  5. 情感分析之电影评论分析-基于Tensorflow的LSTM
  6. 决策树原理详解及python代码实现
  7. dev layoutview 怎么显示大小_「转」磁盘满了,为啥du却显示还有很大空间?
  8. 事务演练 mysql
  9. 一个失败的创意:GPGPU纹理化通用加速kD树的实现
  10. linux日志.pdf,一种用于LINUX的AUDIT日志分析方法.pdf
  11. NAACL2021论文:UniDrop:一种简单而有效的Transformer提升技术
  12. 编译原理中:短语,直接短语,句柄
  13. DMA映射 dma_addr_t
  14. 凸优化第四章凸优化问题 4.1 优化问题
  15. JDK 1.8 新特性学习(Stream)
  16. Drools workbench kie-server部署和简单使用(全流程
  17. Java开发工具 - IDEA 的使用及简单配置
  18. layabox2.0 开发微信小游戏经验分享
  19. java里直线绕z轴逆时针旋转_空间直线绕任意轴旋转后的方程
  20. Mp3:最后的免费“午餐”

热门文章

  1. 充实你的素材库!10款免费的 PSD 素材下载
  2. Cassandra1.2文档学习(5)—— Snitch
  3. nhibernate学习之集合组合依赖
  4. CodeSmith终极玩法
  5. 1.KafKa-介绍
  6. 初识react(二) 实现一个简版的html+redux.js的demo
  7. Centos7.0 搭建Zabbix环境
  8. IBM 安全部门 CTO:AI 必须被重新定义为“增强智能”
  9. HDU2193-AVL-数据结构-AVL
  10. WEB在线预览PDF