要在Java中实现向微信公众号推送模板消息,可以使用微信公众平台提供的API。以下是一个基本的步骤概述和示例代码。

1. 获取Access Token

在调用微信API之前,首先需要获取 access_token。这个令牌有效期为2小时,需要定期刷新。

public String getAccessToken(String appId, String appSecret) {
    String url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + appId + "&secret=" + appSecret;
    String result = sendGetRequest(url);
    JSONObject jsonObject = new JSONObject(result);
    return jsonObject.getString("access_token");
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
2. 构建模板消息内容

根据你希望发送的内容构建模板消息的JSON数据。

public String buildTemplateMessage(String toUser, String templateId, String url, Map<String, String> data) {
    JSONObject messageJson = new JSONObject();
    messageJson.put("touser", toUser);
    messageJson.put("template_id", templateId);
    messageJson.put("url", url);

    JSONObject dataJson = new JSONObject();
    for (Map.Entry<String, String> entry : data.entrySet()) {
        JSONObject valueJson = new JSONObject();
        valueJson.put("value", entry.getValue());
        valueJson.put("color", "#173177");  // 默认颜色,可以自定义
        dataJson.put(entry.getKey(), valueJson);
    }

    messageJson.put("data", dataJson);
    return messageJson.toString();
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
3. 发送模板消息

使用 access_token 和构建的模板消息,通过POST请求发送消息。

public String sendTemplateMessage(String accessToken, String messageJson) {
    String url = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + accessToken;
    String result = sendPostRequest(url, messageJson);
    return result;
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
4. HTTP请求方法

你可以使用以下简单的HTTP请求方法来发送GET和POST请求。

public String sendGetRequest(String url) {
    try {
        HttpURLConnection connection = (HttpURLConnection) new URL(url).openConnection();
        connection.setRequestMethod("GET");
        connection.connect();
        BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
        String inputLine;
        StringBuilder content = new StringBuilder();
        while ((inputLine = in.readLine()) != null) {
            content.append(inputLine);
        }
        in.close();
        return content.toString();
    } catch (Exception e) {
        e.printStackTrace();
        return null;
    }
}

public String sendPostRequest(String url, String data) {
    try {
        HttpURLConnection connection = (HttpURLConnection) new URL(url).openConnection();
        connection.setRequestMethod("POST");
        connection.setDoOutput(true);
        OutputStream os = connection.getOutputStream();
        os.write(data.getBytes("UTF-8"));
        os.close();
        BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
        String inputLine;
        StringBuilder content = new StringBuilder();
        while ((inputLine = in.readLine()) != null) {
            content.append(inputLine);
        }
        in.close();
        return content.toString();
    } catch (Exception e) {
        e.printStackTrace();
        return null;
    }
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
5. 完整示例

整合以上步骤,以下是一个完整的示例:

public class WeChatTemplateMessage {

    private static final String APP_ID = "你的AppId";
    private static final String APP_SECRET = "你的AppSecret";

    public static void main(String[] args) {
        WeChatTemplateMessage weChat = new WeChatTemplateMessage();
        String accessToken = weChat.getAccessToken(APP_ID, APP_SECRET);

        Map<String, String> data = new HashMap<>();
        data.put("first", "您好,您有新的通知");
        data.put("keyword1", "关键字1");
        data.put("keyword2", "关键字2");
        data.put("remark", "点击查看详情");

        String messageJson = weChat.buildTemplateMessage("用户OpenId", "模板Id", "http://example.com", data);
        String result = weChat.sendTemplateMessage(accessToken, messageJson);

        System.out.println("发送结果:" + result);
    }

    // 上述方法都在此处定义...
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
注意事项
  • 在实际生产环境中,需要定期刷新 access_token,并妥善处理错误。
  • 微信公众平台可能有消息频率限制,需要注意控制发送频率。

java 微信公众号推送模版消息_HTTP