JAVA服务端解密与微信绑定的手机号

背景介绍

在前段时间公司开发小程序的项目中,服务端需要配合前端获取当前用户与微信绑定的手机号;需要以下两步:
1.根据前端所传的code通过服务端调微信接口获取openId,sessionkey;
2.根据前端所传的encrypdata,ivdata,sessionKey服务端进行解密后得到手机号

前提工作

首先在微信公众平台申请小程序公众号,申请成功后就能获取到 appid 和 secret两参数

代码展示

获取微信openId sessionKey

参数:
code:为前端传入
MINI_PROGRAM_REQUEST_URL :https://api.weixin.qq.com/sns/jscode2session
MINI_PROGRAM_APPID:小程序appid
MINI_PROGRAM_SECRET :小程序secret

/***  <desc>*      获取微信openId sessionKey*  </desc>** @param code 微信参数* @return* @createDate 2018/12/7*/@RequestMapping(path = "/getOpenId",method = RequestMethod.POST)@ResponseBodypublic MessageVO getOpenId(String code){Map<String, Object> map = new HashMap<>();String status = "1";String msg = "ok";String requestUrl = MINI_PROGRAM_REQUEST_URL +"?appid="+MINI_PROGRAM_APPID+"&secret="+MINI_PROGRAM_SECRET+"&js_code="+code+"&grant_type=authorization_code";try {if(StringUtils.isBlank(code)){status = "0";//失败状态msg = "code为空";}else {System.out.println(requestUrl);// 发起GET请求获取凭证JSONObject jsonObject = HttpProtocolUtil.httpsRequest(requestUrl, "GET", null);if (jsonObject != null) {try {map.put("openid", jsonObject.getString("openid"));map.put("session_key", jsonObject.getString("session_key"));} catch (JSONException e) {// 获取token失败status = "0";msg = "code无效";}}else {status = "0";msg = "code无效";}}map.put("status", status);map.put("msg", msg);} catch (Exception e) {throw new DataAccessException("【小程序】获取openId失败",e);}return new MessageVO(BaseErrorCodeEnum.SUCCESS.getErrorCode(),map);}

解密与微信绑定的手机号

/***  <desc>*      解密与微信绑定的手机号*  </desc>** @param encrypdata 微信参数* @param ivdata 微信参数* @param sessionKey 会话密钥* @return* @createDate 2018/11/24*/@RequestMapping(path = "/getPhoneNum",method = RequestMethod.POST)@ResponseBodypublic MessageVO getPhoneNum(String encrypdata,String ivdata,String sessionKey){try {if(StringUtils.isEmpty(encrypdata) || StringUtils.isEmpty(ivdata) || StringUtils.isEmpty(sessionKey)){return new MessageVO(BaseErrorCodeEnum.NOT_PARAM.getErrorCode());}byte[] encrypData = Base64.decode(encrypdata);byte[] ivData = Base64.decode(ivdata);byte[] sessionKeyByte = Base64.decode(sessionKey);AlgorithmParameterSpec ivSpec = new IvParameterSpec(ivData);Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");SecretKeySpec keySpec = new SecretKeySpec(sessionKeyByte, "AES");cipher.init(Cipher.DECRYPT_MODE, keySpec, ivSpec);//解析解密后的字符串 String phoneNum = new String(cipher.doFinal(encrypData),"UTF-8");return  new MessageVO(BaseErrorCodeEnum.SUCCESS.getErrorCode(),phoneNum);}catch (Exception e){throw new DataAccessException("【小程序_注册登录版块】解密与微信绑定的手机号失败",e);}}

小程序-JAVA服务端解密与微信绑定的手机号相关推荐

  1. 微信小程序 java服务端下的post请求

    微信小程序的 post请求无法获取data参数,一切都是Content-Type问题,之前分析的确实有点错误,Content-Type为'application/json'时,后端需要用@Reques ...

  2. 小程序PHP CGI,微信小程序php服务端nginx配置

    微信小程序php服务端nginx配置 微信小程序server端如果选择自己部署的话,可以选择java或者php的,为了省事我选择了php的,腾讯是用CodeIgniter框架做的demo,由于CI框架 ...

  3. 浅谈对腾讯云微信小程序解决方案服务端的理解(主要针对信道服务)

    浅谈对腾讯云微信小程序解决方案服务端的理解(主要针对信道服务) 参考文章: (1)浅谈对腾讯云微信小程序解决方案服务端的理解(主要针对信道服务) (2)https://www.cnblogs.com/ ...

  4. 【微信小程序】小程序与服务端的http通信

    文章目录 搭建服务端 小程序 小程序与服务端通信 get请求 小程序向服务端发送数据 服务端接收小程序发送过来的数据 post请求 小程序向服务端发送数据 服务端接收小程序发送过来的数据 请求前后的状 ...

  5. 【程序源代码】共享充电桩小程序(服务端)

    " 关键字:小程序 共享 充电桩  "  正文: 共享充电桩小程序(服务端) 最近好多小伙伴问我,说:有没有什么好的后台管理的工程可以做小程序的服务使用啊,能不能给可以推荐啊.想学 ...

  6. java 服务端 获取接收微信小程序wx.uploadFile的formData的值和上传的文件

    小程序前端上传文件的js代码 wx.uploadFile({url: 'https://xxxx',//这是你自己后台的连接filePath: tempFilePath,name:"file ...

  7. 微信小程序java服务_微信小程序访问webService(Java)

    在前台UI确认后,终于进入到后台服务的搭建及实现中.所及而来的问题就出现了,为了提高后台程序的可用性.设计初期决定,通过搭建java WebService实现.准备工作还是比较充分的,创建WebSer ...

  8. 微信小程序商城服务器搭建,基于微信小程序商城毕业设计(小程序客户端+服务端Node.js源码)毕业论文+运行说明...

    微信小程序商城毕业设计(微信小程序客户端毕业设计) 摘  要 购物商城系统是保证以购物商城为基础的网上交易实现的体系.市场交易是由参与交易双方在平等.自由.互利的基础上进行的基于价值的交换.网上交易同 ...

  9. java 加密服务器_Javascript端加密java服务端解密

    通常我们会通过htts来保证传输安全,但如果我们不用https,如何通过javascript来保证浏览器端发送的参数进行加密,并且通过RSA算法来处理. 这里我们可以利用jquery的一个加密插件jc ...

  10. C++使用OPENSSL进行RSA加密,java服务端解密

    RSA是一种非对称加密. 加密和解密方式:公钥加密-私钥解密,私钥加密-公钥解密 背景 为了网络数据安全,Web端(Java)要求用RSA加密算法传数据,公钥加密私钥解密方式(RSA有公钥加密私钥解密 ...

最新文章

  1. 算术表达式字符串求值
  2. Apache Flink 在实时金融数据湖的应用
  3. 计算机二级web题目(6)--动态网页技术概述
  4. Android系统的智能指针(轻量级指针、强指针和弱指针)的实现原理分析【转】...
  5. Spring使用注解方式的学习笔记
  6. mysqldump 工具的使用
  7. 在.net中序列化读写xml方法的总结
  8. 美图秀秀计算机教程,美图秀秀怎么抠图 美图秀秀抠图详细教程
  9. PS为美女换服装颜色及换头发颜色
  10. 汇哲培训——CISA,CISSP等课程
  11. Win7部署Web网站之IIs安装篇
  12. Ubuntu9.04 desktop下LAMP的安装与配置
  13. 微信小程序怎么添加底部菜单按钮
  14. HBase数据结构与基本语法详解
  15. SQL Server使用SUM(求和)函数
  16. 二进制整数奇偶互换c语言,奇偶
  17. 照度计是什么测量原理
  18. java连接电信iot平台,物联网基础:BC28连接电信IOT平台进行数据传输
  19. 杜甫的唐诗三百首中的望岳
  20. 百度地图API学习---隐藏百度版权标志

热门文章

  1. 转载--自动化测试 (一) 12306火车票网站自动登录工具
  2. linux rpm 装 mac,linux之 rpm,yum
  3. 智能制造在美国、德国、日本有什么不同
  4. 一些AUTOSAR会议论坛的介绍(附资料下载)
  5. mysql的七种查询命令_MySQL数据库查询指令大全
  6. python图片提取文字
  7. 使用cmd打开任意软件
  8. NFT的未来:RFT、数据经济和Web3堆栈创新的推动者
  9. 《指弹:风居住的街道》
  10. [ROS] KDL + DH 参数 + 正解