微信小程序用户数据解密
概述
详细
代码下载: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)宣传,拒绝转载,转载需要作者授权
微信小程序用户数据解密相关推荐
- 微信小程序数据拼接_微信小程序用户数据解密算法Java版
打开官方文档,开心~ 腾讯爸爸竟然给提供了解密算法 然而我下载解压后人傻了 可能鹅厂没养Java程序猿吧 那就看这C++改造吧 public class AnthCodeVerify { privat ...
- 微信小程序用户数据的签名校验和加解密 - 后端nodejs
在本文 微信小程序用户数据的签名校验和加解密 之前需要先看看 微信小程序-获取用户session_key,openid,unionid - 后端为nodejs 代码封装是在上文添加的. 小程序代码: ...
- 微信java 签名验证_JAVA版微信小程序用户数据的签名验证和加解密
签名验证和加解密 数据签名校验 为了确保 开放接口 返回用户数据的安全性,微信会对明文数据进行签名.开发者可以根据业务需要对数据包进行签名校验,确保数据的完整性. 签名校验算法涉及用户的session ...
- 微信小程序用户信息解
微信小程序用户信息解密 问题描述 当小程序在获取用户信息或者获取手机号的时候,用户微信接口返回的是AES加密之后的数据,所以需要解决 方法 就拿获取手机号来讲,前端通过微信接口: Page({getP ...
- 获取小程序用户信息+java_java获取微信小程序用户信息
第一步:获取openid.session_key等信息. /** * 获取微信小程序的用户openid和session_key/unionid * 返回格式:{"session_key&qu ...
- webform窗体怎么实现session唯一标识_微信小程序用户登录和登录态维护的实现_javascript技巧...
这篇文章主要介绍了微信小程序用户登录和登录态维护的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 让用户登录,标识用户和获取 ...
- springboot 实现微信小程序授权并解密手机号
1.授权 授权是有前端完成的,授权后,前端可以获取到code,后台根据code获取微信小程序用户对应的openid和session_key,并根据openid判断是否是新用户,代码如下: @Value ...
- 小程序素材抓取软件_如何抓取微信小程序的数据?
2017年1月份备受关注的微信小程序功能正式上线了,好多知名平台纷纷推出了自己的微信小程序,例如大众点评.美团外卖.京东购物.对于我们爬虫开发者来说这绝对是好事情,意味着又多了一个数据来源,又多了一种 ...
- vue和小程序哪个好学一点_litemall,Spring Boot后端,微信小程序用户前端 + Vue用户移动端...
litemall 又一个小商场系统. litemall = Spring Boot后端 + Vue管理员前端 + 微信小程序用户前端 + Vue用户移动端 注意: 由于第一次加载数据量较大,建议wif ...
最新文章
- 网站如何进行渠道跟踪_开发网站不知道如何进行推广?5个技巧教会你
- Linux基础配置和查看命令帮助
- Nginx源码分析-内存池
- 同一个网络中为什么有些计算机可以连接共享打印机,有些需要输入密码,安装局域网共享打印机时,要求输入用户和密码,但对方并没有设置,为什么?谢谢!!...
- pipenv相关指令
- 光棍节脱单,单身狗该你上了
- Win10怎样彻底关闭安全中心
- 网盘资源搜索神器,只有你想不到没有你搜不到的,老司机必备!
- rvm、Ruby安装(亲测有效)
- 2018年我的开发管理总结
- Qt涂鸦板及其放大简例
- Adobe Reader 卸载不干净处理方法
- 【网络学习】对TortoiseSVN的基本了解及简单操作
- 基于Eclipse+Java+Swing+Mysql图书信息管理系统
- 如何减少PDF文件的大小
- Java对象空间分配流程
- Vue自定义组件之时间跨度选择器
- Android串口通信:串口读写
- python中的is None和==None
- angular前后台通讯-笔记(1)