首页 > 编程语言 >好玩的接口 之 Java 解密微信小程序获取手机号

好玩的接口 之 Java 解密微信小程序获取手机号

时间:2022-11-10 21:08:18浏览次数:92  
标签:Java 手机号 微信 解密 获取 session key import


LZ-Says:有些东西,真的是很矛盾,本来很简单的事儿,各自坚持,结果,不欢而散,不舍?如何?

好玩的接口 之 Java 解密微信小程序获取手机号_会话密钥

前言

最近搞接口,基于 Spring Boot,怎么说呢,很虐。

不过熟悉了业务,表结构等等,相对来说还是比较 nice,比较爽。

可惜,目前还是属于 最最最最 low 的小白白,希望点滴积累吧。

今天接到要实现一个解密微信小程序获取微信绑定的手机号接口,有点懵。

下面一起开始吧~

解密获取绑定微信手机号

官方地址:​​https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/getPhoneNumber.html​

划重点叻:


  • 大概执行的一个流程图:
  • 好玩的接口 之 Java 解密微信小程序获取手机号_java_02

  • 重点了解:
    签名校验以及数据加解密涉及用户的会话密钥 session_key。 开发者应该事先通过 wx.login 登录流程获取会话密钥 session_key 并保存在服务器。为了数据不被篡改,开发者不应该把 session_key 传到小程序客户端等服务器外的环境。

  • 关于会话密钥 session_key 有效性
  • 好玩的接口 之 Java 解密微信小程序获取手机号_小程序_03


  • 小程序调用获取手机号码返回参数说明:
  • 好玩的接口 之 Java 解密微信小程序获取手机号_java_04

开搞、实现

简单说下逻辑顺序:

  • 小程序通过调用获取手机号授权方式拿到返回的 iv 和 encryptedData;
  • 后台通过调用 login 接口拿到对应的 openID 以及 sessionKey;
  • 解密。

直接放代码了:

导包:

import com.sun.org.apache.xerces.internal.impl.dv.util.Base64; // 这个包不限,LZ 正好项目有个支持解密顺手用了
import java.security.spec.AlgorithmParameterSpec;
import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;

解密关键代码:

Map<String, Object> weChatMap = 获取 SessionKey;
String sessionKey = weChatMap.get("sessionKey").toString();
// 开始解密
byte[] encData = Base64.decode(encryptedData);
byte[] iv = Base64.decode(ivStr);
byte[] key = Base64.decode(sessionKey);
AlgorithmParameterSpec ivSpec = new IvParameterSpec(iv);
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
SecretKeySpec keySpec = new SecretKeySpec(key, "AES");
cipher.init(Cipher.DECRYPT_MODE, keySpec, ivSpec);
// 将解密结果 return
return new String(cipher.doFinal(encData), "UTF-8");

返回结果:

好玩的接口 之 Java 解密微信小程序获取手机号_会话密钥_05

个人公众号

不定期发布博文,最近有点忙,感谢老铁理解,欢迎关注~

好玩的接口 之 Java 解密微信小程序获取手机号_会话密钥_06

标签:Java,手机号,微信,解密,获取,session,key,import
From: https://blog.51cto.com/u_13346181/5842076

相关文章

  • 一个事半功倍的Java反射库
    在Java和Android中,我们常常会使用反射来达到一些兼容的目的。Java原生提供的反射很是麻烦,使用起来很是不方便。比如我们想要调UserManager的静态方法get,使用原生的实现如下......
  • java——循环控制语句——for——while——do……while——整理01
                                                        ......
  • Day07.2:Java流程控制详解
    Java流程控制用户交互Scanner我们可以通过Scanner类来获取用户的输入,电脑通过我们的输入,执行输入语,实现程序的输入输出基本语法Scannername=newScanner(System.in)......
  • JavaWeb-05-Maven
    5.Maven为什么要学习这个技术?在javaweb开发中,需要使用大量的jar包,需要我们手动去导入;如何能够让一个东西自动帮我导入和配置这个jar包。因此,Maven诞生。5.1Maven架......
  • Day07.1:JavaDoc生成API文档
    JavaDocJavaDoc命令是用来生成自身API文档的API在线文档打开类名所在文件位置打开命令行3.输入命令行并运行4.在类名文件处生成了很多html文件,找到index.htm......
  • JavaWeb-02-web服务器
    2.web服务器2.1技术讲解ASP:微软:国内最早流行的就是ASP;在html中嵌入了VB的脚本ASP+COM;在ASP开发中,基本一个页面都有几千行的业务代码,页面及其混乱维护成本高C#I......
  • JavaWeb-04-Http
    4.http4.1http是什么超文本传输协议(HyperTextTransferProtocol,HTTP)是一个简单的请求-响应协议,它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以......
  • [JavaScript]格式化时间
    转载自网络 constformatDate=(time,fmt)=>{vardate=newDate(time);varformat=fmt||'YY-MM-DDhh:mm:ss'varyear=date.getFullYear(......
  • 今日内容 多方式登录接口,验证 手机号登录接口
    首页中间部分样式<divclass="course"><el-row><el-col:span="6"v-for="(o,index)in8":key="o"class="course_detail"><el-card:......
  • 【博学谷学习记录】超强总结,用心分享|Java基础分享-GC垃圾回收
    目录1.什么是GC2.GC主要针对区域3.Java如何判断对象是否存活4.GC垃圾回收机制4.1标记-清除法4.2标记-整理法4.3复制算法4.4分代收集算法5.内存分配策略及垃圾回收......