From 7f302004e78ca5220a4f88a7fab843964a18739a Mon Sep 17 00:00:00 2001 From: Pu Zhibing <393733352@qq.com> Date: 星期一, 17 三月 2025 18:35:17 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/dev-2.0' into dev-2.0 --- springcloud_k8s_panzhihuazhihuishequ/service_sangeshenbian/src/main/java/com/panzhihua/sangeshenbian/utils/SignatureUtil.java | 99 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 99 insertions(+), 0 deletions(-) diff --git a/springcloud_k8s_panzhihuazhihuishequ/service_sangeshenbian/src/main/java/com/panzhihua/sangeshenbian/utils/SignatureUtil.java b/springcloud_k8s_panzhihuazhihuishequ/service_sangeshenbian/src/main/java/com/panzhihua/sangeshenbian/utils/SignatureUtil.java new file mode 100644 index 0000000..aa67827 --- /dev/null +++ b/springcloud_k8s_panzhihuazhihuishequ/service_sangeshenbian/src/main/java/com/panzhihua/sangeshenbian/utils/SignatureUtil.java @@ -0,0 +1,99 @@ +package com.panzhihua.sangeshenbian.utils; + +import java.io.BufferedReader; +import java.io.InputStreamReader; +import java.net.HttpURLConnection; +import java.net.URL; +import java.nio.charset.StandardCharsets; +import java.security.MessageDigest; +import java.util.Arrays; +import java.util.HashMap; +import java.util.Map; + +public class SignatureUtil { + + private static final String ACCESS_TOKEN_URL = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=%s&secret=%s"; + private static final String JSAPI_TICKET_URL = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=%s&type=jsapi"; + + public static String getAccessToken(String appId, String appSecret) throws Exception { + String url = String.format(ACCESS_TOKEN_URL, appId, appSecret); + URL obj = new URL(url); + HttpURLConnection con = (HttpURLConnection) obj.openConnection(); + con.setRequestMethod("GET"); + + BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream())); + String inputLine; + StringBuffer response = new StringBuffer(); + + while ((inputLine = in.readLine()) != null) { + response.append(inputLine); + } + in.close(); + + Map<String, String> result = parseJson(response.toString()); + return result.get("access_token"); + } + + + public static String getJsApiTicket(String accessToken) throws Exception { + String url = String.format(JSAPI_TICKET_URL, accessToken); + URL obj = new URL(url); + HttpURLConnection con = (HttpURLConnection) obj.openConnection(); + con.setRequestMethod("GET"); + + BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream())); + String inputLine; + StringBuffer response = new StringBuffer(); + + while ((inputLine = in.readLine()) != null) { + response.append(inputLine); + } + in.close(); + + Map<String, String> result = parseJson(response.toString()); + return result.get("ticket"); + } + + private static Map<String, String> parseJson(String json) { + // 简单的JSON解析,实际项目中可以使用更强大的库如Jackson或Gson + Map<String, String> map = new HashMap<>(); + String[] keyValuePairs = json.replace("{", "").replace("}", "").split(","); + for (String pair : keyValuePairs) { + String[] entry = pair.split(":"); + map.put(entry[0].trim().replace("\"", ""), entry[1].trim().replace("\"", "")); + } + return map; + } + + + public static String getSignature(String jsapiTicket, String nonceStr, String timestamp, String url) throws Exception { + Map<String, String> params = new HashMap<>(); + params.put("jsapi_ticket", jsapiTicket); + params.put("noncestr", nonceStr); + params.put("timestamp", timestamp); + params.put("url", url); + + String[] keys = params.keySet().toArray(new String[0]); + Arrays.sort(keys); + + StringBuilder sb = new StringBuilder(); + for (String key : keys) { + sb.append(key).append("=").append(params.get(key)).append("&"); + } + sb.deleteCharAt(sb.length() - 1); // Remove the last '&' + + MessageDigest md = MessageDigest.getInstance("SHA-1"); + byte[] hashBytes = md.digest(sb.toString().getBytes(StandardCharsets.UTF_8)); + + StringBuilder hexString = new StringBuilder(); + for (byte b : hashBytes) { + String hex = Integer.toHexString(0xff & b); + if (hex.length() == 1) { + hexString.append('0'); + } + hexString.append(hex); + } + + return hexString.toString(); + } +} \ No newline at end of file -- Gitblit v1.7.1