要在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请求发送消息。
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
,并妥善处理错误。 - 微信公众平台可能有消息频率限制,需要注意控制发送频率。