From 81da61b828e29b7745e1382dfbbaeb685dc083ef Mon Sep 17 00:00:00 2001 From: admin <weikou2014> Date: 星期二, 23 一月 2024 17:17:55 +0800 Subject: [PATCH] 抖音转链修改 --- utils/src/main/java/org/yeshi/utils/wx/WXXCXUtil.java | 288 ++++++++++++++++++++++++++++---------------------------- 1 files changed, 144 insertions(+), 144 deletions(-) diff --git a/utils/src/main/java/org/yeshi/utils/wx/WXXCXUtil.java b/utils/src/main/java/org/yeshi/utils/wx/WXXCXUtil.java index 441f7a9..a3431ef 100644 --- a/utils/src/main/java/org/yeshi/utils/wx/WXXCXUtil.java +++ b/utils/src/main/java/org/yeshi/utils/wx/WXXCXUtil.java @@ -1,144 +1,144 @@ -package org.yeshi.utils.wx; - -import java.io.InputStream; -import java.security.AlgorithmParameters; -import java.security.Security; -import java.util.Arrays; - -import javax.crypto.Cipher; -import javax.crypto.spec.IvParameterSpec; -import javax.crypto.spec.SecretKeySpec; - -import org.apache.commons.codec.binary.Base64; -import org.bouncycastle.jce.provider.BouncyCastleProvider; -import org.yeshi.utils.HttpUtil; -import org.yeshi.utils.entity.wx.WXAPPInfo; -import org.yeshi.utils.entity.wx.WXMPSessionInfo; -import org.yeshi.utils.entity.wx.WXMPUserInfo; - -import com.google.gson.Gson; - -import net.sf.json.JSONObject; - -public class WXXCXUtil { - - public static InputStream getXCXCode(String accessToken, String path, String scene) { - String url = "https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=" + accessToken; - JSONObject data = new JSONObject(); - data.put("scene", scene); - data.put("page", path); - // JSONObject color = new JSONObject(); - // color.put("r", ); - // color.put("g", ); - // color.put("b", ); - // - // data.put("line_color", color); - - try { - return HttpUtil.postForInputstream(url, data.toString()); - } catch (Exception e) { - return null; - } - } - - // 鑾峰彇鏈夐檺鐨勫皬绋嬪簭鐮� - public static InputStream getLimitXCXCode(String accessToken, String path) { - String url = "https://api.weixin.qq.com/wxa/getwxacode?access_token=" + accessToken; - JSONObject data = new JSONObject(); - data.put("path", path); - data.put("width", 500); - return HttpUtil.postForInputstream(url, data.toString()); - } - - public static WXMPSessionInfo getSessionInfo(WXAPPInfo app, String code) { - try { - String url = String.format( - "https://api.weixin.qq.com/sns/jscode2session?appid=%s&secret=%s&js_code=%s&grant_type=authorization_code", - app.getAppId(), app.getAppSecret(), code); - String result = HttpUtil.get(url); - System.out.println(result); - JSONObject json = JSONObject.fromObject(result); - WXMPSessionInfo info = new WXMPSessionInfo(json.optString("openid"), json.optString("session_key"), - json.optString("unionid")); - if (org.yeshi.utils.StringUtil.isNullOrEmpty(info.getOpenId())) - return null; - return info; - } catch (Exception e) { - } - return null; - } - - /** - * 閫氳繃瑙e瘑淇℃伅鑾峰彇鐢佃瘽鍙风爜 - * - * @param sessionKey - * @param encryptedData - * @param iv - * @return - */ - public static String getPhoneNumber(String sessionKey, String encryptedData, String iv) { - String result = decrpt(sessionKey, encryptedData, iv); - if (!org.yeshi.utils.StringUtil.isNullOrEmpty(result)) { - JSONObject data = JSONObject.fromObject(result); - if (data.optString("countryCode").equalsIgnoreCase("86"))// 鍙兘鑾峰彇涓浗鐨勬墜鏈哄彿 - return data.optString("purePhoneNumber"); - } - return null; - } - - /** - * 鑾峰彇鐢ㄦ埛淇℃伅 - * - * @param sessionKey - * @param encryptedData - * @param iv - * @return - */ - public static WXMPUserInfo getUserInfo(String sessionKey, String encryptedData, String iv) { - String result = decrpt(sessionKey, encryptedData, iv); - if (!org.yeshi.utils.StringUtil.isNullOrEmpty(result)) { - WXMPUserInfo userInfo = new Gson().fromJson(result, WXMPUserInfo.class); - return userInfo; - } - return null; - } - - private static String decrpt(String sessionKey, String encryptedData, String iv) { - try { - final Base64 base64 = new Base64(); - // 琚姞瀵嗙殑鏁版嵁 - byte[] dataByte = base64.decode(encryptedData.getBytes("UTF-8")); - // 鍔犲瘑绉橀挜 - byte[] keyByte = base64.decode(sessionKey.getBytes("UTF-8")); - // 鍋忕Щ閲� - byte[] ivByte = base64.decode(iv.getBytes("UTF-8")); - - // 濡傛灉瀵嗛挜涓嶈冻16浣嶏紝閭d箞灏辫ˉ瓒�. 杩欎釜if 涓殑鍐呭寰堥噸瑕� - int base = 16; - if (keyByte.length % base != 0) { - int groups = keyByte.length / base + (keyByte.length % base != 0 ? 1 : 0); - byte[] temp = new byte[groups * base]; - Arrays.fill(temp, (byte) 0); - System.arraycopy(keyByte, 0, temp, 0, keyByte.length); - keyByte = temp; - } - // 鍒濆鍖� - Security.addProvider(new BouncyCastleProvider()); - Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding", "BC"); - 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, "UTF-8"); - return result; - } - } catch (Exception e) { - System.out.println(e.getMessage()); - } - return null; - - } - -} +package org.yeshi.utils.wx; + +import java.io.InputStream; +import java.security.AlgorithmParameters; +import java.security.Security; +import java.util.Arrays; + +import javax.crypto.Cipher; +import javax.crypto.spec.IvParameterSpec; +import javax.crypto.spec.SecretKeySpec; + +import org.apache.commons.codec.binary.Base64; +import org.bouncycastle.jce.provider.BouncyCastleProvider; +import org.yeshi.utils.HttpUtil; +import org.yeshi.utils.entity.wx.WXAPPInfo; +import org.yeshi.utils.entity.wx.WXMPSessionInfo; +import org.yeshi.utils.entity.wx.WXMPUserInfo; + +import com.google.gson.Gson; + +import net.sf.json.JSONObject; + +public class WXXCXUtil { + + public static InputStream getXCXCode(String accessToken, String path, String scene) { + String url = "https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=" + accessToken; + JSONObject data = new JSONObject(); + data.put("scene", scene); + data.put("page", path); + // JSONObject color = new JSONObject(); + // color.put("r", ); + // color.put("g", ); + // color.put("b", ); + // + // data.put("line_color", color); + + try { + return HttpUtil.postForInputstream(url, data.toString()); + } catch (Exception e) { + return null; + } + } + + // 鑾峰彇鏈夐檺鐨勫皬绋嬪簭鐮� + public static InputStream getLimitXCXCode(String accessToken, String path) { + String url = "https://api.weixin.qq.com/wxa/getwxacode?access_token=" + accessToken; + JSONObject data = new JSONObject(); + data.put("path", path); + data.put("width", 500); + return HttpUtil.postForInputstream(url, data.toString()); + } + + public static WXMPSessionInfo getSessionInfo(WXAPPInfo app, String code) { + try { + String url = String.format( + "https://api.weixin.qq.com/sns/jscode2session?appid=%s&secret=%s&js_code=%s&grant_type=authorization_code", + app.getAppId(), app.getAppSecret(), code); + String result = HttpUtil.get(url); + System.out.println(result); + JSONObject json = JSONObject.fromObject(result); + WXMPSessionInfo info = new WXMPSessionInfo(json.optString("openid"), json.optString("session_key"), + json.optString("unionid")); + if (org.yeshi.utils.StringUtil.isNullOrEmpty(info.getOpenId())) + return null; + return info; + } catch (Exception e) { + } + return null; + } + + /** + * 閫氳繃瑙e瘑淇℃伅鑾峰彇鐢佃瘽鍙风爜 + * + * @param sessionKey + * @param encryptedData + * @param iv + * @return + */ + public static String getPhoneNumber(String sessionKey, String encryptedData, String iv) { + String result = decrpt(sessionKey, encryptedData, iv); + if (!org.yeshi.utils.StringUtil.isNullOrEmpty(result)) { + JSONObject data = JSONObject.fromObject(result); + if (data.optString("countryCode").equalsIgnoreCase("86"))// 鍙兘鑾峰彇涓浗鐨勬墜鏈哄彿 + return data.optString("purePhoneNumber"); + } + return null; + } + + /** + * 鑾峰彇鐢ㄦ埛淇℃伅 + * + * @param sessionKey + * @param encryptedData + * @param iv + * @return + */ + public static WXMPUserInfo getUserInfo(String sessionKey, String encryptedData, String iv) { + String result = decrpt(sessionKey, encryptedData, iv); + if (!org.yeshi.utils.StringUtil.isNullOrEmpty(result)) { + WXMPUserInfo userInfo = new Gson().fromJson(result, WXMPUserInfo.class); + return userInfo; + } + return null; + } + + private static String decrpt(String sessionKey, String encryptedData, String iv) { + try { + final Base64 base64 = new Base64(); + // 琚姞瀵嗙殑鏁版嵁 + byte[] dataByte = base64.decode(encryptedData.getBytes("UTF-8")); + // 鍔犲瘑绉橀挜 + byte[] keyByte = base64.decode(sessionKey.getBytes("UTF-8")); + // 鍋忕Щ閲� + byte[] ivByte = base64.decode(iv.getBytes("UTF-8")); + + // 濡傛灉瀵嗛挜涓嶈冻16浣嶏紝閭d箞灏辫ˉ瓒�. 杩欎釜if 涓殑鍐呭寰堥噸瑕� + int base = 16; + if (keyByte.length % base != 0) { + int groups = keyByte.length / base + (keyByte.length % base != 0 ? 1 : 0); + byte[] temp = new byte[groups * base]; + Arrays.fill(temp, (byte) 0); + System.arraycopy(keyByte, 0, temp, 0, keyByte.length); + keyByte = temp; + } + // 鍒濆鍖� + Security.addProvider(new BouncyCastleProvider()); + Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding", "BC"); + 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, "UTF-8"); + return result; + } + } catch (Exception e) { + System.out.println(e.getMessage()); + } + return null; + + } + +} -- Gitblit v1.8.0