概述

通过微信web开发者工具创建登录,获取用户信息,发送至后台,进行用户数据解密

详细

代码下载:http://www.demodashi.com/demo/10705.html

一、准备工作

1、由于用到了 Redis 缓存,需要安装 Redis(安装略过)

2、后台开发环境Idea 15,java开发环境(安装略过),由于是 Maven 构建的项目,在 Eclipse 下也可以运行

3、下载安装微信Web开发者工具

4、本实例通过客户端登录请求后台,进行微信用户信息解密

二、程序实现

1、原理

2、程序包括后台和客户端,后台使用 Idea 15 进行开发实现,客户端通过微信 web 开发者工具开发实现

后台截图:

客户端截图:

3、思路

a、在web开发者工具上扫描二维码登录成功后

b、发送获取 3rd_session 请求,获取 3rd_session 数据

c、然后调用解密地址请求,对用户信息进行解密

4、涉及到的关键代码

a、客户端获取code

onLoad: function (options) {// 页面初始化 options为页面跳转所带来的参数let that = thiswx.login({success: function (res) {// successlet code = res.codethat.setData({ code: code })wx.getUserInfo({success: function (res) {// successthat.setData({ userInfo: res.userInfo })that.setData({ iv: res.iv })that.setData({ encryptedData: res.encryptedData })that.get3rdSession()}})}})
}

b、 客户端发送 code 到服务端,获取 3rd_session

