1.获取openId和sessionKey

public static Map<String, Object> getOpenIdAndSessionKey(String code) {//微信的接口String url = "https://api.weixin.qq.com/sns/jscode2session?appid=" + WxConfig.APPID + "&secret=" + WxConfig.SECRET + "&js_code=" + code + "&grant_type=authorization_code";RestTemplate restTemplate = new RestTemplate();//进行网络请求,访问url接口Map<String, Object> map = new HashMap<>();ResponseEntity<String> responseEntity = restTemplate.exchange(url, HttpMethod.GET, null, String.class);//根据返回值进行后续操作if (responseEntity != null && responseEntity.getStatusCode() == HttpStatus.OK) {String sessionData = responseEntity.getBody();JSONObject jsonObj = JSONObject.parseObject(sessionData);try {map.put("openId", jsonObj.get("openid").toString());if (jsonObj.containsKey("session_key")) {map.put("sessionKey", jsonObj.get("session_key").toString());}} catch (Exception e) {throw new CloudException("无法获取该微信号的openID!");}}return map;
}

2.通过encryptData, ivData;,sessionKey解密手机号号码

@Override
public String decodePhone(DecodePhone decodePhone) {log.info("{}-------------", decodePhone);String phone = "";// 被加密的数据byte[] dataByte = org.bouncycastle.util.encoders.Base64.decode(decodePhone.getEncryptData());// 加密秘钥byte[] keyByte = org.bouncycastle.util.encoders.Base64.decode(decodePhone.getSessionKey());// 偏移量byte[] ivByte = Base64.decode(decodePhone.getIvData());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];org.bouncycastle.util.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");JSONObject jsonObject = JSONObject.parseObject(result);phone = jsonObject.getString("phoneNumber");log.info("手机号--------------" + phone);}} catch (NoSuchAlgorithmException e) {LOGGER.error(e.getMessage(), e);} catch (NoSuchPaddingException e) {LOGGER.error(e.getMessage(), e);} catch (InvalidParameterSpecException e) {LOGGER.error(e.getMessage(), e);} catch (IllegalBlockSizeException e) {LOGGER.error(e.getMessage(), e);} catch (BadPaddingException e) {LOGGER.error(e.getMessage(), e);} catch (UnsupportedEncodingException e) {LOGGER.error(e.getMessage(), e);} catch (InvalidKeyException e) {LOGGER.error(e.getMessage(), e);} catch (InvalidAlgorithmParameterException e) {LOGGER.error(e.getMessage(), e);} catch (NoSuchProviderException e) {LOGGER.error(e.getMessage(), e);}return phone;

获取微信小程序的昵称和手机号相关推荐

  1. PHP 获取微信小程序用户手机号

    截止到目前为止,小程序通过获取session_key与encryptedData与iv进行解密获取手机号的方法已经不行了,只能通过点击按钮来实现获取微信用户的手机号,本文仅以PHP为例 大概流程: 1 ...

  2. springboot 实现微信小程序授权并解密手机号

    1.授权 授权是有前端完成的,授权后,前端可以获取到code,后台根据code获取微信小程序用户对应的openid和session_key,并根据openid判断是否是新用户,代码如下: @Value ...

  3. 获取小程序用户信息+java_java获取微信小程序用户信息

    第一步:获取openid.session_key等信息. /** * 获取微信小程序的用户openid和session_key/unionid * 返回格式:{"session_key&qu ...

  4. UNIAPP---实现微信小程序登录授权和手机号授权(uniapp做微信小程序)

    UNIAPP-实现微信小程序登录授权和手机号授权(uniapp做微信小程序) 描述:uniapp开发小程序,先授权用户信息后再出现手机号授权的页面进行手机号授权.完成后返回上一页面并把信息存入后台以及 ...

  5. PHP(TP5)获取微信小程序unionId

    最近做一个项目,微信小程序.Android.IOS同步进行开发,小程序从微信内部直接登录,Android.IOS也需要用微信登陆,为了确定同一用户的身份,需要使用到微信的unionId. 将小程序.A ...

  6. 只需两步快速获取微信小程序源码

    第一次在掘金这样高大上的社区写文章,忐忑地敲下我获取小程序源码过程中的经验分享. 最近在学习微信小程序开发,半个月学习下来,很想实战一下踩踩坑,于是就仿写了某个小程序的前端实现,过程一言难尽,差不多两 ...

  7. 获取微信小程序右上角胶囊的位置

    获取微信小程序右上角胶囊的位置 微信中有一个api是用来获取胶囊的位置以及其他信息的,这个可以在我们使用自定义的标题的时候避开这个位置,或者自己写点什么东西 ,要和胶囊对齐的 api wx.getMe ...

  8. 利用 node.js 云函数解密获取微信小程序的手机号码等加密信息 encryptedData 的内容。

    首先你必须会用微信小程序的云函数功能: 1.创建一个名为token的云函数 2.在云开发的云函数管理中添加对应的token云函数 3.在开发工具中编辑云函数token 4.点击右键,安装并部署 大致是 ...

  9. 如何获取微信小程序包

    下载一个夜神模拟器 并在模拟器中下载微信 打开并登陆微信,访问小程序等小程序加载 完成则可以获取微信小程序的pak包 打开Amaze 文件管理 点击文件根目录 依次访问 data/data/com.t ...

最新文章

  1. 3分钟看完一篇论文,这个AI文本生成模型把今年NeurIPS 2300+篇总结了个遍
  2. 没有与制定类型匹配的重载函数 cv::Vec<_Tp 实例
  3. linux检测网卡步骤,linux网卡检测命令
  4. Leetcode 56.合并区间 (每日一题 20210708)
  5. 2022 年第一场云原生技术实践营开启报名
  6. ejb生命周期_EJB 3.x:生命周期和并发模型(第1部分)
  7. java实现矩阵相乘
  8. Android SDK 2.2 开发环境安装
  9. 阿里云超算异构Spot集群,助力深势科技30%成本驱动MDaaS海量算力
  10. 一些会遗忘的代码属性
  11. 给语音信号加混响的常用方法(方法三)
  12. 文档管理,PDF控件PDF-XChange PRO SDK
  13. android 设置路由器,192.168.1.1路由器设置手机登陆
  14. #vue#element-ui文件上传(格式校验)
  15. 20条职业发展建议,送给拒绝原地踏步的你
  16. kettle配置资源库
  17. 在机器学习领域,主要的学习方式是哪几种?
  18. 4月4日网站变灰实录
  19. 黑白照片修复彩色软件免费有哪些?分享这三个实用的软件给你
  20. 疯狂值班表(人员跟日期生成的视图)

热门文章

  1. 别名(Alias)-Yii 约定-深入理解YII2.0(2.2)
  2. 摄影测量-后方交会与前方交会,相对定向与绝对定向,光束法
  3. Java判断用户是通过pc,还是安卓还是ios,还是微信客户端访问
  4. i国网app苹果版_阿里云盘app苹果版 -阿里云盘app官方手机版下载
  5. 《给研究生的学术建议》13——研究设计
  6. jQuery基础----10jQuery效果-回调
  7. Pangu分词Lucene.Net搜索使用说明
  8. 区块链平台Coursera(第四周)替代去中心化解决方案
  9. Rust 基础(三)
  10. 零基础入门NPL之新闻分类