You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
			
				
					217 lines
				
				7.3 KiB
			
		
		
			
		
	
	
					217 lines
				
				7.3 KiB
			| 
								 
											3 years ago
										 
									 | 
							
								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<String, Object> getWxConfig(String url) {
							 | 
						||
| 
								 | 
							
								//        Map<String, Object> 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);
							 | 
						||
| 
								 | 
							
								//    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								}
							 |