获取手机号
我们这个后台代码已经提前启动了啊,这个后端代码是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_key
、encryptedData
和iv
参数,用于调试和日志记录。然后尝试使用
AESUtils.decrypt
方法对加密数据进行解密,该方法可能来自自定义的工具类AESUtils
,通过传入的encryptedData
、session_key
、iv
以及字符编码 "UTF-8" 进行解密操作。解密成功后,将解密得到的字符串转换成一个
JSONObject
对象(使用阿里巴巴 Fastjson 库),并返回这个包含手机号码信息的JSON对象。如果在解密过程中发生异常,会捕获异常并打印堆栈信息,最后返回
null
。总之,这段代码的目的就是对接收到的微信加密手机号数据进行解密处理,并以JSON格式返回解密后的手机号信息。
这个返回的数据啊就是我们的电话号码啊
然后把我们的真实号码赋给我们的phone就可以了
这个就是我们获取手机号的一个方法,这个呢就是一个解密的工具类,把这个无序的字符串啊解密成我们的电话号码,
然后这个也是解析数据的一个工具类
这个数据就是加密的一个数据,这个导航和小程序轮播都是可以去修改的