微信公众号发送模板消息

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<String, FirstBean> data;
}
public class FirstBean {
    /** 值 */
    private String value;
    /** 颜色 */
    private String color;
}

发送请求

//导入需要发送请求的jar包
  <dependency>
       <groupId>org.apache.httpcomponents</groupId>
       <artifactId>httpclient</artifactId>
       <version>4.5.2</version>
  </dependency>
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<String,FirstBean> 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;
    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,367评论 6 512
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,959评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,750评论 0 357
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,226评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,252评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,975评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,592评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,497评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,027评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,147评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,274评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,953评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,623评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,143评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,260评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,607评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,271评论 2 358

推荐阅读更多精彩内容