微信小程序手机号授权登录

 微信小程序--登录授权,一键获取用户微信手机号并登录

获取手机号

我们这个后台代码已经提前启动了啊,这个后端代码是java开发的,使用的是springboot框架开发的,数据库使用的是mybatis-plus,这个代码是如何通过小程序端获取手机号码的呢,就是谁使用这个小程序就获取谁的代码,根据不同的人获取不同的代码,现在我们演示一下就是我们如何获取这个手机号码啊,就是手机号,通过点击这个按钮来获取

  <button class="layui-btn-mini"  open-type="getPhoneNumber" bindgetphonenumber="getPhoneNumber">获取手机号</button>

必须写成这样子,这个getPhoneNumber就是获取手机号的意思当然了这个getphonenumber改成其他的名字也可以,为了统一就都写出了这个getphonenumber,然后就会执行这个代码

getPhoneNumber(e) {

    console.log(e.detail.errMsg)

    console.log(e.detail.iv)

    console.log(e.detail.encryptedData)

    console.log(app.globalData.session_key)

    //session_key 这个是全局变里的参数,我app。js获取后保存在全局变量的

    get_phone(e.detail.encryptedData,app.globalData.session_key,e.detail.iv).then(res => {

      console.log(res)

      console.log(res.data.phoneNumber);

      this.setData({

        phone: res.data.phoneNumber

      })

    })

获取这个手机号码需要三个参数,

这个ssesion_key在微信登录的时候,会有一个sesssion_key保存在我们的全局变量里面,然后我们使用的时候就会拿出这个sesssion_key,这个接口会接受微信小程序的一个code,然后拿到code我们会通过一系列的东西先拿到一个session_key,拿到这个session_key之后呢,

  • getPhoneNumber(e) 函数会在用户授权并成功获取手机号码后被调用,参数 e 是微信小程序传递过来的事件对象,其中包含了加密后的手机号信息。

  • 首先通过 console.log 输出一些关键信息:

    • e.detail.errMsg:输出获取手机号的结果信息,用于判断是否成功获取。
    • e.detail.iv:加密算法的初始向量,用于配合session_key解密手机号数据。
    • e.detail.encryptedData:加密后的用户手机号数据。
  • console.log(app.globalData.session_key):输出全局变量 app.globalData.session_key 的值,这是微信登录时返回的 session_key,用于后续解密操作。

  • 调用异步方法 get_phone(e.detail.encryptedData, app.globalData.session_key, e.detail.iv),该方法接收三个参数,分别是加密后的手机号数据、session_key 和 iv,用于发起解密请求,获取真实的手机号码。

  • 在 get_phone 方法的 Promise 结果(即 then 方法中):

    • console.log(res):输出整个解密后的响应结果。
    • console.log(res.data.phoneNumber):输出解密后的手机号码。
    • 使用 this.setData({ phone: res.data.phoneNumber }) 将解密后的手机号码设置到当前页面的data中,以便在页面上展示或进一步使用。

  这段代码的主要目的是在用户授权同意后,获取并解密用户的微信绑定手机号码,并将其保存在页面的 phone 属性中。

然后这边的话是拿到了一个session_key呢又拿到了一个openid,通过这个链接呢可以拿到我们的session_key和openid,

也就是说我们把这个session_key和openid啊都返回这个小程序端,然后这个小程序端就会做一个保存,也就是会保存到我们这个全局变量里面,

这个全局变量呢就在在这个app.js文件里面,就是这个微信小程序启动的时候呢,它会做微信登陆的一个动作啊

这就是我们微信登录的一个动作啊,这是封装的一个小程序登录,不是小程序自带的啊,

然后我们微信登录在这个代码里面啊,然后这个代码是自己封装的啊,

实际上就是调用wx.login,wx.login就会有这个code,这个code 呢就是传回springboot api的那个code,

这边呢就算是说拿到我们的session_key和open_id全都保存到全局变量里面,

也就是我们获取手机号的话我们需要这三个参数

然后调用这个封装的getphone方法,获取手机号解密

调用这个api呢实际上就是调用后端的这个api,

把他三个参数全部传递过来,然后呢进行解密,解密后的数据通过我们的这个工具类,就是通过这些参数解析出来我们的数据也就是我们的电话号码,

这是Java后端的一个RESTful API接口,用于接收前端传来的加密数据并解密出微信用户的手机号码。具体说明如下:

  • 该方法名为 getPhoneNumber_jiemi,接收三个GET请求参数:

    • encryptedData:这是经过微信加密算法加密过的用户手机号码数据。
    • iv:加密算法的初始向量(Initialization Vector),用于解密过程。
    • session_key:微信登录接口返回的会话密钥,也是解密所需的重要参数。
  • 方法首先打印出传入的 session_keyencryptedData 和 iv 参数,用于调试和日志记录。

  • 然后尝试使用 AESUtils.decrypt 方法对加密数据进行解密,该方法可能来自自定义的工具类 AESUtils,通过传入的 encryptedDatasession_keyiv 以及字符编码 "UTF-8" 进行解密操作。

  • 解密成功后,将解密得到的字符串转换成一个 JSONObject 对象(使用阿里巴巴 Fastjson 库),并返回这个包含手机号码信息的JSON对象。

  • 如果在解密过程中发生异常,会捕获异常并打印堆栈信息,最后返回 null

总之,这段代码的目的就是对接收到的微信加密手机号数据进行解密处理,并以JSON格式返回解密后的手机号信息。

这个返回的数据啊就是我们的电话号码啊

然后把我们的真实号码赋给我们的phone就可以了

这个就是我们获取手机号的一个方法,这个呢就是一个解密的工具类,把这个无序的字符串啊解密成我们的电话号码,

然后这个也是解析数据的一个工具类

这个数据就是加密的一个数据,这个导航和小程序轮播都是可以去修改的

  • 18
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值