- 浏览: 184097 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (227)
- 链接数据库 (1)
- Linux下面安装tomcat步骤 (1)
- 数据库简单添加索引 (1)
- Ubuntu 16.04安装jdk步骤 (1)
- Ubuntu 16.04安装mysql链接工具workbench (1)
- Java基础 (1)
- Java 获取两个时间的时间查 如 1 天 2 小时 30 分钟 (1)
- jdbc链接增删该查 (1)
- springboot 跨域解决 (1)
- springboot如何读取配置文件(application.yml)中的属性值 (1)
- springboot配置redis (1)
- 数据库访问优化法则 (1)
- springboot 配置定时任务 (1)
- 使用Spring Boot上传文件 (1)
- Java并发编程:Callable、Future和FutureTask (1)
- springboot配置所有信息demo (1)
- 常用软件地址 (1)
- Java DateUtil时间大全 (1)
- Java DateUtil当天,本周,本月时间获取方法 (1)
- @Data的用法 (1)
- 身份证工具类 (1)
- springboot添加日志 (1)
- List集合中的对象按照某个字段去重实现 (1)
- JavaBean和Map转换封装类 (1)
- StringUtils工具类用法 (1)
- BigDecimal用户详情 (1)
- java常用集合总结 (1)
- openfile 插件开发步骤 (0)
- Linux rpc客户端步骤 (1)
- Java开发必会的Linux命令 (1)
- springboot配置拦截器,控制登录跳转 (1)
- springboot 异步调用的方法 (0)
- springboot如何读取配置文件test.properties (1)
- springboot 异步调用的方法 (1)
- HttpClient操作,HttpPost (1)
- HttpGet (1)
- HttpDelete (1)
- HttpPut (1)
- mybatis生成代码后,想用自己的关联查询demo (1)
- Arrays工具类十大常用方法 (1)
- 如何生成唯一订单号 (1)
- 订单号唯一性 (1)
- msyql lest的用法 (1)
- //循环递归删除 (0)
- 循环递归删除 (1)
- java 属性首字母大写返回json解决办法 (1)
- 根据两点间经纬度坐标(double值),计算两点间距离,单位为米 (1)
- 运用开发好的jar部署到linux服务中 (1)
- mybatis批量新增 (1)
- mybatis 增删该查demo,新手必看 (1)
- java中字符串查找一个字符串的个数几种方法 (1)
- @Select in 的用法 (1)
- Ubuntu 16.04使用ieda简单配置 (1)
- 统计一个字符串中相应字符出现的次数 (1)
- SimpleDateFormat同步的解决办法 (1)
- gradle打包springboot jar例子 (1)
- java 提取字符串中的数字 (1)
- springboot 对像异常处理,还可以作为全部异常处理 (1)
- 面试题 (0)
- Linux下面安装virtualBox (1)
- java带有效期的map (1)
- 2018年JAVA基础面试题和高级面试题总结 (1)
- mysql修改密码的方法 (1)
- 排名前 16 的 Java 工具类 (1)
- 最完整的Linux常用命令大全 (1)
- Mysql 开发标准规范 (1)
- idea 快捷键 (1)
- mysql 建立索引 (1)
- Java中判断字符串是否为数字的五种方法 (1)
- springboot集成redis (1)
- springboot异步调用demo (1)
- springboot2集成redis (1)
- springboot2集成Elasticsearch (1)
- java过滤敏感字体的方式 (1)
- 对象的值赋给另一个对象 (1)
- mybitse+pagehelper 的使用方法 (1)
- java时间的处理 (1)
- xshell5 下载地址 (1)
- springboot2集成Excel (1)
- 检查数组是否包含某个值的方法 (1)
- 关于Java代码优化的N条建议! (1)
- Java Map按Key值进行排序 (1)
- List进行排序 (1)
- Stream 完整实例 (1)
- StringUtils isNoneBlank和isAnyBlank——demo (1)
- vim最全常用命令 (1)
- JWT生成Token (1)
- 学习参看地址 (1)
- java初始化数据 (1)
- 简单json (1)
- 数据库脚本 (1)
- restTemplate http请求 (1)
- 学习网站 (1)
- JsonUtil (1)
- Rsa (1)
- BeanUtils的赋值方法比较 (1)
- HttpClientUtil (2)
- ValidUtils (0)
- 读取excel,批量插入库demo (1)
- springboot对redis封装使用 (1)
- java后端简答验证码 (1)
- java高级面试题及其答案 (1)
- 序列换成json时 (1)
- 将所有的long变成string (1)
- ControllerAdvice (0)
- RedisService 工具类 (1)
- Java常用正则表达式验证工具类RegexUtils (1)
- CollectionUtil (1)
- thrift使用 (1)
- springboot播客学习 (1)
- mybitse 批量更新 (1)
- https://www.cnblogs.com/cxiaocai/p/11715874.html (1)
- elasticsearch安装及其head步骤 (0)
- elasticsearch7.6.2安装及其head、kibana、ik分词器步骤 (0)
- elasticsearch7.6.2集成springboot (0)
- gradle仓库选址 (1)
- elasticsearch7.6.2集成springboot2.2.6---2 (1)
- elasticsearch7.6.2安装及其head、kibana、ik分词器步骤-----1 (1)
- elasticsearch7.6.2集成springboot2.2.6基本语法---3 (1)
- Jsoup (1)
- elasticsearch7.6.2集成springboot2.2.6----demo (1)
- mybatis官网地址 (1)
- springboot发送邮件到qq (1)
- navicat Premium 链接sql Server的方法 (1)
- 简单开发springboot搭建 (1)
- sqlServer 查询两个小时的sql语句 (1)
- BigDecimalUtil (1)
- 雪花算法生成id (1)
- JsonUtils (1)
- Spring Boot监控与管理的实现 (1)
- springboot 使用undertow启动,替换tomcat (1)
- RedisConfig配置使用 (1)
- RedisUtil (1)
- easypoi读取excel (1)
- easyexcel读取excel (0)
- easyexcel读取excel与下载 (1)
- 生成指定长度的随机数 (1)
- Spring Boot AOP实战 (1)
- fastjsonfastjson新手必看 (1)
- 获取IP地址 (1)
- CommonUtils (1)
- 5万字长文:Stream和Lambda表达式最佳实践-附PDF下载 (1)
- DateUtils 最新工具类 (1)
- screw的使用 (1)
- 15000 字的 SQL 语句大全 (1)
- hutool (1)
- PdfToWord (1)
- MySQL修改最大连接数 (1)
- MAP排序 (1)
- 归纳从文件中读取数据的六种方法-JAVA IO基础总结 (1)
- 天气 (1)
- Intellij IDEA中Mybatis Mapper自动注入警告的6种解决方案 (1)
- 全网最全编程学习网站汇总来了,还不赶快收藏 (1)
- win10 (0)
- 电脑知识 (0)
- util工具类 (1)
- ieda提示mapper报错 (1)
- zysnba (1)
- 自增方式 (1)
- mybits链表查询 (1)
- SpringBoot如何优雅的处理校验参数 (1)
- 参考记录 (1)
- 企业微信封装方法 (1)
- 二维码 (1)
- mysql简单创建索引 (1)
- msyql函数 (1)
- mybitse-plus多表查询demo (1)
- git 提交本地代码步骤 (1)
- gradle5.X以上lombok引入 (1)
- SpringBoot定时任务及Cron表达式详解 (1)
- Hutool工具集之DateUtil(日期时间工具)详解使用 (1)
- 对象属性为空字符串变成null (1)
- DateUtils 工具类 (0)
- face++照片不对工具类 (1)
- 判断某个值是否在list集合中的某个对象中存在 (1)
- mybatisplus时间更新操作 (1)
- Java8 List通用方法处理总结 (1)
- 阿斯蒂芬 (0)
- springboot多数据源配置 (0)
- MyBatis和MyBatis-Plus 官网地址 (1)
- jwt (0)
- java---ValidUtils (1)
- Java之下载网络图片到本地文件夹 (1)
- 初始化内容数据 (1)
- springboot启动指定端口和启动环境 (1)
- 根据生日计算年龄 (1)
- idea快捷键大全 (1)
- springboot数据验证例子 (1)
- springboot文章 (1)
- 获取当前时间,推迟一年 (0)
- 获取当前时间,推迟一周 推迟一年示例 (1)
- ResultBean返回对象 (1)
- SpringBoot注解最全详解 (1)
- JeecgBoot (1)
- 电脑优化 (0)
- 简单数据队列 (1)
- CacheUtil换成工具类 (0)
- CacheUtil缓存工具类 (0)
- xml和对象互转 (0)
- 导出word (0)
- 企业微信通过code获取用户基本信息 (1)
- Java开发中的一些小技巧 (1)
- 判断当前时间是否在一个时间区间例如8点:21点 (1)
- springboot 启动指定环境 (1)
- 打印springboot启动的环境 (1)
- 根据时间日期获取当天是周几 (1)
- LocalDateTimeToString (1)
- java导出word (1)
- java 对xml和对象互转 (1)
- java CacheUtil缓存工具类 (1)
- 史上最牛逼电脑优化,让电脑飞起来 (1)
- isEmpty 和 isBlank 的用法区别 (1)
- 根据图片url地址获取其流InputStream (1)
- springboot解决LocalDateTime (1)
- springboot配置文件list映射 (1)
- SpringBoot中必须掌握的45个注解 (1)
- sql 优化的 15 个小技巧 (1)
- Cron表达式 (1)
- 数据库创建时间和修改时间默认值 (1)
- 小程序解析手机号 (1)
- 小程序获取手机号 (0)
- java 获取resource下面的文件路径,springboot打成jar也可以使用 (1)
- 数据库字段不显示对象和swwager前段不显示 (1)
- java生成pdf (1)
- springboot 异步调用 (1)
- java获取时间段内的每一天 (1)
- hutool----DateUtil简单的时间 (1)
- java 8两个List集合取交集、并集、差集、去重并集 (1)
- 服务调用demo (1)
- hutool导入excel (1)
- hutool导出 (1)
- 切面日志 (1)
- 校验参数为空 (1)
- 两个集合对象某一个属性相匹配 (1)
- JAVA stream流详细教程 (1)
- 查看java进程的命令 (1)
- Java 保留两位小数 百分数 (1)
- freemarker读写word模板生成word文档 (1)
- springboot项目中,读取 resources 目录下的文件的9种方式 (1)
- Knife4j (1)
- Java8 获取两个List交集 (1)
- list泛型和list对象交集 (1)
- 未来7天过生日的孩子sql (1)
- 数据校验,全局异常 (1)
- 获取最近10天过生日的sql (1)
- 随机数 (1)
- Java获取两个日期的天数打印 (1)
- 通过时间获取星期几 (1)
- Java时间类型相互转化 (2)
- 小程序登录 (1)
- 手机号 (0)
- sse调用 (0)
- httpsse调用 (0)
最新评论
1,通过code获取sesionKey和openid
封装实体类
public class WxMaJscode2SessionResult {
private String session_key;
private String openid;
private String unionid;
private Integer errcode;
private String errmsg;
}
2,通过jsCode获取相关信息
Map<String, Object> param = Maps.newHashMap();
param.put("appid", appid);
param.put("secret", secret);
param.put("js_code", jsCode);
param.put("grant_type", "authorization_code");
log.info("小程序登录参数 param = {}", JSONObject.toJSONString(param));
String result = HttpUtil.get("https://api.weixin.qq.com/sns/jscode2session", param);
log.info("小程序登录返回的结果:" + result);
WxMaJscode2SessionResult wxMaJscode2SessionResult = JSONObject.parseObject(result, WxMaJscode2SessionResult.class);
log.info("小程序登录返回的结果转换对应的结果 实体转换 --WxMaJscode2SessionResult = {}", JSONObject.toJSONString(wxMaJscode2SessionResult));
return wxMaJscode2SessionResult;
3,获取手机号解密的方法
package com.test.utils;
import com.alibaba.fastjson.JSONObject;
import com.sun.org.apache.xerces.internal.impl.dv.util.Base64;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import java.security.AlgorithmParameters;
import java.security.Security;
import java.util.Arrays;
public class WXUtils {
public static JSONObject getUserInfo(String encryptedData, String sessionKey, String iv){
// 被加密的数据
byte[] dataByte = Base64.decode(encryptedData);
// 加密秘钥
byte[] keyByte = Base64.decode(sessionKey);
// 偏移量
byte[] ivByte = Base64.decode(iv);
try {
// 如果密钥不足16位,那么就补足. 这个if 中的内容很重要
int base = 16;
if (keyByte.length % base != 0) {
int groups = keyByte.length / base + (keyByte.length % base != 0 ? 1 : 0);
byte[] temp = new byte[groups * base];
Arrays.fill(temp, (byte) 0);
System.arraycopy(keyByte, 0, temp, 0, keyByte.length);
keyByte = temp;
}
// 初始化
Security.addProvider(new BouncyCastleProvider());
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding","BC");
SecretKeySpec spec = new SecretKeySpec(keyByte, "AES");
AlgorithmParameters parameters = AlgorithmParameters.getInstance("AES");
parameters.init(new IvParameterSpec(ivByte));
cipher.init(Cipher.DECRYPT_MODE, spec, parameters);// 初始化
byte[] resultByte = cipher.doFinal(dataByte);
if (null != resultByte && resultByte.length > 0) {
String result = new String(resultByte, "UTF-8");
return JSONObject.parseObject(result);
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
解密结果获取手机号
JSONObject obj= WXUtils.getUserInfo(encryptedData, sessionKey, iv);
if (obj!= null && obj.toJSONString().length() > 0) {
String mobile = userinfo.getString("phoneNumber");
}
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk15on</artifactId>
<version>1.59</version>
</dependency>
封装实体类
public class WxMaJscode2SessionResult {
private String session_key;
private String openid;
private String unionid;
private Integer errcode;
private String errmsg;
}
2,通过jsCode获取相关信息
Map<String, Object> param = Maps.newHashMap();
param.put("appid", appid);
param.put("secret", secret);
param.put("js_code", jsCode);
param.put("grant_type", "authorization_code");
log.info("小程序登录参数 param = {}", JSONObject.toJSONString(param));
String result = HttpUtil.get("https://api.weixin.qq.com/sns/jscode2session", param);
log.info("小程序登录返回的结果:" + result);
WxMaJscode2SessionResult wxMaJscode2SessionResult = JSONObject.parseObject(result, WxMaJscode2SessionResult.class);
log.info("小程序登录返回的结果转换对应的结果 实体转换 --WxMaJscode2SessionResult = {}", JSONObject.toJSONString(wxMaJscode2SessionResult));
return wxMaJscode2SessionResult;
3,获取手机号解密的方法
package com.test.utils;
import com.alibaba.fastjson.JSONObject;
import com.sun.org.apache.xerces.internal.impl.dv.util.Base64;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import java.security.AlgorithmParameters;
import java.security.Security;
import java.util.Arrays;
public class WXUtils {
public static JSONObject getUserInfo(String encryptedData, String sessionKey, String iv){
// 被加密的数据
byte[] dataByte = Base64.decode(encryptedData);
// 加密秘钥
byte[] keyByte = Base64.decode(sessionKey);
// 偏移量
byte[] ivByte = Base64.decode(iv);
try {
// 如果密钥不足16位,那么就补足. 这个if 中的内容很重要
int base = 16;
if (keyByte.length % base != 0) {
int groups = keyByte.length / base + (keyByte.length % base != 0 ? 1 : 0);
byte[] temp = new byte[groups * base];
Arrays.fill(temp, (byte) 0);
System.arraycopy(keyByte, 0, temp, 0, keyByte.length);
keyByte = temp;
}
// 初始化
Security.addProvider(new BouncyCastleProvider());
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding","BC");
SecretKeySpec spec = new SecretKeySpec(keyByte, "AES");
AlgorithmParameters parameters = AlgorithmParameters.getInstance("AES");
parameters.init(new IvParameterSpec(ivByte));
cipher.init(Cipher.DECRYPT_MODE, spec, parameters);// 初始化
byte[] resultByte = cipher.doFinal(dataByte);
if (null != resultByte && resultByte.length > 0) {
String result = new String(resultByte, "UTF-8");
return JSONObject.parseObject(result);
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
解密结果获取手机号
JSONObject obj= WXUtils.getUserInfo(encryptedData, sessionKey, iv);
if (obj!= null && obj.toJSONString().length() > 0) {
String mobile = userinfo.getString("phoneNumber");
}
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk15on</artifactId>
<version>1.59</version>
</dependency>
相关推荐
java解析的源码和小程序的源码,自己从项目中剥离出来的,肯定能用,有疑问私信,微信小程序获取各类信息(openid、session_key以及用户基本信息、解密手机号)
在微信小程序中,获取用户手机号是一项重要的功能,它涉及到用户的隐私保护和应用的安全性。本文将深入探讨微信小程序如何在前端实现安全地解密获取用户手机号。 一、微信小程序授权获取手机号流程 1. 用户授权:...
微信小程序在用户授权后,会将用户的手机号码以加密的形式返回给服务器,为了保护用户隐私,这个加密过程是微信官方实现的。对于开发者来说,我们需要在服务器端使用特定的解密算法来获取到真实的手机号码。这里我们...
以上就是关于“微信小程序解析用户手机号码官方示例”的详细讲解,涵盖了前后端的交互、解密过程以及相关语言的实现。无论你是C++, Node.js, PHP还是Python开发者,都可以参考这些示例来实现微信小程序中的手机号码...
### 服务端(C#)获取小程序(微信、字节跳动)手机号 #### 概述 在现代互联网应用开发中,小程序作为一种轻量级的应用形式,在提高用户体验的同时也简化了开发流程。对于开发者而言,如何安全有效地获取用户的手机...
虚拟手机号创建 验证码接收 视频解析 图片扣图等功能于一体的小程序 自带配置说明 注意是小程序 小程序 小程序 配置的有虚拟手机号池 可以小程序内接收虚拟手机号验证码 全站视频解析功能 老旧图片修复 图片抠像
在对应的JS(微信小程序的逻辑层语言)中,监听这个事件,获取到的`e.detail`包含了用户的授权状态和加密后的手机号数据。 ```html !phone}}" open-type="getPhoneNumber" bindgetphonenumber="getPhoneNumber"> ...
本篇文章将详细解析小程序的登录流程、用户基本信息授权以及手机号授权。 首先,我们来看小程序的登录流程。这个过程涉及到小程序客户端与微信服务器及开发服务器的交互。当用户打开小程序时,小程序会调用`wx....
为了简化这一过程,微信小程序提供了一个名为`getPhoneNumber`的API,允许开发者直接获取用户在微信中绑定的手机号,无需用户手动输入。以下是关于`getPhoneNumber`的详细说明。 1. **使用场景**: 微信小程序中的...
在微信小程序中,`getPhoneNumber`接口是用于获取用户手机号码的关键功能,它允许开发者在用户授权的情况下获取到微信用户的手机号,从而提高用户体验并进行更精准的用户管理。 在微信小程序中调用`getPhoneNumber`...
在C#中开发微信小程序的服务端,获取用户解密信息是关键步骤之一,这涉及到微信小程序与微信服务器之间的数据交互。微信小程序在用户授权后,会通过API接口发送加密后的用户信息到服务端,服务端需要正确解密这些...
在微信小程序开发中,获取用户手机号是常见的需求之一,用于提供个性化服务或验证用户身份。本文将详细讲解如何使用微信小程序的API `getPhoneNumber` 来实现用户授权获取手机号的功能。 首先,`getPhoneNumber` 是...
该压缩包文件“网址打包微信小程序源码 wap转微信小程序 网站转小程序源码 网址转小程序开发.zip”包含了用于创建微信小程序的源代码,它允许开发者将网页内容转换并封装到微信小程序中,以便用户在微信环境中无需...
前端小程序是运行在用户设备上的应用程序部分,如手机或电脑上的用户界面。它负责与用户交互,显示数据,处理用户输入,通常由HTML、CSS和JavaScript等技术构建。在这个租车小程序中,前端部分可能采用了微信小程序...
1. **微信小程序登录/注册验证手机号**: 微信小程序提供了一套完整的用户身份验证体系,允许用户通过微信账号进行授权登录,简化了传统应用的注册登录流程。在验证手机号方面,通常会采用短信验证码的方式。开发者...
uniapp是一款由DCloud(即成都动软科技)开发的跨平台开发工具,它允许开发者用一套代码实现多端运行,包括iOS、Android、H5、微信小程序、支付宝小程序等多个平台。uniapp基于Vue.js,具备强大的组件化能力,同时...
《省钱兄陪诊小程序:医院陪护陪诊小程序APP源码与uniapp前端模板解析》 在当前数字化医疗的时代背景下,医院陪护陪诊小程序逐渐成为了一种便捷的服务模式,为患者提供了贴心的陪伴和照顾。本文将围绕“省钱兄陪诊...
为了提供个性化的服务,小程序可能会要求用户授权,如获取用户基本信息、手机号等。微信提供了相应的API来处理这些需求,如`wx.login()`获取用户登录凭证,`wx.getUserInfo()`获取用户信息。 10. **性能优化** ...
【微信小程序项目之考研知识题库小程序(源码+说明).zip】是一个包含源代码和说明文档的压缩包,主要用于帮助开发者或者学习者了解如何构建一个基于微信小程序平台的考研知识题库应用。这个项目旨在提供一个交互式的...
【微信小程序介绍】 微信小程序是一种轻量级的应用开发平台,由腾讯公司于2017年推出,旨在提供“触手可及”的便捷服务。它无需安装,用户可以通过微信扫一扫或搜索快速找到并使用,使用完毕后即刻退出,不占用手机...