小程序之java实现模板消息推送

话不多说,直接上代码

实体类SendTemplateMessage 

public class SendTemplateMessage{
    private String touser; //接收者(用户)的 openid
    private String template_id; //所需下发的模板消息的id
    private String page; //点击模板卡片后的跳转页面,仅限本小程序内的页面。支持带参数,(示例index?foo=bar)。该字段不填则模板无跳转。
    private String form_id; //表单提交场景下,为 submit 事件带上的 formId;支付场景下,为本次支付的 prepay_id
    private Map data; //模板内容,不填则下发空模板
    private String emphasis_keyword; //模板需要放大的关键词,不填则默认无放大

    get、set方法

}

实体类TemplateData

public class TemplateData {
	private String value;
    public String getValue() {
        return value;
    }
    public void setValue(String value) {
        this.value = value;
    }
    public TemplateData(String value) {
        this.value = value;
    }
    public TemplateData() {
    }
}

发送请求HttpRequest类

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.URL;
import java.net.URLConnection;
import java.util.List;
import java.util.Map;

public class HttpRequest {

    public static void main(String[] args) {
        //发送 GET 请求
        String s=HttpRequest.sendGet("http://v.qq.com/x/cover/kvehb7okfxqstmc.html?vid=e01957zem6o", "");
        System.out.println(s);

//        //发送 POST 请求
//        String sr=HttpRequest.sendPost("http://www.toutiao.com/stream/widget/local_weather/data/?city=%E4%B8%8A%E6%B5%B7", "");
//        JSONObject json = JSONObject.fromObject(sr);
//        System.out.println(json.get("data"));
    }

    /**
     * 向指定URL发送GET方法的请求
     *
     * @param url
     *            发送请求的URL
     * @param param
     *            请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
     * @return URL 所代表远程资源的响应结果
     */
    public static String sendGet(String url, String param) {
        String result = "";
        BufferedReader in = null;
        try {
            String urlNameString = url + "?" + param;
            URL realUrl = new URL(urlNameString);
            // 打开和URL之间的连接
            URLConnection connection = realUrl.openConnection();
            // 设置通用的请求属性
            connection.setRequestProperty("accept", "*/*");
            connection.setRequestProperty("connection", "Keep-Alive");
            connection.setRequestProperty("user-agent",
                    "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
            // 建立实际的连接
            connection.connect();
            // 获取所有响应头字段
            Map> map = connection.getHeaderFields();
            // 遍历所有的响应头字段
            for (String key : map.keySet()) {
                System.out.println(key + "--->" + map.get(key));
            }
            // 定义 BufferedReader输入流来读取URL的响应
            in = new BufferedReader(new InputStreamReader(
                    connection.getInputStream()));
            String line;
            while ((line = in.readLine()) != null) {
                result += line;
            }
        } catch (Exception e) {
            System.out.println("发送GET请求出现异常!" + e);
            e.printStackTrace();
        }
        // 使用finally块来关闭输入流
        finally {
            try {
                if (in != null) {
                    in.close();
                }
            } catch (Exception e2) {
                e2.printStackTrace();
            }
        }
        return result;
    }

    /**
     * 向指定 URL 发送POST方法的请求
     *
     * @param url
     *            发送请求的 URL
     * @param param
     *            请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
     * @return 所代表远程资源的响应结果
     */
    public static String sendPost(String url, String param) {
        PrintWriter out = null;
        BufferedReader in = null;
        String result = "";
        try {
            URL realUrl = new URL(url);
            // 打开和URL之间的连接
            URLConnection conn = realUrl.openConnection();
            // 设置通用的请求属性
            conn.setRequestProperty("accept", "*/*");
            conn.setRequestProperty("connection", "Keep-Alive");
            conn.setRequestProperty("user-agent",
                    "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
            // 发送POST请求必须设置如下两行
            conn.setDoOutput(true);
            conn.setDoInput(true);
            // 获取URLConnection对象对应的输出流
            out = new PrintWriter(conn.getOutputStream());
            // 发送请求参数
            out.print(param);
            // flush输出流的缓冲
            out.flush();
            // 定义BufferedReader输入流来读取URL的响应
            in = new BufferedReader(
                    new InputStreamReader(conn.getInputStream()));
            String line;
            while ((line = in.readLine()) != null) {
                result += line;
            }
        } catch (Exception e) {
            System.out.println("发送 POST 请求出现异常!"+e);
            e.printStackTrace();
        }
        //使用finally块来关闭输出流、输入流
        finally{
            try{
                if(out!=null){
                    out.close();
                }
                if(in!=null){
                    in.close();
                }
            }
            catch(IOException ex){
                ex.printStackTrace();
            }
        }
        return result;
    }
}

获取accesstoken 

public class GetAccessToken {
	public static final String grant_type = "client_credential";
	public static final String APPID = "****************";
	public static final String APPSECRET = "******************************";
	
	public static String getAccessToken(){
		String params = "grant_type=" + grant_type + "&secret=" + APPSECRET + "&appid="+ APPID;
		String sendGet = HttpRequest.sendGet("https://api.weixin.qq.com/cgi-bin/token", params);
	    // 解析相应内容(转换成json对象)  
		JSONObject ob = JSONObject.fromObject(sendGet);
        //拿到accesstoken 
	    String accesstoken = (String) ob.get("access_token");
	    return accesstoken;
	}
}

功能实现代码

public class SendMessage {
	
	public static final String SEND_TEMPLATE_MESSAGE = "https://api.weixin.qq.com/cgi-bin/message/wxopen/template/send?access_token=";
	
	public static JSONObject sendTemplateMessage(String touser,String template_id,String page,String formid,Map map){
	    String accesstoken = GetAccessToken.getAccessToken();
        SendTemplateMessage sendTemplateMessage = new SendTemplateMessage();
        //拼接数据
        sendTemplateMessage.setTouser(touser);
        sendTemplateMessage.setTemplate_id(template_id);
        sendTemplateMessage.setPage(page);
        sendTemplateMessage.setForm_id(formid);
        sendTemplateMessage.setData(map);
        sendTemplateMessage.setEmphasis_keyword("");
        String json =  JSONObject.toJSONString(sendTemplateMessage);
        String ret = HttpRequest.sendPost(SEND_TEMPLATE_MESSAGE+accesstoken, json);
        return JSON.parseObject(ret);
    }

	public static void main(String[] args) {
		Map map = new HashMap<>();
		map.put("keyword1",new TemplateDataX("先生"));
		map.put("keyword2",new TemplateDataX("2019年8月9日16:33:44"));
		map.put("keyword3",new TemplateDataX("中国"));
		map.put("keyword4",new TemplateDataX("88888888"));
		JSONObject js = sendTemplateMessage("关注小程序的openid", "消息模板id", "跳转连接页", "formid", map);
	}
}

OK,大功告成!!!有哪里不对的不明白的随时留言

你可能感兴趣的:(小程序)