Java实现订阅号发送消息
时间: 2023-11-13 16:16:00 浏览: 35
要使用Java实现订阅号发送消息,你需要先获取到订阅号的access_token,然后通过微信公众号提供的接口向指定用户发送消息。
以下是一个示例代码,可以通过Java实现获取access_token和发送消息的功能:
```java
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
public class WechatSubscription {
// 订阅号的appID和appSecret
private static final String APP_ID = "YOUR_APP_ID";
private static final String APP_SECRET = "YOUR_APP_SECRET";
// 获取access_token的接口地址
private static final String ACCESS_TOKEN_URL = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + APP_ID + "&secret=" + APP_SECRET;
// 发送消息的接口地址
private static final String SEND_MESSAGE_URL = "https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=";
// 发送消息的JSON格式
private static final String MESSAGE_JSON = "{\n" +
" \"touser\": \"%s\",\n" + // 用户的openid
" \"msgtype\": \"text\",\n" +
" \"text\": {\n" +
" \"content\": \"%s\"\n" + // 发送的消息内容
" }\n" +
"}";
public static void main(String[] args) {
String accessToken = getAccessToken();
if (accessToken != null) {
String openid = "USER_OPENID"; // 用户的openid
String message = "Hello world!"; // 发送的消息内容
sendMessage(accessToken, openid, message);
}
}
// 获取access_token
private static String getAccessToken() {
String result = null;
HttpURLConnection connection = null;
try {
URL url = new URL(ACCESS_TOKEN_URL);
connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.setDoOutput(true);
connection.setDoInput(true);
connection.setUseCaches(false);
connection.connect();
InputStream inputStream = connection.getInputStream();
InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "utf-8");
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
result = bufferedReader.readLine();
bufferedReader.close();
inputStreamReader.close();
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (connection != null) {
connection.disconnect();
}
}
return result;
}
// 发送消息
private static void sendMessage(String accessToken, String openid, String message) {
String url = SEND_MESSAGE_URL + accessToken;
String json = String.format(MESSAGE_JSON, openid, message);
HttpURLConnection connection = null;
try {
URL urlObj = new URL(url);
connection = (HttpURLConnection) urlObj.openConnection();
connection.setRequestMethod("POST");
connection.setDoOutput(true);
connection.setDoInput(true);
connection.setUseCaches(false);
connection.setRequestProperty("Content-Type", "application/json");
connection.connect();
OutputStream outputStream = connection.getOutputStream();
outputStream.write(json.getBytes());
outputStream.flush();
outputStream.close();
InputStream inputStream = connection.getInputStream();
InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "utf-8");
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
String result = bufferedReader.readLine();
bufferedReader.close();
inputStreamReader.close();
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (connection != null) {
connection.disconnect();
}
}
}
}
```
以上代码中,getAccessToken()方法用于获取access_token,sendMessage()方法用于发送消息。你需要将代码中的YOUR_APP_ID、YOUR_APP_SECRET和USER_OPENID替换为实际的值。