首先调用微信的API方法wx.login() 获取 临时登录凭证code,通过凭证进而换取用户登录态信息,包括用户在当前小程序的唯一标识(openid)、微信开放平台帐号下的唯一标识(unionid,若当前小程序已绑定到微信开放平台帐号)及本次登录的会话密钥(session_key)等。用户数据的加解密通讯需要依赖会话密钥完成。
一、获取临时登录凭证code,openid,unionid,session_key
1.获取临时登录凭证code
2.用 code 换取 openid,unionid 和 session_key
在获取到登录成功后微信返回的 code 后,我们要用 code 换取 session_key 和 openid 和 unionid
换取方式有两种:
第一种不借助后端(不推荐)
不借助后端获取,你必须知道你小程序的 AppID(小程序ID)和 AppSecret(小程序密钥),这个可以在 微信公众平台里面,找到开发管理->开发设置 中看到,然后用AppID和AppSecret以及上一步获取到的code请求微信的auth.code2Session接口,获取openid 和 unionid 和 session_key
注意:这样做的话你的小程序的AppID和AppSecret会明文出现在前端代码中,有泄漏风险
第二种借助后端
借助后端获取实际上就是让后端给你一个接口,你请求后端的接口,后端再去请求微信的 jscode2session,这样你前端只需要提交code 就可以了。AppID和AppSecret都是保存在后端,不容易泄漏。本文采用的就是第二种方法(注意采用第二种方法需要告诉后端你的AppID和AppSecret是多少,不然前后端不统一可能出现错误)
二、微信授权登录如何获取用户的头像,昵称和手机号呢?
1.获取用户的头像,昵称,直接调用微信的API方法:wx.getUserProfile()
用户允许后,该方法调用成功,可以获取到头像和昵称,但是获取不到用户的手机号
2.获取用户的手机号
从基础库 2.21.2 开始,对获取手机号的接口进行了安全升级,需要用户主动触发才能发起获取手机号接口,所以该功能不由 API 来调用,需用 button组件的点击来触发。注意判断一下用户是否拒绝授权,如果拒绝授权,需要弹框提示用户重新授权。
<button open-type="getPhoneNumber" @getphonenumber="onGetPhoneNumber">
按钮点击触发事件 onGetPhoneNumber,如果用户允许授权 ,可以拿到e.detail.encryptedData(加密的用户信息),e.detail.iv(加密算法的初始向量),这两个参数是加密的信息,如果要得到用户手机号,需要对其进行解密,解密有前端解密和后端解密两种方式,本文采用后端解密。后端解密就是让后端创建一个接口,前端请求这个接口,提交 encryptedData 和 iv 和 session_key 让后端给你返回解密后的信息。后端解密后获取到用户手机号不需要传回前端。
需要注意:AppID使用的是测试号的时候,在微信开发者工具里面是不能上传代码的,只有申请正式号的时候,才可以上传代码。但是基于uniapp开发的微信小程序项目,需要先在HBuilderX里面打包成微信小程序项目,再找到打包后的文件夹mp-weixin重新拖到微信开发者工具中,再上传到微信公众平台。
网友评论