微信公众号发送模板消息

1、添加模板消息插件
      登录微信公众平台,点击添加插件,把模板消息添加到功能中
添加插件
2、添加我的模板

点击模板消息之后呢会出现我的模板和模板库,我们点击模板库在模板库中选择自己想要的模板或者提交申请自己新建的模板(点击完善模板库),微信要审核比较慢,一个月只能提交3次,模板库就没有限制

点击详情,添加即可

添加之后就可以在我的模板库中看到你添加的模板,点击详情


可以看到模板ID和模板需要的参数
3、请求接口发送模板消息

点击模板消息文档可以看到微信提供的文档,查看需要请求的接口


需要一个参数access_token

继续看需要封装的参数,是一个json

{
    "touser": "OPENID",
    "template_id": "ngqIpbwh8bUfcSsECmogfXcV14J0tQlEpBO27izEYtY",
    "url": "http://weixin.qq.com/download",
    "topcolor": "#FF0000",
    "data": {
        "User": {
            "value": "黄先生",
            "color": "#173177"
        },
        "Date": {
            "value": "06月07日 19时24分",
            "color": "#173177"
        },
        "CardNumber": {
            "value": "0426",
            "color": "#173177"
        },
        "Type": {
            "value": "消费",
            "color": "#173177"
        },
        "Money": {
            "value": "人民币260.00元",
            "color": "#173177"
        },
        "DeadTime": {
            "value": "06月07日19时24分",
            "color": "#173177"
        },
        "Left": {
            "value": "6504.09",
            "color": "#173177"
        }
    }
}

构建发送消息模板对象

/** 跟上图json对应 */
public class WechatTemplateReq {
    /**  openId */
    private String touser;
    /** 模板Id */
    private String template_id;
    /** 跳转url */
    private String url;
    /** 参数 key为参数名 --- value为参数值和颜色 */
    private Map data;
}
public class FirstBean {
    /** 值 */
    private String value;
    /** 颜色 */
    private String color;
}

发送请求

//导入需要发送请求的jar包
  
       org.apache.httpcomponents
       httpclient
       4.5.2
  
public String sendTemplateMessage(){
    //自己替换成自己项目的accessToken,具体可参照微信的获取accesstoken的方法
    String accessToken = "";
    //替换成自己公众号用户的openId
    String openId = "";
    //自己的模板Id
    String templateId = "";
    //点击模板之后跳转的地址
    String toUrl = "";
    //拼接url
    String url= "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=%s";
    String requestUrlWithToken = String.format(url, accessToken);
    //构建模板对象
    WechatTemplateReq wechatTemplateReq = new WechatTemplateReq();
    wechatTemplateReq.setTouser(openId);
    wechatTemplateReq.setTemplate_id(templateId);
    wechatTemplateReq.setUrl(toUrl);
    Map map = new HashMap<>(5);
    map.put("first",new FirstBean("模板头部参数","#173177"));
    map.put("keyword1",new FirstBean("模板key1参数","#173177"));
    map.put("keyword2",new FirstBean("模板key2参数","#173177"));
    map.put("keyword3",new FirstBean("模板key3参数","#173177"));
    map.put("remark",new FirstBean("模板注释参数","#173177"));
    wechatTemplateReq.setData(map);
    //转化为json
    String body = JsonUtils.jsonFromObject(wechatTemplateReq);
    //发送模板消息
    String result = HttpRequestUtils.httpPostJson(requestUrlWithToken, body);
    logger.info("向公众号发送模板消息返回值httpPostJson result:{}", result);
}
//发送消息工具类
public static String httpPostJson(String url, String jsonParam) {
        HttpPost method = new HttpPost(url);
        String response = "";
        if (null != jsonParam) {
            StringEntity entity = new StringEntity(jsonParam, "utf-8");
            entity.setContentEncoding("UTF-8");
            entity.setContentType("application/json");
            method.setEntity(entity);
        }
        try (CloseableHttpClient client = HttpClients.createDefault();
                CloseableHttpResponse result = client.execute(method)) {
            url = URLDecoder.decode(url, "UTF-8");
            /** 请求发送成功,并得到响应 **/
            if (result.getStatusLine().getStatusCode() == 200) {
                try {
                    /** 读取服务器返回过来的json字符串数据 **/
                    response = EntityUtils.toString(result.getEntity());
                    logger.debug("response from url:{} ,response:{}", url, response);
                } catch (Exception e) {
                    logger.error("post请求提交异常:" + url, e);
                }
            } else {
                logger.error("Request url:" + url + ",and response:" + result.toString());
            }
        } catch (IOException e) {
            logger.error("post请求提交失败:" + url, e);
        }

        return response;
    }

你可能感兴趣的:(微信公众号发送模板消息)