get3rdSession:function(){let that = thiswx.request({url: 'https://localhost:8443/get3rdSession',data: {code: this.data.code},method: 'GET', // OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, CONNECT// header: {}, // 设置请求的 headersuccess: function (res) {// successvar sessionId = res.data.session;that.setData({ sessionId: sessionId })wx.setStorageSync('sessionId', sessionId)that.decodeUserInfo()}})}

c、服务端发送 appid、appsecret、code 到微信服务器换取 session_key 和 openid

public void get3rdSession() {    //获取名为userInfo的Redis Cache对象Cache userInfoCache = Redis.use("userInfo");String sessionId = "";JSONObject json = new JSONObject();String code = getPara("code");String url = "https://api.weixin.qq.com/sns/jscode2session?appid=wx7560b8008e2c445d&secret=f1af3312b7038513fd17dd9cbc3b357c&js_code=" + code + "&grant_type=authorization_code";    //执行命令生成3rd_sessionString session = ExecLinuxCMDUtil.instance.exec("cat /dev/urandom |od -x | tr -d ' '| head -n 1").toString();json.put("session", session);    //创建默认的httpClient实例CloseableHttpClient httpClient = getHttpClient();    try {        //用get方法发送http请求HttpGet get = new HttpGet(url);System.out.println("执行get请求:...." + get.getURI());CloseableHttpResponse httpResponse = null;        //发送get请求httpResponse = httpClient.execute(get);        try {            //response实体HttpEntity entity = httpResponse.getEntity();            if (null != entity) {String result = EntityUtils.toString(entity);System.out.println(result);JSONObject resultJson = JSONObject.fromObject(result);String session_key = resultJson.getString("session_key");String openid = resultJson.getString("openid");                //session存储userInfoCache.set(session,session_key+","+openid);}} finally {httpResponse.close();}} catch (Exception e) {e.printStackTrace();} finally {            try {closeHttpClient(httpClient);} catch (IOException e) {e.printStackTrace();}}renderJson(json);
}private CloseableHttpClient getHttpClient() {    return HttpClients.createDefault();
}private void closeHttpClient(CloseableHttpClient client) throws IOException {    if (client != null) {client.close();}
}

d、客户端发送请求解密用户数据

decodeUserInfo:function(){let that = thiswx.request({url: 'https://localhost:8443/decodeUserInfo',data: {encryptedData: that.data.encryptedData,iv: that.data.iv,session: wx.getStorageSync('sessionId')},method: 'GET', // OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, CONNECT// header: {}, // 设置请求的 headersuccess: function (res) {// successconsole.log(res)}})
}

5、配置文件

a、由于微信小程序使用的是https请求,所以需要生成ssl请求,即 keystore,生成自己的 keystore 后替换 pom.xml 文件里

<keystore> /Users/LJaer/Workspaces/tomcat.keystore</keystore>

b、由于使用了 Redis 缓存,需要对 Redis 地址进行修改,AppConfig 类中,替换 redis 服务地址

RedisPlugin userInfoRedis = new RedisPlugin("userInfo","192.168.99.100");

三、运行效果

1、服务端启动,使用命令 jetty:run 进行服务端的启动

2、客户端启动,点击编译即可运行

3、用户数据解密截图

四、其他补充

官网文档地址:https://mp.weixin.qq.com/debug/wxadoc/dev/api/api-login.html?t=20161222#wxloginobject

注:本文著作权归作者,由demo大师(http://www.demodashi.com)宣传,拒绝转载,转载需要作者授权

微信小程序用户数据解密相关推荐

  1. 微信小程序数据拼接_微信小程序用户数据解密算法Java版

    打开官方文档,开心~ 腾讯爸爸竟然给提供了解密算法 然而我下载解压后人傻了 可能鹅厂没养Java程序猿吧 那就看这C++改造吧 public class AnthCodeVerify { privat ...

  2. 微信小程序用户数据的签名校验和加解密 - 后端nodejs

    在本文 微信小程序用户数据的签名校验和加解密 之前需要先看看 微信小程序-获取用户session_key,openid,unionid - 后端为nodejs 代码封装是在上文添加的. 小程序代码: ...

  3. 微信java 签名验证_JAVA版微信小程序用户数据的签名验证和加解密

    签名验证和加解密 数据签名校验 为了确保 开放接口 返回用户数据的安全性,微信会对明文数据进行签名.开发者可以根据业务需要对数据包进行签名校验,确保数据的完整性. 签名校验算法涉及用户的session ...

  4. 微信小程序用户信息解

    微信小程序用户信息解密 问题描述 当小程序在获取用户信息或者获取手机号的时候,用户微信接口返回的是AES加密之后的数据,所以需要解决 方法 就拿获取手机号来讲,前端通过微信接口: Page({getP ...

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

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

  6. webform窗体怎么实现session唯一标识_微信小程序用户登录和登录态维护的实现_javascript技巧...

    这篇文章主要介绍了微信小程序用户登录和登录态维护的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 让用户登录,标识用户和获取 ...

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

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

  8. 小程序素材抓取软件_如何抓取微信小程序的数据?

    2017年1月份备受关注的微信小程序功能正式上线了,好多知名平台纷纷推出了自己的微信小程序,例如大众点评.美团外卖.京东购物.对于我们爬虫开发者来说这绝对是好事情,意味着又多了一个数据来源,又多了一种 ...

  9. vue和小程序哪个好学一点_litemall,Spring Boot后端,微信小程序用户前端 + Vue用户移动端...

    litemall 又一个小商场系统. litemall = Spring Boot后端 + Vue管理员前端 + 微信小程序用户前端 + Vue用户移动端 注意: 由于第一次加载数据量较大,建议wif ...

最新文章

  1. 网站如何进行渠道跟踪_开发网站不知道如何进行推广?5个技巧教会你
  2. Linux基础配置和查看命令帮助
  3. Nginx源码分析-内存池
  4. 同一个网络中为什么有些计算机可以连接共享打印机,有些需要输入密码,安装局域网共享打印机时,要求输入用户和密码,但对方并没有设置,为什么?谢谢!!...
  5. pipenv相关指令
  6. 光棍节脱单,单身狗该你上了
  7. Win10怎样彻底关闭安全中心
  8. 网盘资源搜索神器,只有你想不到没有你搜不到的,老司机必备!
  9. rvm、Ruby安装(亲测有效)
  10. 2018年我的开发管理总结
  11. Qt涂鸦板及其放大简例
  12. Adobe Reader 卸载不干净处理方法
  13. 【网络学习】对TortoiseSVN的基本了解及简单操作
  14. 基于Eclipse+Java+Swing+Mysql图书信息管理系统
  15. 如何减少PDF文件的大小
  16. Java对象空间分配流程
  17. Vue自定义组件之时间跨度选择器
  18. Android串口通信:串口读写
  19. python中的is None和==None
  20. angular前后台通讯-笔记(1)

热门文章

  1. Python文件的操作2
  2. oracle报sp20042,oracle中ora-04301故障处理
  3. 数据结构之线索化二叉树
  4. 关于使用cadence建pad
  5. QT5开发及实例学习之十六Qt5基础图形的绘制
  6. mysql的服务器编号_mysql主从服务器配置.doc
  7. 重新分区_电脑磁盘分区指南!一分钟就学会
  8. js计算字典的个数_JS数据结构与算法_集合字典
  9. java 怎么控制暂停5秒钟_java – libGDX暂停运行几秒钟
  10. 力扣面试题16.05.阶乘尾数