WechatService.java 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. package com.zoniot.ccrc.service;
  2. import com.alibaba.fastjson.JSONObject;
  3. import com.zoniot.ccrc.commom.exception.ServiceException;
  4. import com.zoniot.ccrc.commom.utils.HttpRequest;
  5. import lombok.extern.slf4j.Slf4j;
  6. import org.bouncycastle.jce.provider.BouncyCastleProvider;
  7. import org.bouncycastle.util.encoders.Base64;
  8. import org.springframework.beans.factory.annotation.Value;
  9. import org.springframework.stereotype.Service;
  10. import javax.crypto.BadPaddingException;
  11. import javax.crypto.Cipher;
  12. import javax.crypto.IllegalBlockSizeException;
  13. import javax.crypto.NoSuchPaddingException;
  14. import javax.crypto.spec.IvParameterSpec;
  15. import javax.crypto.spec.SecretKeySpec;
  16. import java.io.IOException;
  17. import java.io.UnsupportedEncodingException;
  18. import java.math.BigInteger;
  19. import java.security.*;
  20. import java.security.spec.InvalidParameterSpecException;
  21. import java.util.Arrays;
  22. import java.util.List;
  23. @Slf4j
  24. @Service
  25. public class WechatService {
  26. //水查查小程序
  27. private static String APP_SECRET="a01d7f75f15e1a6b7fa28a317f97ef1b";
  28. private static String APP_ID="wx27f831675081e293" ;
  29. public static String getSessionkey(String code) {
  30. JSONObject oppidObj=getWechatAuthInfo(code);
  31. Integer errcode = (Integer) oppidObj.get("errcode");
  32. if(errcode == null){
  33. String openid = (String) oppidObj.get("openid");
  34. String session_key = (String) oppidObj.get("session_key");
  35. log.info("session_key:"+session_key);
  36. return session_key;
  37. }else {
  38. throw new ServiceException(-900,"获取session_key错误");
  39. }
  40. }
  41. private static JSONObject getWechatAuthInfo(String code){
  42. String url = "https://api.weixin.qq.com/sns/jscode2session?appid=" + APP_ID + "&secret="
  43. + APP_SECRET + "&js_code=" + code + "&grant_type=authorization_code";
  44. String reusult = null;
  45. try {
  46. reusult = HttpRequest.doGet(url);
  47. log.info(reusult);
  48. } catch (IOException e) {
  49. e.printStackTrace();
  50. }
  51. JSONObject oppidObj = JSONObject.parseObject(reusult);
  52. return oppidObj;
  53. }
  54. public static String getOpenid(String code,String customerId) {
  55. JSONObject oppidObj=getWechatAuthInfo(code);
  56. Integer errcode = (Integer) oppidObj.get("errcode");
  57. if(errcode == null){
  58. String openid = (String) oppidObj.get("openid");
  59. log.info("openid:"+openid);
  60. return openid;
  61. }else {
  62. throw new ServiceException(-900,"获取openid错误");
  63. }
  64. //return "ojYws5KUylI0muJdONaGaAUAJ_Xc";
  65. }
  66. public static String getInfo(String encryptedData, String iv, String sessionKey) {
  67. // 被加密的数据
  68. byte[] dataByte = Base64.decode(encryptedData);
  69. // 加密秘钥
  70. byte[] keyByte = Base64.decode(sessionKey);
  71. // 偏移量
  72. byte[] ivByte = Base64.decode(iv);
  73. try {
  74. // 如果密钥不足16位,那么就补足. 这个if 中的内容很重要
  75. int base = 16;
  76. if (keyByte.length % base != 0) {
  77. int groups = keyByte.length / base + (keyByte.length % base != 0 ? 1 : 0);
  78. byte[] temp = new byte[groups * base];
  79. Arrays.fill(temp, (byte) 0);
  80. System.arraycopy(keyByte, 0, temp, 0, keyByte.length);
  81. keyByte = temp;
  82. }
  83. // 初始化
  84. Security.addProvider(new BouncyCastleProvider());
  85. Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding","BC");
  86. SecretKeySpec spec = new SecretKeySpec(keyByte, "AES");
  87. AlgorithmParameters parameters = AlgorithmParameters.getInstance("AES");
  88. parameters.init(new IvParameterSpec(ivByte));
  89. cipher.init(Cipher.DECRYPT_MODE, spec, parameters);// 初始化
  90. byte[] resultByte = cipher.doFinal(dataByte);
  91. if (null != resultByte && resultByte.length > 0) {
  92. String result = new String(resultByte, "UTF-8");
  93. log.info("info:"+result);
  94. return JSONObject.parseObject(result).getString("purePhoneNumber");
  95. }
  96. } catch (NoSuchAlgorithmException e) {
  97. e.printStackTrace();
  98. } catch (NoSuchPaddingException e) {
  99. e.printStackTrace();
  100. } catch (InvalidParameterSpecException e) {
  101. e.printStackTrace();
  102. } catch (IllegalBlockSizeException e) {
  103. e.printStackTrace();
  104. } catch (BadPaddingException e) {
  105. e.printStackTrace();
  106. } catch (UnsupportedEncodingException e) {
  107. e.printStackTrace();
  108. } catch (InvalidKeyException e) {
  109. e.printStackTrace();
  110. } catch (InvalidAlgorithmParameterException e) {
  111. e.printStackTrace();
  112. } catch (NoSuchProviderException e) {
  113. e.printStackTrace();
  114. }
  115. return null;
  116. }
  117. }