企业jsapi_ticket,java举例
在企业微信开发中,使用 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 和应用 Secret
private 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_token
String accessToken = getAccessToken();
System.out.println("access_token: " + accessToken);
// 2. 获取 jsapi_ticket
String 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"; // 当前页面的 URL
String 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 的获取和签名生成。
