本篇主要描述微信小程序的后台登录,获取用户信息,解密微信运动数据
首先 登录由前端发起 小程序授权用户才能进行登录 前端具体接口信息可登录微信开放平台进行查看
前端调用 wx.login() 获取临时登录凭证code ,并回将code传到后台服务器,后台服务器通过微信开放的code2Session接口
GET https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code
进行调用,微信接口将返回session_key,openid等信息
请求参数
属性 | 类型 | 默认值 | 必填 | 说明 |
---|---|---|---|---|
appid | string | 是 | 小程序 appId | |
secret | string | 是 | 小程序 appSecret | |
js_code | string | 是 | 登录时获取的 code | |
grant_type | string | 是 | 授权类型,此处只需填写 authorization_code |
返回的 JSON 数据包
属性 | 类型 | 说明 |
---|---|---|
openid | string | 用户唯一标识 |
session_key | string | 会话密钥 |
unionid | string | 用户在开放平台的唯一标识符,在满足 UnionID 下发条件的情况下会返回 |
errcode | number | 错误码 |
errmsg | string | 错误信息 |
此时 我们可以获取openid,以及秘钥session_key,通过前端调用 wx.getUserInfo(Object object)可以获取到除openid外的其他用户信息(需判断是否授权,授权后才能调用),
前端具体接口信息可在微信开放平台查看
https://developers.weixin.qq.com/miniprogram/dev/api/open-api/user-info/wx.getUserInfo.html
wx.getUserInfo会返回UserInfo信息以及encryptedData(包括敏感数据在内的完整用户信息的加密数据),iv(加密算法的初始向量)
我们也可以利用session_key对session_key进行解密获取到用户的具体信息(包含unionId)
具体解密方法给出一个链接可以参考这个大哥的 https://www.jianshu.com/p/3170749b6660
微信运动数据需前端调用wx.getWeRunData(Object object) 接口描述
https://developers.weixin.qq.com/miniprogram/dev/api/open-api/werun/wx.getWeRunData.html
该接口会返回encryptedData(微信运动数据的加密信息) iv(加密算法的初始向量)
通过之前获取的session_key 可对加密信息进行解密 解密方法参照微信用户数据解密的链接
微信小程序登录流程就是前端返回 code、encryptedData(微信用户加密信息)、iv,后端根据code通过code2Session接口获取session_key,
然后用session_key去解密encryptedData来获取微信用户数据
注意:前端调用wx.getUserInfo(Object object) wx.getWeRunData(Object object) 需判断是否授权
session_key有过期时间 有效期是30天
微信小程序前端没有cookie 前端可以将后台返回的登录标识存在storage 请求后台时带上
微信小程序绑定微信公众开放平台后,解密信息才会出现unionId
同一个用户在微信公众开放下的不同应用(小程序,公众号)上有不同的openid 有相同的unionId