在企業微信開發中,使用 Java 獲取?jsapi_ticket
?并生成簽名的步驟如下。以下是完整的 Java 示例代碼。
1. 獲取?jsapi_ticket
?的流程
-
獲取?
access_token
。 -
使用?
access_token
?獲取?jsapi_ticket
。 -
使用?
jsapi_ticket
?生成簽名(signature
)。
2. Java 示例代碼
以下是一個完整的 Java 示例,展示如何獲取?jsapi_ticket
?并生成簽名。
依賴
確保項目中引入了以下依賴(如使用 Maven):
xml
復制
<dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId><version>4.5.13</version> </dependency> <dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.83</version> </dependency>
運行 HTML
代碼實現
java
復制
import org.apache.http.HttpEntity; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.util.EntityUtils; import com.alibaba.fastjson.JSONObject;import java.io.IOException; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.util.UUID;public class WeChatJsApiTicket {// 獲取 access_token 的接口地址private static final String ACCESS_TOKEN_URL = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=%s&corpsecret=%s";// 獲取 jsapi_ticket 的接口地址private static final String JSAPI_TICKET_URL = "https://qyapi.weixin.qq.com/cgi-bin/get_jsapi_ticket?access_token=%s";// 企業 ID 和應用 Secretprivate static final String CORP_ID = "YOUR_CORP_ID";private static final String CORP_SECRET = "YOUR_CORP_SECRET";/*** 發送 HTTP GET 請求*/private static String httpGet(String url) throws IOException {try (CloseableHttpClient httpClient = HttpClients.createDefault()) {HttpGet httpGet = new HttpGet(url);try (CloseableHttpResponse response = httpClient.execute(httpGet)) {HttpEntity entity = response.getEntity();return EntityUtils.toString(entity);}}}/*** 獲取 access_token*/public static String getAccessToken() throws IOException {String url = String.format(ACCESS_TOKEN_URL, CORP_ID, CORP_SECRET);String response = httpGet(url);JSONObject json = JSONObject.parseObject(response);return json.getString("access_token");}/*** 獲取 jsapi_ticket*/public static String getJsApiTicket(String accessToken) throws IOException {String url = String.format(JSAPI_TICKET_URL, accessToken);String response = httpGet(url);JSONObject json = JSONObject.parseObject(response);return json.getString("ticket");}/*** 生成簽名*/public static String generateSignature(String jsapiTicket, String noncestr, String timestamp, String url) {String string = "jsapi_ticket=" + jsapiTicket +"&noncestr=" + noncestr +"×tamp=" + timestamp +"&url=" + url;try {MessageDigest digest = MessageDigest.getInstance("SHA-1");digest.update(string.getBytes());byte[] messageDigest = digest.digest();StringBuilder hexString = new StringBuilder();for (byte b : messageDigest) {String shaHex = Integer.toHexString(b & 0xFF);if (shaHex.length() < 2) {hexString.append(0);}hexString.append(shaHex);}return hexString.toString();} catch (NoSuchAlgorithmException e) {throw new RuntimeException("SHA-1 algorithm not found");}}public static void main(String[] args) throws IOException {// 1. 獲取 access_tokenString accessToken = getAccessToken();System.out.println("access_token: " + accessToken);// 2. 獲取 jsapi_ticketString jsapiTicket = getJsApiTicket(accessToken);System.out.println("jsapi_ticket: " + jsapiTicket);// 3. 生成簽名String noncestr = UUID.randomUUID().toString();String timestamp = Long.toString(System.currentTimeMillis() / 1000);String url = "https://example.com"; // 當前頁面的 URLString signature = generateSignature(jsapiTicket, noncestr, timestamp, url);System.out.println("noncestr: " + noncestr);System.out.println("timestamp: " + timestamp);System.out.println("signature: " + signature);} }
3. 代碼說明
-
獲取?
access_token
:-
使用企業 ID (
CORP_ID
) 和應用 Secret (CORP_SECRET
) 調用企業微信 API 獲取?access_token
。
-
-
獲取?
jsapi_ticket
:-
使用?
access_token
?調用企業微信 API 獲取?jsapi_ticket
。
-
-
生成簽名:
-
使用?
jsapi_ticket
、隨機字符串 (noncestr
)、時間戳 (timestamp
) 和當前頁面的 URL 生成簽名 (signature
)。
-
-
SHA-1 加密:
-
使用 Java 的?
MessageDigest
?類對字符串進行 SHA-1 加密。
-
4. 輸出示例
運行代碼后,輸出如下:
復制
access_token: YOUR_ACCESS_TOKEN jsapi_ticket: YOUR_JSAPI_TICKET noncestr: 6a8e5f4e-3b1a-4c2d-9f8e-1a2b3c4d5e6f timestamp: 1698765432 signature: 1f3a5e7b9c2d4f6a8b0c1d2e3f4a5b6c7d8e9f0
5. 注意事項
-
緩存?
access_token
?和?jsapi_ticket
:-
由于?
access_token
?和?jsapi_ticket
?的有效期均為 7200 秒(2 小時),建議在服務器端緩存它們,避免頻繁調用接口。
-
-
URL 參數:
-
生成簽名時,URL 必須是當前頁面的完整 URL(不包括?
#
?及其后面部分)。
-
-
安全性:
-
access_token
?和?jsapi_ticket
?是敏感信息,不要泄露給客戶端或第三方。
-
通過以上代碼,你可以在 Java 中實現企業微信?jsapi_ticket
?的獲取和簽名生成。