当前位置: 首页 > news >正文

网站建设的一些知识百度大搜是什么

网站建设的一些知识,百度大搜是什么,做公司网站,泉州专业建站公司微信公众号 IT果果日记前言在上一篇文章“微信小程序如何获取用户信息”中我们完成了用户明文数据的校验工作,本文将学习解密用户的非明文用户信息,也就是获取用户的openId和unionId。解密调用wx.getUserProfile后将返回encryptedData和iv两个数据。encr…

微信公众号 IT果果日记

前言

在上一篇文章“微信小程序如何获取用户信息”中我们完成了用户明文数据的校验工作,本文将学习解密用户的非明文用户信息,也就是获取用户的openId和unionId。

解密

调用wx.getUserProfile后将返回encryptedData和iv两个数据。encryptedData是包括敏感数据在内的完整用户信息的加密数据,iv用于解密这个数据。整个解密用户数据的过程同上篇文章中用户信息校验的流程基本相同。不同的是,我们提交到服务器的数据是encryptedData和iv,而不是signature和rawData。下面编写用户数据解密的核心代码:

wx.login({success: function (loginRes){wx.getUserProfile({success: function (userRes){wx.request({url: "http://localhost:8080/wxopen/wxdecryptuserinfo"data: {code: loginRes.code,encryptedData: userRes.encryptedData,iv: userRes.iv},success: function(res){console.log(res.data);}})}})}
})

以上代码将code(用于获取session_key)、encryptedData和iv 3个参数发送到了后端接口wxdecryptuserinfo中。

服务器如何解密encryptedData数据呢?解密时需要session_key、iv、小程序的AppId 3个变量参与。session_key由code可以换取到,iv由小程序客户端提交,AppId本身就是一个固定的已知变量。

具体的解密算法较为复杂,但微信官方提供了包括C++、NodeJS、PHP和Python 4种语言的解密SDK,我们只需要使用官方提供的SDK即可,无须自己编写解密算法。目前,官方没有提供JAVA和C#版本的SDK,开发者可自行翻译。下面是java的解密代码实现:

Map<String,Object> map = new HashMap<>(7);
map.put("appid",wxAppId);
map.put("secret",wxSecret);
map.put("js_code", param.getCode());
map.put("grant_type",grantType);
WxCode2SessionRet result = null;
try{String url = "https://api.weixin.qq.com/sns/jscode2session";String info = HttpUtil.get(url, map);result = JSON.parseObject(info, WxCode2SessionRet.class);
} catch (Exception e){log.error("code2session失败", e);return null;
}
try {String result = AesCbcUtil.decrypt(param.getEncryptedData(), result.getSession_key(), param.getIv(), "UTF-8");JSONObject wxInfo = JSONObject.parseObject(result);String unionId = wxInfo.getString("unionId");String openid = sessionRet.getOpenid();
} catch (Exception e) {throw new RuntimeException("用户信息校验失败");
}

AesCbcUtil.decrypt 解密方法

public static String decrypt(String data, String key, String iv, String encodingFormat) {//被加密的数据byte[] dataByte = Base64.decodeBase64(data);//加密秘钥byte[] keyByte = Base64.decodeBase64(key);//偏移量byte[] ivByte = Base64.decodeBase64(iv);try {Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding");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, encodingFormat);return result;}return null;} catch (Exception e) {log.error("解密失败",e);throw new RuntimeException("解密失败");}
}

WxCode2SessionRet.java

@Data
public class WxCode2SessionRet implements Serializable {private String openid;private String session_key;private String unionid;private String errcode;private String errmsg;
}

这样,就可以从加密数据encryptedData里解密出我们想要的UnionId和openId了。

微信公众号 IT果果日记

https://gitee.com/chenzhaoplus

https://github.com/chenzhaoplus

https://blog.csdn.net/cz285933169?spm=1010.2135.3001.5421

http://www.hkea.cn/news/943991/

相关文章:

  • 网站通cms国内十大搜索引擎排名
  • centos7安装 wordpress网站如何进行seo
  • 设计师灵感网站美国今天刚刚发生的新闻
  • 重庆南岸营销型网站建设公司推荐竞价sem托管
  • 深圳做二维码网站建设什么是互联网营销
  • 网易企业邮箱收费标准百色seo关键词优化公司
  • 做网站的财务需求张北网站seo
  • 北京赛车彩票网站怎么做佛山本地网站建设
  • 门户网站的建设方式有哪些网络推广引流
  • 做中东服装有什么网站免费seo刷排名
  • 做网站用java还是c语言百度竞价推广培训
  • 做动画视频的网站市场监督管理局官网入口
  • 做bbs网站教程军事新闻最新消息今天
  • 在哪儿可以找到网站开发的需求搜索引擎优化介绍
  • 成都网站建设代理加盟网络运营培训班多少钱
  • 太原开发网站公司站长工具端口扫描
  • 域控制网站访问自媒体视频发布平台
  • 广西住房和城乡建设委员会网站湖南网站营销seo多少费用
  • 关键词推广名词解释百度竞价关键词怎么优化
  • 群辉服务器做网站网络优化的内容包括哪些
  • 做淘客的网站岳阳seo
  • 网吧设计方案seox
  • 谁做网站市场营销专业
  • 慈溪外贸公司网站网络营销就业前景和薪水
  • 电商网站建设实训报告长沙网站seo推广公司
  • 阿里云ecs怎么建网站吉林网站seo
  • 企业营销型网站建设的可行性西安竞价托管
  • 做网站如何适应分辨率网站分析培训班
  • 现在币圈有那些私募网站做的好百度推广账号登陆入口
  • 旅游网站图片营销公司排名