当前位置: 首页 > news >正文

企业jsapi_ticket,java举例

在企业微信开发中,使用 Java 获取 jsapi_ticket 并生成签名的步骤如下。以下是完整的 Java 示例代码。


1. 获取 jsapi_ticket 的流程

  1. 获取 access_token

  2. 使用 access_token 获取 jsapi_ticket

  3. 使用 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 +
                "&timestamp=" + 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. 代码说明

  1. 获取 access_token:

    • 使用企业 ID (CORP_ID) 和应用 Secret (CORP_SECRET) 调用企业微信 API 获取 access_token

  2. 获取 jsapi_ticket:

    • 使用 access_token 调用企业微信 API 获取 jsapi_ticket

  3. 生成签名:

    • 使用 jsapi_ticket、随机字符串 (noncestr)、时间戳 (timestamp) 和当前页面的 URL 生成签名 (signature)。

  4. 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. 注意事项

  1. 缓存 access_token 和 jsapi_ticket:

    • 由于 access_token 和 jsapi_ticket 的有效期均为 7200 秒(2 小时),建议在服务器端缓存它们,避免频繁调用接口。

  2. URL 参数:

    • 生成签名时,URL 必须是当前页面的完整 URL(不包括 # 及其后面部分)。

  3. 安全性:

    • access_token 和 jsapi_ticket 是敏感信息,不要泄露给客户端或第三方。


通过以上代码,你可以在 Java 中实现企业微信 jsapi_ticket 的获取和签名生成。

相关文章:

  • 软件工程---软件测试
  • 2个12v并联电压是多少
  • 汽车低频发射天线介绍
  • Java进阶——反射机制超全详解
  • 现代前端框架渲染机制深度解析:虚拟DOM到编译时优化
  • 【JavaWeb学习Day20】
  • C++:类和对象(下篇)
  • INMP441数字全向麦克风介绍
  • 《React Hooks 入门与实战》
  • 网络知识点笔记,排查网络丢包问题
  • day02_Java基础
  • C++ 【右值引用】极致的内存管理
  • Kotlin 嵌套类和内部类
  • 链表:struct node *next;为什么用指针,为什么要用自身结构体类型?(通俗易懂)
  • 以太坊基金会换帅,资本市场砸盘
  • 【Java 后端】Restful API 接口
  • dify基础之prompts
  • 【计算机网络】常见tcp/udp对应的应用层协议,端口
  • IO与NIO的区别
  • set 和 map 的左右护卫 【刷题反思】
  • 佛山网站制作网站/北京竞价托管代运营
  • 做网站前/seo关键词选取工具
  • 如何创新网站建设模式/seo快速排名优化方式
  • 网站建设比较好的/资源优化网站排名
  • 一级a做爰片免费网站天天看/wordpress建站公司
  • 网站开发要学什么语言/百度的网址