Java接小程序消息通知

简介

小程序的消息通知功能使得开发者可以向用户发送模板消息、客服消息等。本文将介绍如何使用Java语言接入小程序的消息通知功能,并提供相关代码示例。

准备工作

在开始之前,需要进行一些准备工作:

  1. 在小程序后台中,开通消息推送服务,并获取到小程序的AppID和AppSecret。
  2. 使用Java开发环境,确保已经配置好相关依赖。

获取Access Token

在使用小程序的消息通知功能之前,需要先获取到Access Token。Access Token是小程序与微信服务器之间的通信凭证,每个Access Token的有效期为2小时。

以下是获取Access Token的代码示例:

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;

public class AccessTokenUtil {
    private static final String ACCESS_TOKEN_URL = "
    private static final String APP_ID = "your_app_id";
    private static final String APP_SECRET = "your_app_secret";

    public static String getAccessToken() throws Exception {
        String url = ACCESS_TOKEN_URL + "?grant_type=client_credential&appid=" + APP_ID + "&secret=" + APP_SECRET;
        URL obj = new URL(url);
        HttpURLConnection con = (HttpURLConnection) obj.openConnection();
        con.setRequestMethod("GET");
        int responseCode = con.getResponseCode();
        BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
        String inputLine;
        StringBuffer response = new StringBuffer();
        while ((inputLine = in.readLine()) != null) {
            response.append(inputLine);
        }
        in.close();

        // 解析返回的JSON数据
        Map<String, Object> json = new Gson().fromJson(response.toString(), HashMap.class);
        String accessToken = (String) json.get("access_token");

        return accessToken;
    }
}

在上述代码中,需要将your_app_idyour_app_secret替换为实际的AppID和AppSecret。

发送模板消息

接下来,我们将通过Java代码发送模板消息给用户。模板消息是小程序中的一种消息形式,可以包含固定的模板格式和动态的内容。

以下是发送模板消息的代码示例:

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;

public class TemplateMessageUtil {
    private static final String SEND_TEMPLATE_MESSAGE_URL = "
    private static final String TEMPLATE_ID = "your_template_id";
    private static final String OPEN_ID = "user_open_id";
    
    public static void sendTemplateMessage(String accessToken, String message) throws Exception {
        String url = SEND_TEMPLATE_MESSAGE_URL + accessToken;
        URL obj = new URL(url);
        HttpURLConnection con = (HttpURLConnection) obj.openConnection();
        con.setRequestMethod("POST");
        con.setRequestProperty("Content-Type", "application/json");
        con.setDoOutput(true);

        // 构建消息体
        Map<String, Object> data = new HashMap<>();
        data.put("touser", OPEN_ID);
        data.put("template_id", TEMPLATE_ID);
        data.put("data", message);

        OutputStream os = con.getOutputStream();
        os.write(new Gson().toJson(data).getBytes());
        os.flush();
        os.close();

        int responseCode = con.getResponseCode();
        BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
        String inputLine;
        StringBuffer response = new StringBuffer();
        while ((inputLine = in.readLine()) != null) {
            response.append(inputLine);
        }
        in.close();

        System.out.println(response.toString());
    }
}

在上述代码中,需要将your_template_id替换为实际的模板ID,user_open_id替换为用户的OpenID。另外,message为要发送的消息内容。

示例

现在,我们来演示一下完整的流程,包括获取Access Token和发送模板消息。

public class Main {
    public static void main(String[] args) {
        try {
            // 获取Access Token
            String accessToken = AccessTokenUtil.getAccessToken();

            // 发送模板消息
            String message = "{\"name\":{\"value\":\"John\"},\"age\":{\"value\":\"25\"}}";
            TemplateMessageUtil.sendTemplateMessage(accessToken, message);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

在示例代码中,我们通过调用AccessTokenUtil.getAccessToken()方法获取Access Token,然后将Access Token和消息内容作为参数传递给TemplateMessageUtil.sendTemplateMessage()方法,即可发送模板消息