轻源码

  • QingYuanMa.com
  • 全球最大的互联网技术和资源下载平台
搜索
一起源码网 门户 终极进阶 查看主题

微信小程序获取用户信息,解密encryptedData(JAVA)

发布者: 111qqq | 发布时间: 2018-5-10 08:34| 查看数: 4303| 评论数: 1|帖子模式

  1. package com.iups.wx.wxservice;
  2. import java.io.UnsupportedEncodingException;
  3. import java.security.AlgorithmParameters;
  4. import java.security.InvalidAlgorithmParameterException;
  5. import java.security.InvalidKeyException;
  6. import java.security.NoSuchAlgorithmException;
  7. import java.security.NoSuchProviderException;
  8. import java.security.Security;
  9. import java.security.spec.InvalidParameterSpecException;
  10. import java.util.HashMap;
  11. import java.util.Map;
  12. import javax.crypto.BadPaddingException;
  13. import javax.crypto.Cipher;
  14. import javax.crypto.IllegalBlockSizeException;
  15. import javax.crypto.NoSuchPaddingException;
  16. import javax.crypto.spec.IvParameterSpec;
  17. import javax.crypto.spec.SecretKeySpec;
  18. import net.sf.json.JSONObject;
  19. import org.bouncycastle.jce.provider.BouncyCastleProvider;
  20. import org.bouncycastle.util.Arrays;
  21. import org.codehaus.xfire.util.Base64;
  22. import com.iups.wx.common.RemoteInterfaceAddress;
  23. import com.iups.wx.util.HttpsClientUtil;
  24. /**
  25. * 微信小程序信息获取
  26. * @author Administrator
  27. * @Date 2017年2月16日 11:56:08
  28. */
  29. public class WXAppletUserInfo {
  30. /**
  31. * 获取微信小程序 session_key 和 openid
  32. * @param code
  33. * @return
  34. */
  35. public JSONObject getSessionKeyOropenid(String code){
  36. //微信端登录code值
  37. String wxCode = code;
  38. String requestUrl = RemoteInterfaceAddress.GETSESSIONKEYOROPENID;
  39. Map<String,String> requestUrlParam = new HashMap<String,String>();
  40. requestUrlParam.put("appid", RemoteInterfaceAddress.AppletAPPID);
  41. requestUrlParam.put("secret", RemoteInterfaceAddress.AppletAppSecret);
  42. requestUrlParam.put("js_code", wxCode);
  43. requestUrlParam.put("grant_type", "authorization_code");
  44. JSONObject jsonObject = HttpsClientUtil.getInstance().sendGetRequest(requestUrl, requestUrlParam);
  45. return jsonObject;
  46. }
  47. /**
  48. * 解密用户敏感数据获取用户信息
  49. * @param sessionKey 数据进行加密签名的密钥
  50. * @param encryptedData 包括敏感数据在内的完整用户信息的加密数据
  51. * @param iv 加密算法的初始向量
  52. * @return
  53. */
  54. public JSONObject getUserInfo(String encryptedData,String sessionKey,String iv){
  55. // 被加密的数据
  56. byte[] dataByte = Base64.decode(encryptedData);
  57. // 加密秘钥
  58. byte[] keyByte = Base64.decode(sessionKey);
  59. // 偏移量
  60. byte[] ivByte = Base64.decode(iv);
  61. try {
  62. // 如果密钥不足16位,那么就补足. 这个if 中的内容很重要
  63. int base = 16;
  64. if (keyByte.length % base != 0) {
  65. int groups = keyByte.length / base + (keyByte.length % base != 0 ? 1 : 0);
  66. byte[] temp = new byte[groups * base];
  67. Arrays.fill(temp, (byte) 0);
  68. System.arraycopy(keyByte, 0, temp, 0, keyByte.length);
  69. keyByte = temp;
  70. }
  71. // 初始化
  72. Security.addProvider(new BouncyCastleProvider());
  73. Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding","BC");
  74. SecretKeySpec spec = new SecretKeySpec(keyByte, "AES");
  75. AlgorithmParameters parameters = AlgorithmParameters.getInstance("AES");
  76. parameters.init(new IvParameterSpec(ivByte));
  77. cipher.init(Cipher.DECRYPT_MODE, spec, parameters);// 初始化
  78. byte[] resultByte = cipher.doFinal(dataByte);
  79. if (null != resultByte && resultByte.length > 0) {
  80. String result = new String(resultByte, "UTF-8");
  81. return JSONObject.fromObject(result);
  82. }
  83. } catch (NoSuchAlgorithmException e) {
  84. e.printStackTrace();
  85. } catch (NoSuchPaddingException e) {
  86. e.printStackTrace();
  87. } catch (InvalidParameterSpecException e) {
  88. e.printStackTrace();
  89. } catch (IllegalBlockSizeException e) {
  90. e.printStackTrace();
  91. } catch (BadPaddingException e) {
  92. e.printStackTrace();
  93. } catch (UnsupportedEncodingException e) {
  94. e.printStackTrace();
  95. } catch (InvalidKeyException e) {
  96. e.printStackTrace();
  97. } catch (InvalidAlgorithmParameterException e) {
  98. e.printStackTrace();
  99. } catch (NoSuchProviderException e) {
  100. e.printStackTrace();
  101. }
  102. return null;
  103. }
  104. }

二:获取openid返回appid missing的问题

微信小程序在获取openid的时候,如果按照微信自己的写法会报错。

返回错误代码41002

错误信息appid missing

解决方法是不使用他的方法,使用拼接URL然后post。

最新评论

aythe 发表于 2022-6-14 14:09
游戏源代码下载网站

轻源码让程序更轻更快

QingYuanMa.com

工作时间 周一至周六 8:00-17:30

侵权处理

客服QQ点击咨询

关注抖音号

定期抽VIP

Copyright © 2016-2021 https://www.171739.xyz/ 滇ICP备13200218号

快速回复 返回顶部 返回列表