首页 > 编程语言 >微信小程序9 关于解密,前端解密

微信小程序9 关于解密,前端解密

时间:2023-08-07 14:12:01浏览次数:47  
标签:code 微信 前端 解密 js res data

我们之前在学习button时,可以通过调用 getphonenumber 获取手机号,但是获取后却发现是加密了的,那么如何解密呢,微信官方提供了相应的方法。

 

1.首先我们可以去下载官方提供的解密的js放在本地,推荐放到这个utils文件下。

关键是这个RdWXBizDataCrypt.js文件,可以通过这个名字去百度。

 

2.在相应的JS文件中引入这个解密js,注意自己的相对路径。

const RdWXBizDataCrypt = require('../../utils/crypto/RdWXBizDataCrypt');

 

3.首先,我们要通过微信提供的登录方法去获取对应的js_Code,这个很重要。

官方推荐是在加载时获取这个code而不是在方法内部,否则可能会出现加密时的code和解密时的code不一致,因为有时效。

这里代码只截取了一部分,后面再完善,可以看到我在data部分声明了一个变量loginCode用来接收code,方便其他方法使用。

onLoad(options) {
    //在加载时获取登录的code,只要状态在就可以一直用
    wx.login({
      success: (res) => {
        console.log('res:' + JSON.stringify(res));
        this.setData({
          loginCode: res.code
        });
。。。。。。

 

4.获取到code后,就可以用我们的appId,appsecret和code来获取一个session_key,这个也很重要。

这里是完整的代码,接口地址https://api.weixin.qq.com/sns/jscode2session是微信官方提供的,参数是固定的那几个,我都事先在data中声明了,这里就不暴露出来,appId和appSecret都可以去微信开发者后台查看的。

需要注意的是,如果直接调用接口,会报错没有配置域名,因为微信后台是需要白名单的,如果是公司用,那就配上公司的域名,如果是个人学习,可以在微信开发工具中设置跳过校验,就在右上角的详情选项里,这要就能正常调用。

  onl oad(options) {
    //在加载时获取登录的code,只要状态在就可以一直用
    wx.login({
      success: (res) => {
        console.log('res:' + JSON.stringify(res));
        this.setData({
          loginCode: res.code
        });
        wx.request({
          url: 'https://api.weixin.qq.com/sns/jscode2session',
          data: {
            appid: this.data.appId,
            secret: this.data.appSecret,
            js_code: this.data.loginCode,
            grant_type: 'authorization_code'
          },
          method: 'GET',
          header: {
            'content-type': 'application/json'
          },
          success: (re) => {
            console.log('re:' + JSON.stringify(re));
            this.setData({
              sessionKey: re.data.session_key
            })
          }
        })


      },
    })
  },

 

5.在原来的button事件中解密。

用appId和sessionKey去实例化解密js的对象,然后传入加密字符串和偏移量,获取明文号码。

  getPhoneNumber(e) {
    console.log(e);
    let pc = new RdWXBizDataCrypt(this.data.appid, this.data.sessionKey);
    let data = pc.decryptData(e.detail.encryptedData, e.detail.iv);
    console.log('phone:' + data.phoneNumber);
  },

 

不仅仅是手机号,任何加密规则相同的官方内容都可以用这一套解密。

 

需要特别特别注意的是!!!

严谨的情况下其实是在后台解密比较好,包括appId和appSecret都不应该暴露在js中,这里只是示范一下前台的解密,因为有时候可能小的项目,压根没有所谓后端可调用,都放在js里做,这样的话,至少关键的appid这种放到配置文件中去。

标签:code,微信,前端,解密,js,res,data
From: https://www.cnblogs.com/luyShare/p/17611289.html

相关文章

  • 微信小程序反编译
    微信小程序反编译工具准备1.模拟器(夜神,逍遥等都可以)2.模拟器里的微信3.模拟器里的RE管理工具,这个可以现在物理机里下载了apk文件,然后拖到模拟器里4.安装nodejs环境https://www.swvq.com/link/to?link=https://nodejs.org/en/5.反编译工具链接:https://pan.baidu.com/s......
  • 前端获取 文件md5值
    //md5值计算exportfunctionfileToMd5(file:Blob){returnnewPromise((resolve)=>{constfileReader=newFileReader();fileReader.onloadend=(ev)=>{resolve(CryptoJs.MD5(CryptoJs.enc.Latin1.parse(ev.target.result)).toString(CryptoJs......
  • 前端函数汇总
    获得本周,周一和周日letnow=newDate();letnowTime=now.getTime();letday=now.getDay();letoneDayTime=24*60*60*1000;letMondayTime=nowTime-(day-1)*oneDayTime;letSundayTime=nowTime+(7-day)*oneDayTime;获得本月1号和月底日......
  • js:JSZip实现前端浏览器压缩文件成zip格式
    文档https://www.npmjs.com/package/jsziphttps://stuk.github.io/jszip/https://github.com/Stuk/jszipCDN引入<!--jszip.js--><scriptsrc="https://lf6-cdn-tos.bytecdntp.com/cdn/expire-1-M/jszip/3.7.1/jszip.min.js"type="application/jav......
  • 前端黑魔法 —— 如何让自己的函数变成原生函数
    前言熟悉JS的都知道,原生函数转成字符串,显示的是nativecode:alert+''//"functionalert(){[nativecode]}"如果用自己的函数对其重写,显示的则是自己的代码:alert=function(s){console.log(s)}alert+''//"function(s){console.log(s)}"有没有......
  • 7-4 BCD解密 (10分)
    7-4 BCD解密 (10分)BCD数是用一个字节来表达两位十进制的数,每四个比特表示一位。所以如果一个BCD数的十六进制是0x12,它表达的就是十进制的12。但是小明没学过BCD,把所有的BCD数都当作二进制数转换成十进制输出了。于是BCD的0x12被输出成了十进制的18了!现在,你的程序要读入这个错误......
  • 前端 Vue 应该知道的一些东西,个人笔记 2021-11-26
    前端代码编写规范及es6常用语法命名规范文件夹名称,文件名称,组件名称,统一使用大驼峰或者小横线方式命名;组件文件名:list-item.vue.或者ListItem.vue;基础的无状态的通用组件加VBaseApp前缀BaseButtonAppButton在html中<base-button>或者<BaseButton>url路径名:小......
  • 前端性能优化
    当涉及到前端性能优化时,有许多方面需要考虑。以下是一些常见的前端性能优化技巧:压缩和缩小文件:使用压缩工具(如Gzip)来压缩HTML、CSS和JavaScript文件的大小,并将图片和其他媒体文件进行压缩。此外,还可以使用工具(如Webpack)来合并和缩小文件,以减少网络请求数量。使用缓存:通过使用浏览器......
  • 前端原型和原型链实例的学习
     目录前言导语在构造函数上定义方法运行结果在原型链上定义方法运行结果总结前言我是歌谣我有个兄弟巅峰的时候排名c站总榜19叫前端小歌谣曾经我花了三年的时间创作了他现在我要用五年的时间超越他今天又是接近兄弟的一天人生难免坎坷大不了从头再来歌谣的意志是永恒的放......
  • 前端原型和原型链构造函数的使用
     目录前言导语原型的构造器指向构造函数 原型上添加方法注意的地方构造器指向构造函数本身总结前言我是歌谣我有个兄弟巅峰的时候排名c站总榜19叫前端小歌谣曾经我花了三年的时间创作了他现在我要用五年的时间超越他今天又是接近兄弟的一天人生难免坎坷大不了从头再来歌......