微信公众号发送模板消息

模板消息结果如下:

第一步:在微信公众号,增加模板消息

模板消息中使用的模板ID

第二步

组装模板需要的消息:

根据上边的消息内容组装消息,创建下面三个实体类:

第一个实体类:TemplateMessage

public class TemplateMessage {

    /**
     * 微信的openId
     */
    private String touser;
    /**
     * 消息模板ID
     */
    private String template_id;
    /**
     * 模板数据封装实体
     */
    private Data data;

    
    get/set方法省略
}

第二个实体类:data

public class Data {

    private Content first;
    private Content keyword1;
    private Content keyword2;
    private Content remark;

    get/set方法省略
}

第三个试题类:Content

public class Content {
    //消息内容
    private String value;
    //消息字体颜色
    private String color;

    get/set 方法省略
}

第三:发送模板消息的接口为:

打开文档”发送模板消息”
获得发送模板的接口地址:https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=ACCESS_TOKEN

使用POST的方式来发送,并且把模板消息的数据以json数据的格式传递到该接口。

我们先来看看json里面的参数主要有哪些?

实际上,必传的只有 touser接收者,template_id模板id,data模板数据这3个参数,其他的可以不传,如果传了就会有相应的跳转,比如跳转至指定url,或者跳转至小程序。

准备好的json数据:


{
       "touser":"OPENID",
       "template_id":"QI4JojaGvL9-5ynjwFwOSPqH2eWXHpr7ZeseysefKqc",
       "data":{
               "first": {
                   "value":"作业完成情况统计",
                   "color":"#173177"
               },
               "keyword1":{
                   "value":"模拟试题1",
                   "color":"#173177"
               },
               "keyword2": {
                   "value":"2019年4月8日 15:36",
                   "color":"#173177"
               },
            
               "remark":{
                   "value":"完成作业学生:李四,未完成作业学生:张三,赵六!",
                   "color":"#173177"
               }
       }


发送和组装数据代码如下:

/**
     * 发送作业完成情况
     *
     * @return
     */
    @Override
    public JsonResult sendHomeworkFinishStatus(String userId, Integer homeworkId) {
        try {
           
            String openId = userWechat.getWechatOpenid();
            TemplateMessage templateMessage = new TemplateMessage();
            templateMessage.setTouser( openId );
            templateMessage.setTemplate_id( templateId );

            Data data = getTemplateData( examHomework );
            templateMessage.setData( data );

            //将封装的数据转换为json
            String jsonString = JSON.toJSONString( templateMessage );
            //发送模板消息
            String accessToken = this.getAccessToken();
            String url = Send_Template_URL.replace( "ACCESS_TOKEN", accessToken );

            //调用接口进行发送
            try {
                String resultStr = HttpUtil.doPost( url, jsonString );
                return JsonResult.success( resultStr );
            } catch (Exception e) {
                e.printStackTrace();
                return JsonResult.error( new CodeMsg( -1, "调用微信接口失败" ) );
            }

        } catch (Exception ex) {
            return JsonResult.error( new CodeMsg( -1, "发送消息失败" ) );
        }


    }
    //获取消息模板的数据
    private Data getTemplateData(ExamHomework examHomework) {
        //设置模板标题
        Content first = new Content();
        first.setValue( "练习完成情况统计" );
        first.setColor( "#173177" );
        //设置作业名称
        Content keyword1 = new Content();
        keyword1.setValue( “模拟测试题1” );
        keyword1.setColor( "#173177" );
        //设置完成时间
        Content keyword2 = new Content();
        keyword2.setValue(“2019年4月8日 15:36”);
        keyword2.setColor( "#173177" );
        //设置remark
        Content remark = new Content();
        remark.setValue( “完成作业学生:李四,未完成作业学生:张三,赵六” );
        remark.setColor( "#173177" );

        //创建模板信息数据对象
        Data data = new Data();
        data.setFirst( first );
        data.setKeyword1( keyword1 );
        data.setKeyword2( keyword2 );
        data.setRemark( remark );

        return data;
    }

doPost方法:

/**
     * post请求(用于请求json格式的参数)
     *
     * @param url
     * @param params
     * @return
     */
    public static String doPost(String url, String params) throws Exception {

        CloseableHttpClient httpclient = HttpClients.createDefault();
        HttpPost httpPost = new HttpPost( url );// 创建httpPost
        httpPost.setHeader( "Accept", "application/json" );
        httpPost.setHeader( "Content-Type", "application/json" );
        String charSet = "UTF-8";
        StringEntity entity = new StringEntity( params, charSet );
        httpPost.setEntity( entity );
        CloseableHttpResponse response = null;

        try {

            response = httpclient.execute( httpPost );
            StatusLine status = response.getStatusLine();
            int state = status.getStatusCode();
            if (state == HttpStatus.SC_OK) {
                HttpEntity responseEntity = response.getEntity();
                String jsonString = EntityUtils.toString( responseEntity );
                return jsonString;
            } else {
                logger.error( "请求返回:" + state + "(" + url + ")" );
            }
        } finally {
            if (response != null) {
                try {
                    response.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            try {
                httpclient.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return null;
    }

猜你喜欢

转载自blog.csdn.net/xzj80927/article/details/89097224