在Java中,微信公众号推送模板消息主要涉及到与微信服务器进行交互,这通常是通过微信的API接口来实现的。模板消息是微信公众号向用户发送的一种特殊消息类型,它允许开发者按照预定的模板向用户发送通知或提醒。以下是一个基本的步骤和示例代码,展示如何在Java中通过微信公众号API发送模板消息。

准备工作
  1. 注册微信公众号:首先,需要在微信公众平台注册一个公众号,并获取到必要的凭证,包括AppIDAppSecret
  2. 获取access_tokenaccess_token是公众号的全局唯一接口调用凭据,公众号调用各接口时都需使用access_token。开发者需要进行妥善保存。access_token的获取可以通过微信提供的API使用AppIDAppSecret来获取。
  3. 设置模板:在微信公众平台设置模板消息,并获取模板ID(template_id)。
发送模板消息

以下是一个使用Java发送模板消息的示例代码,这里假设已经有了access_tokentemplate_id

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

import com.alibaba.fastjson.JSONObject;

public class WeChatTemplateMessageSender {

    // 发送模板消息
    public static void sendTemplateMessage(String accessToken, String templateId, String toUserOpenId, JSONObject data) {
        String url = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + accessToken;

        JSONObject json = new JSONObject();
        json.put("touser", toUserOpenId);
        json.put("template_id", templateId);
        json.put("url", "https://www.example.com"); // 跳转链接(非必须)
        json.put("data", data);

        try {
            URL urlObj = new URL(url);
            HttpURLConnection con = (HttpURLConnection) urlObj.openConnection();
            con.setDoOutput(true);
            con.setDoInput(true);
            con.setUseCaches(false);
            con.setRequestMethod("POST");
            con.setRequestProperty("Content-Type", "application/json");

            try (OutputStream os = con.getOutputStream()) {
                byte[] input = json.toJSONString().getBytes("utf-8");
                os.write(input, 0, input.length);
            }

            try (BufferedReader br = new BufferedReader(new InputStreamReader(con.getInputStream(), "utf-8"))) {
                StringBuilder response = new StringBuilder();
                String responseLine = null;
                while ((responseLine = br.readLine()) != null) {
                    response.append(responseLine.trim());
                }
                System.out.println(response.toString());
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        String accessToken = "YOUR_ACCESS_TOKEN";
        String templateId = "YOUR_TEMPLATE_ID";
        String toUserOpenId = "USER_OPEN_ID";

        JSONObject data = new JSONObject();
        data.put("first", new JSONObject().put("value", "您的快递已发货"));
        data.put("keyword1", new JSONObject().put("value", "快递单号"));
        data.put("keyword2", new JSONObject().put("value", "123456789"));
        data.put("keyword3", new JSONObject().put("value", "2023-01-01 12:00:00"));
        data.put("remark", new JSONObject().put("value", "如有疑问,请联系客服。"));

        sendTemplateMessage(accessToken, templateId, toUserOpenId, data);
    }
}
  • 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.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
注意事项
  • 替换YOUR_ACCESS_TOKENYOUR_TEMPLATE_IDUSER_OPEN_ID为实际的值。
  • data字段的键(如firstkeyword1等)必须与在微信公众平台设置的模板中的占位符名称相匹配。
  • 确保服务器IP地址已添加到微信公众平台的IP白名单中,否则将无法发送模板消息。
  • 模板消息发送频率有限制,请遵循微信官方规定。

以上就是使用Java发送微信公众号模板消息的基本步骤和示例代码。