Java解析微信获取手机号信息
在微信中,用户手机号的获取通常是通过微信小程序的getPhoneNumber接口来实现的。这个接口允许用户在授权后,将加密的手机号数据传递给开发者。由于隐私保护,微信不会直接提供用户的明文手机号,而是提供一个加密的手机号字符串和相应的解密密钥。
以下是一个基于Java的示例,展示了如何接收并解密从微信小程序传递过来的加密手机号信息。
步骤 1: 微信小程序前端获取手机号
在微信小程序前端,我们需要调用getPhoneNumber接口来获取用户的手机号信息。这里不展开微信小程序的代码,但基本流程是:
- 在
wxml中添加一个按钮,绑定点击事件到getPhoneNumber函数。 - 在对应的
js文件中实现getPhoneNumber函数,调用微信的wx.getPhoneNumberAPI。 - 用户点击按钮并成功授权后,微信会返回一个加密的手机号数据和相应的解密密钥。
步骤 2: 后端Java代码解密手机号
后端Java代码需要完成以下任务:
- 接收前端传递的加密手机号数据和解密密钥。
- 使用微信提供的解密算法和密钥来解密手机号。
- 返回解密后的手机号。
以下是一个简化的Java示例,用于解密从微信小程序获取的加密手机号:
import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import java.nio.charset.StandardCharsets;
import java.util.Base64;
public class WeChatPhoneNumberDecrypter {
private static final String ALGORITHM = "AES/CBC/PKCS5Padding";
public static String decryptPhoneNumber(String encryptedData, String sessionKey, String iv) throws Exception {
// Base64 解码
byte[] encryptedDataBytes = Base64.getDecoder().decode(encryptedData);
byte[] sessionKeyBytes = Base64.getDecoder().decode(sessionKey);
byte[] ivBytes = Base64.getDecoder().decode(iv);
// 设置AES密钥和初始化向量
SecretKeySpec secretKeySpec = new SecretKeySpec(sessionKeyBytes, "AES");
IvParameterSpec ivParameterSpec = new IvParameterSpec(ivBytes);
// 创建Cipher实例并初始化
Cipher cipher = Cipher.getInstance(ALGORITHM);
cipher.init(Cipher.DECRYPT_MODE, secretKeySpec, ivParameterSpec);
// 解密
byte[] decryptedBytes = cipher.doFinal(encryptedDataBytes);
// 将解密后的字节转换为字符串
return new String(decryptedBytes, StandardCharsets.UTF_8);
}
public static void main(String[] args) {
try {
// 这些值通常从微信小程序前端获取,并通过网络请求发送到后端
String encryptedData = "..."; // 加密的手机号数据,从微信小程序获取
String sessionKey = "..."; // 会话密钥,从微信小程序获取
String iv = "..."; // 初始化向量,从微信小程序获取
// 解密手机号
String decryptedPhoneNumber = decryptPhoneNumber(encryptedData, sessionKey, iv);
System.out.println("解密后的手机号: " + decryptedPhoneNumber);
} catch (Exception e) {
e.printStackTrace();
}
}
}
注意事项
encryptedData、sessionKey和iv通常是由微信小程序前端在获取用户手机号后通过网络请求发送到后端的。这些值在每个请求中都是不同的。- 确保我们的Java环境支持AES加密,并已正确配置。
- 解密后的数据是一个JSON字符串,其中包含了用户的手机号等信息。我们可能需要使用JSON解析库(如Jackson或Gson)来进一步处理这些数据。
- 出于安全考虑,务必确保我们的后端服务是安全的,以防止潜在的攻击和数据泄露。
- 由于微信的API和策略可能会发生变化,建议经常查看微信官方文档以获取最新信息。
Java解析微信获取手机号信息的更多相关文章
- (部署新java程序,程序报错,需copy的一个包)——java使用siger 获取服务器硬件信息
mcat-siger.sh 查看是否安装siger rsync -aPuv /usr/lib64/libsigar-amd64-linux.so $i:/usr/lib64/ java使用siger ...
- Java解析word,获取文档中图片位置
前言(背景介绍): Apache POI是Apache基金会下一个开源的项目,用来处理office系列的文档,能够创建和解析word.excel.ppt格式的文档. 其中对word文档的处理有两个技术 ...
- SoringCloud(四) - 微信获取用户信息
1.项目介绍 2.微信公众平台 和 微信开放文档 2.1 微信公众平台 2.1.1 网址链接 https://mp.weixin.qq.com/debug/cgi-bin/sandboxinfo?ac ...
- java解析XML获取城市代码
运行前先导入dom4j架包,由于我们公司用的代理服务器所以下面我设置了代理ip,不需要的可直接忽略 package com.chengshidaima.tools; import java.io.Bu ...
- 微信获取用户信息的两个接口和两个ACCESS_TOKEN
有一段时间没有搞微信开发了 ,今天突然要改一下程序! 回头一看 微信的帮助文档太tm的稀烂的,太难懂了,这做个笔记以后看着方便 微信有2个ACCESS_TOKEN, 1,基础接口的token 获取接口 ...
- java使用siger 获取服务器硬件信息(CPU 内存 网络 io等)
通过使用第三方开源jar包sigar.jar我们可以获得本地的信息 1.下载sigar.jar sigar官方主页 sigar-1.6.4.zip 2.按照主页上的说明解压包后将相应的文件copy到j ...
- JAVA代码中获取JVM信息
一.JAVA中获取JVM的信息 原理,利用JavaSDK自带的ManagementFactory类来获取. 二.获取信息 1.获取进程ID @Test public void test1() { Ru ...
- java 根据ip获取地区信息(淘宝和新浪)
package com.test; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStr ...
- java、JavaScript获取微信用户信息登录优化方案
1.获取微信用户信息要调用微信的好几个接口,再加上自己系统的接口就会变的很慢,影响用户体验,之前走过的弯路我就不赘述了,直接说新的方案. 2.第一步都是向微信发起获取用户code请求: 请求接口:ht ...
- Java实践-远程调用Shell脚本并获取输出信息
1.添加依赖 <dependency> <groupId>ch.ethz.ganymed</groupId> <artifactId>ganymed-s ...
随机推荐
- Raft 共识算法4-选举限制
Raft 共识算法4-选举限制 Raft算法中译版地址:https://object.redisant.com/doc/raft中译版-2023年4月23日.pdf 英原论文地址:https://ra ...
- K8s控制器---Replicaset(7)
一.Replicaset(目前少用了) 1.1 控制器管理pod 什么是控制器?前面我们学习了 Pod,那我们在定义 pod 资源时,可以直接创建一个 kind:Pod 类型的自主式 pod,但是这存 ...
- keepalived(3)- keepalived+nginx实现WEB负载均衡高可用集群
目录 1. keepalived+nginx实现WEB负载均衡高可用集群 1.1 需求和环境描述 1.2 WEB集群部署 1.3 负载均衡集群部署 1.4 keepalived部署 1.5 测试监控的 ...
- 解锁高效创新:IPD策略如何重塑产品开发流程
IPD(集成产品开发)涵盖了产品从创意提出到研发.生产.运营等,包含了产品开发到营销运营的整个过程.围绕产品(或项目)生命周期的过程的管理模式,是一套生产流程,更是时下国际先进的管理体系.IPD(集成 ...
- SaltStack 常用的一些命令
以下是 SaltStack 常用的一些命令: 查看帮助信息:salt --help检查Salt支持的操作系统:salt '*' test.ping查看Minion的版本号:salt '*' test. ...
- T2T-ViT:更多的局部结构信息,更高效的主干网络 | ICCV 2021
论文提出了T2T-ViT模型,引入tokens-to-token(T2T)模块有效地融合图像的结构信息,同时借鉴CNN结果设计了deep-narrow的ViT主干网络,增强特征的丰富性.在ImageN ...
- 把nacos安装成windows服务
方式一: 用sc的方式安装和删除服务 摘自:https://blog.csdn.net/qq_33803102/article/details/109024989 sc create nacos st ...
- C# winform GDI+ 五子棋 (一):基本界面和胜负判断
棋盘和棋子采用GDI+画上去的.棋盘18*18.棋子是用DrawElipse画的,白棋和黑棋分两个List集合存储,方便判断五子连线的情况. 主要说一下,五子连线的思路,把集合按行和按列以及按正斜和反 ...
- 【C# mvc5】使用mvc5 +bootstrap+EF6搭建一个权限管理系统的心得体会
使用mvc5的体会,是 业务代码都可以独立分层,比如搭配多层架构,通过controller控制器传递需要渲染的列表,按钮.接受前端返回的实体模型等.总之我觉得要在前端渲染的数据可以写在controll ...
- 给师妹写的《Java并发编程之线程池十八问》被表扬啦!
写在开头 之前给一个大四正在找工作的学妹发了自己总结的关于Java并发中线程池的面试题集,总共18题,将之取名为<Java并发编程之线程池十八问>,今天聊天时受了学妹的夸赞,心里很 ...