【微信小程序】使用 Cryptojs 解密微信绑定手机号码_getphonenumber 怎么解密

小程序 0
<button open-type="getPhoneNumber" bindgetphonenumber="getphone">获取手机号码</button>

第二步:

接下来我们看点击获取后执行的回调 getphone ,直接输出 getphone 的事件对象 e,我们就可以得到两个非常有用的数据:encryptedDataiv,encryptedData 的内容就是我们加密过的手机号码,此处先对这两个数据进行保存

getphone(e){   console.log(e)    let  encryptedData=e.detail.encryptedData  //保存事件对象中的这两个数据    let  iv=e.detail.iv}


第三步:

接下来就是对加密数据进行解密的环节了,解密数据需要用到 session_key,但是这个东西我们需要调用请求来获取,请求的参数为以下三个数据:

参数需要以下三个数据,我们先对其一一获取到:

  • **小程序的appid:**这个可以去小程序公众平台开发设置里获取
  • **小程序的appsecret:**这个同样也在小程序公众开发平台中
  • **code值:**这个数据我们需要调用 wx.login 来获取,然后将获取到的code存入data中,切记获取code一定要在解密之前
wx.login({       success: (res) => {          that.setData({             code:res.code          })       },     })

第四步:

获取到这三个参数数据后就可以去请求 session_key 了,具体代码如下:注意代码中 url 里模板字符串中添加的数据为你上一步获取的三个数据,我们在请求的成功回调 success 中输出一下回调信息res,可以看到我们就得到了 session_key

wx.request({      url: `https://api.weixin.qq.com/sns/jscode2session?appid=${this.data.appid}&secret=${this.data.secret}&js_code=${this.data.code}&grant_type=authorization_code`,      method: 'POST',      header: {       'content-type': 'application/json'      },      success: function (res) {          console.log(res.data.session_key);      }    })


第五步:

最后一步就很简单了:我们要借助一个JS库来对加密信息进行解密 --------Cryptojs,需要这个库的小伙伴私聊我我单发给你


**第一步:**把这个Cryptojs文件拖到小程序目录的 utils 下:

**第二步:**在 utils 下新建 js文件 ----- RdWXBizDataCrypt.js,注意要和cryptojs文件同层级

**第三步:**复制以下代码到 RdWXBizDataCrypt.js 中,注意第一行的引入路径是否正确!

var Crypto = require('./cryptojs-master/cryptojs.js').Crypto;var app = getApp();function RdWXBizDataCrypt(appId, sessionKey) {  this.appId = appId  this.sessionKey = sessionKey}RdWXBizDataCrypt.prototype.decryptData = function (encryptedData, iv) {  // base64 decode :使用 CryptoJS 中 Crypto.util.base64ToBytes()进行 base64解码  var encryptedData = Crypto.util.base64ToBytes(encryptedData)  var key = Crypto.util.base64ToBytes(this.sessionKey);  var iv = Crypto.util.base64ToBytes(iv);  // 对称解密使用的算法为 AES-128-CBC,数据采用PKCS#7填充  var mode = new Crypto.mode.CBC(Crypto.pad.pkcs7);    try {    // 解密    var bytes = Crypto.AES.decrypt(encryptedData, key, {        asBpytes:true,        iv: iv,        mode: mode    });        var decryptResult = JSON.parse(bytes);      } catch (err) {    console.log(err)  }  return decryptResult}module.exports = RdWXBizDataCrypt

第四步:在需要用到解密的页面js文件中引入WXBizDataCrypt(别管这是啥,需要在哪解密手机号就把这个引入到哪个页面),我要在 getphone 这个事件回调里解密,所以在写getphone 的这个页面的引入,同样注意路径是否正确

var WXBizDataCrypt = require('../../utils/RdWXBizDataCrypt')

总结

大型分布式系统犹如一个生命,系统中各个服务犹如骨骼,其中的数据犹如血液,而Kafka犹如经络,串联整个系统。这份Kafka源码笔记通过大量的设计图展示、代码分析、示例分享,把Kafka的实现脉络展示在读者面前,帮助读者更好地研读Kafka代码。

麻烦帮忙转发一下这篇文章+关注我

就这一次!拼多多内部架构师培训Kafka源码笔记(现已绝版)

总结

大型分布式系统犹如一个生命,系统中各个服务犹如骨骼,其中的数据犹如血液,而Kafka犹如经络,串联整个系统。这份Kafka源码笔记通过大量的设计图展示、代码分析、示例分享,把Kafka的实现脉络展示在读者面前,帮助读者更好地研读Kafka代码。

麻烦帮忙转发一下这篇文章+关注我

[外链图片转存中…(img-PjXpUetI-1721164681728)]

也许您对下面的内容还感兴趣: