package com.ynxbd.wx.config; import com.ynxbd.common.helper.ProperHelper; import lombok.extern.slf4j.Slf4j; @Slf4j public class WeChatConfig { private WeChatConfig() { } //配置文件读取项 public static final String APP_ID; public static final String APP_SECRET; public static final String TOKEN; public static final String AES_KEY; public static final String MCH_ID; public static final String MCH_KEY; // public static final String PASSWORD; // private static String BASE_URL; private static String WEB_PATH; // 开启预结算(第2开关) public static boolean IS_RECIPE_PREPAY; static { ProperHelper config = new ProperHelper().read("wx.properties"); IS_RECIPE_PREPAY = config.getBoolean("wx.is_recipe_prepay", false); APP_ID = config.getString("wx.appId"); APP_SECRET = config.getString("wx.appSecret"); TOKEN = config.getString("wx.token"); AES_KEY = config.getString("wx.aesKey"); BASE_URL = config.getString("wx.baseURL"); PASSWORD = config.getString("wx.password"); // 商户 MCH_ID = config.getString("wx.mchId"); MCH_KEY = config.getString("wx.mchKey"); WEB_PATH = config.getString("wx.webPath"); if (WEB_PATH == null) { WEB_PATH = ""; } if (BASE_URL == null) { log.error("【微信】读取配置文件wx.properties失败"); } } public static String getBaseUrl() { if (BASE_URL == null) { BASE_URL = ""; } if (BASE_URL.length() == 0) return BASE_URL; String suffix = BASE_URL.substring(BASE_URL.length() - 1); if (!"/".equals(suffix)) { BASE_URL += "/"; } return BASE_URL; } public static String getHttpsBaseUrl() { String url = getBaseUrl(); if (url != null && url.contains("http") && !url.contains("https")) { url = url.replace("http", "https"); } return url; } /** * 获取配置中原本的域名 */ public static String getBaseDomain() { if (BASE_URL.length() < 4) { return BASE_URL; } return BASE_URL.substring(0, BASE_URL.length() - 4); } // 域名 public static String getDomain(boolean isHttps) { if (BASE_URL.length() < 4) { return BASE_URL; } String url = BASE_URL; if (isHttps) { int index = url.indexOf("http://"); if (index == 0) { url = "https://" + url.substring(index + 7); } } return url.substring(0, url.length() - 4); } public static String getWebPath(boolean isPrefix, boolean isSuffix) { if (WEB_PATH == null || WEB_PATH.length() == 0) return "/"; String prefix = WEB_PATH.substring(0, 1); if ("/".equals(prefix)) { WEB_PATH = isPrefix ? WEB_PATH : WEB_PATH.substring(1); } else { WEB_PATH = isPrefix ? ("/" + WEB_PATH) : WEB_PATH; } String suffix = WEB_PATH.substring(WEB_PATH.length() - 1); if ("/".equals(suffix)) { WEB_PATH = isSuffix ? WEB_PATH : WEB_PATH.substring(0, WEB_PATH.length() - 1); } else { WEB_PATH = isSuffix ? (WEB_PATH + "/") : WEB_PATH; } return WEB_PATH; } public static String getWebUrl() { String webPath = getWebPath(false, true); if ("/".equals(webPath)) { webPath = ""; } return getBaseUrl() + webPath; } // public static String getAccessToken() { // String accessToken = ACCESS_TOKEN_CACHE.get(ACCESS_TOKEN_KEY); // if (ObjectUtils.isEmpty(accessToken)) { // Token token = TokenAPI.token(getAppId(), getAppSecret()); // if (token == null) { // return null; // } // accessToken = token.getAccess_token(); // if (token.getExpires_in() > 0 && !ObjectUtils.isEmpty(accessToken)) { // ACCESS_TOKEN_CACHE.put("access_token", accessToken); // } // } // return accessToken; // } // // // public static Map getWxConfig(String url) { // Map map = new HashMap<>(); // // 时间戳 // String timestamp = Long.toString((new Date().getTime()) / 1000); // // 随机串 // String nonceStr = UUID.randomUUID().toString(); // // 根据 token 获取 jstl // String urlStr = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=" + getAccessToken() + "&msgInterface=jsapi"; // Result result = RequestHelper.get(urlStr, null); // System.out.println(result); // JSONObject resultJson = JSONObject.parseObject(JSON.toJSONString(result.getData())); // String ticket = resultJson.getString("ticket"); // System.out.println(ticket); // System.out.println("要加密的参数:" + nonceStr + " " + ticket + " " + timestamp + " " + url); // String signature = getSign(nonceStr, ticket, timestamp, url); // map.put("appId", appId); // map.put("timestamp", timestamp); // map.put("nonceStr", nonceStr); // map.put("signature", signature); // return map; // } // // // private static String getSign(String nonceStr, String jsapiTicket, String timestamp, String url) { // String[] paramArr = new String[]{"jsapi_ticket=" + jsapiTicket, "timestamp=" + timestamp, "noncestr=" + nonceStr, "url=" + url}; // Arrays.sort(paramArr); // // 将排序后的结果拼接成一个字符串 // String content = paramArr[0].concat("&" + paramArr[1]).concat("&" + paramArr[2]).concat("&" + paramArr[3]); // String signature; // try { // MessageDigest md = MessageDigest.getInstance("SHA-1"); // // 对拼接后的字符串进行 sha1 加密 // System.out.println("拼接加密签名:" + content); // byte[] digest = md.digest(content.getBytes()); // signature = byteToStr(digest); // 将 sha1 加密后的字符串与 signature 进行对比 // return signature; // } catch (NoSuchAlgorithmException e) { // e.printStackTrace(); // } // return null; // } // // /** // * 将字节数组转换为十六进制字符串 // * // * @param byteArray 数据 // * @return // */ // private static String byteToStr(byte[] byteArray) { // StringBuilder digest = new StringBuilder(); // for (byte b : byteArray) { // digest.append(byteToHexStr(b)); // } // // return digest.toString(); // } // // /** // * 将字节转换为十六进制字符串 // * // * @param dataByte 数据 // * @return // */ // private static String byteToHexStr(byte dataByte) { // char[] digit = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'}; // char[] tempArr = new char[2]; // tempArr[0] = digit[(dataByte >>> 4) & 0X0F]; // tempArr[1] = digit[dataByte & 0X0F]; // return new String(tempArr); // } }