Java调用微信公众号群发接口

微信公众号是目前非常受欢迎的社交媒体平台之一,许多企业和个人都通过微信公众号来传播信息和与用户互动。其中,群发接口是一项重要功能,允许公众号管理员向关注者群发消息。

本文将介绍如何使用Java调用微信公众号群发接口,并提供相应的代码示例。

准备工作

在开始之前,需要完成以下准备工作:

  1. 获取微信公众号的开发者账号,包括AppID和AppSecret。
  2. 在微信公众平台中配置服务器,获取接口调用凭证。

调用群发接口

Java调用微信公众号群发接口的核心步骤如下:

  1. 获取接口调用凭证(access_token)。
  2. 构造群发消息的JSON数据。
  3. 调用群发接口发送消息。

1. 获取接口调用凭证

首先,我们需要通过微信公众平台提供的API获取接口调用凭证(access_token)。access_token是访问微信公众平台接口的唯一凭证,有效期为2小时。

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;

public class AccessTokenUtil {
    private static final String ACCESS_TOKEN_URL = "

    public static String getAccessToken(String appId, String appSecret) throws IOException {
        String url = ACCESS_TOKEN_URL.replace("APPID", appId).replace("APPSECRET", appSecret);
        URL obj = new URL(url);
        HttpURLConnection con = (HttpURLConnection) obj.openConnection();
        con.setRequestMethod("GET");

        int responseCode = con.getResponseCode();
        if (responseCode == HttpURLConnection.HTTP_OK) { // 请求成功
            BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
            String inputLine;
            StringBuilder response = new StringBuilder();

            while ((inputLine = in.readLine()) != null) {
                response.append(inputLine);
            }
            in.close();
            return response.toString();
        } else {
            throw new IOException("获取access_token失败。");
        }
    }
}

2. 构造群发消息的JSON数据

在调用群发接口之前,需要构造符合微信公众号接口要求的JSON数据,包括接收者、消息类型和消息内容。

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.JsonNodeFactory;
import com.fasterxml.jackson.databind.node.ObjectNode;

public class MessageUtil {
    public static String buildTextMessage(String content, String[] openIds) {
        ObjectMapper objectMapper = new ObjectMapper();
        ObjectNode root = objectMapper.createObjectNode();
        ObjectNode filter = root.putObject("filter");
        filter.put("is_to_all", false);
        filter.putArray("openid").addAll(Arrays.asList(openIds));
        ObjectNode text = root.putObject("text");
        text.put("content", content);
        root.put("msgtype", "text");
        return root.toString();
    }
}

3. 调用群发接口发送消息

最后,使用获取的access_token和构造的JSON数据调用群发接口发送消息。

import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;

public class MessageSender {
    private static final String SEND_MESSAGE_URL = "

    public static void sendMessage(String accessToken, String jsonMessage) throws IOException {
        String url = SEND_MESSAGE_URL.replace("ACCESS_TOKEN", accessToken);
        URL obj = new URL(url);
        HttpURLConnection con = (HttpURLConnection) obj.openConnection();
        con.setRequestMethod("POST");
        con.setRequestProperty("Content-Type", "application/json;charset=UTF-8");
        con.setDoOutput(true);

        DataOutputStream wr = new DataOutputStream(con.getOutputStream());
        wr.writeBytes(jsonMessage);
        wr.flush();
        wr.close();

        int responseCode = con.getResponseCode();
        if (responseCode == HttpURLConnection.HTTP_OK) { // 请求成功
            BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
            String inputLine;
            StringBuilder response = new StringBuilder();

            while ((inputLine = in.readLine()) != null) {
                response.append(inputLine);
            }
            in.close();
            System.out.println(response.toString());
        } else {
            throw new IOException("发送群发消息失败。");
        }
    }
}
``