Java微信公众平台开发之发送模板消息

11 篇文章 0 订阅

模板消息仅用于公众号向用户发送重要的服务通知,只能用于符合其要求的服务场景中,如信用卡刷卡通知,商品购买成功通知等。不支持广告等营销类消息以及其它所有可能对用户造成骚扰的消息。对于一般的服务号而言,模板ID行业之类会事先配置好,所以用代码控制的只有发送了。

准备工作:已通过认证的服务号或者测试公众号

一、使用规则
  • 所有服务号都可以在功能->添加功能插件处看到申请模板消息功能的入口
  • 需要选择公众账号服务所处的2个行业,每月可更改1次所选行业
  • 在所选择行业的模板库中选用已有的模板进行调用
  • 每个账号可以同时使用25个模板
  • 当前每个账号的模板消息的日调用上限为10万次,单个模板没有特殊限制,以公众号MP后台开发者中心页面中标明的数字为准
二、接口文档规范
  • 模板消息调用时主要需要模板ID和模板中各参数的赋值内容
  • 模板中参数内容必须以".DATA"结尾,否则视为保留字
  • 模板保留符号"{{ }}"

测试公众号可以随意定义,正式的必须用模板库中的

三、 封装模板消息

以下是我使用的模板消息示例

[plain]  view plain  copy
 print ?
  1. {{first.DATA}}  
  2. 旅行活动名称:{{keyword1.DATA}}  
  3. 订单金额:{{keyword2.DATA}}  
  4. 旅行时间:{{keyword3.DATA}}  
  5. 参与人数:{{keyword4.DATA}}  
  6. {{remark.DATA}}  

发送模板消息的接口:https://api.weixin.qq.com/cgi-bin/message/template/send (?access_token=ACCESS_TOKEN)

POST数据示例如下:

[html]  view plain  copy
 print ?
  1. {  
  2.      "touser":"OPENID",  
  3.      "template_id":"ngqIpbwh8bUfcSsECmogfXcV14J0tQlEpBO27izEYtY",  
  4.      "url":"http://weixin.qq.com/download",    
  5.      "miniprogram":{  
  6.        "appid":"xiaochengxuappid12345",  
  7.        "pagepath":"index?foo=bar"  
  8.      },            
  9.      "data":{  
  10.              "first": {  
  11.                  "value":"恭喜你购买成功!",  
  12.                  "color":"#173177"  
  13.              },  
  14.              "keynote1":{  
  15.                  "value":"巧克力",  
  16.                  "color":"#173177"  
  17.              },  
  18.              "keynote2": {  
  19.                  "value":"39.8元",  
  20.                  "color":"#173177"  
  21.              },  
  22.              "keynote3": {  
  23.                  "value":"2014年9月22日",  
  24.                  "color":"#173177"  
  25.              },  
  26.              "remark":{  
  27.                  "value":"欢迎再次购买!",  
  28.                  "color":"#173177"  
  29.              }  
  30.      }  
  31.  }  
[java]  view plain  copy
 print ?
  1. package com.phil.wechatmsg.model.template.req;  
  2.   
  3. import java.util.TreeMap;  
  4.   
  5. import com.phil.common.annotation.NotRequire;  
  6.   
  7. /** 
  8.  * 模板消息 
  9.  * @author phil 
  10.  * @date 2017年7月2日 
  11.  * 
  12.  */  
  13. public class WechatTemplateMsg {  
  14.   
  15.     private String touser; //接收者openid  
  16.   
  17.     private String template_id; //模板ID  
  18.   
  19.     @NotRequire//只是个标识  
  20.     private String url; //模板跳转链接  
  21.   
  22.     // "miniprogram":{ 未加入  
  23.     // "appid":"xiaochengxuappid12345",  
  24.     // "pagepath":"index?foo=bar"  
  25.     // },  
  26.   
  27.     private TreeMap<String, TreeMap<String, String>> data; //data数据  
  28.   
  29.     public String getTouser() {  
  30.         return touser;  
  31.     }  
  32.   
  33.     public void setTouser(String touser) {  
  34.         this.touser = touser;  
  35.     }  
  36.   
  37.     public String getTemplate_id() {  
  38.         return template_id;  
  39.     }  
  40.   
  41.     public void setTemplate_id(String template_id) {  
  42.         this.template_id = template_id;  
  43.     }  
  44.   
  45.     public String getUrl() {  
  46.         return url;  
  47.     }  
  48.   
  49.     public void setUrl(String url) {  
  50.         this.url = url;  
  51.     }  
  52.   
  53.     public TreeMap<String, TreeMap<String, String>> getData() {  
  54.         return data;  
  55.     }  
  56.   
  57.     public void setData(TreeMap<String, TreeMap<String, String>> data) {  
  58.         this.data = data;  
  59.     }  
  60.   
  61.     /** 
  62.      * 参数 
  63.      * @param value 
  64.      * @param color 可不填 
  65.      * @return 
  66.      */  
  67.     public static TreeMap<String, String> item(String value, String color) {  
  68.         TreeMap<String, String> params = new TreeMap<String, String>();  
  69.         params.put("value", value);  
  70.         params.put("color", color);  
  71.         return params;  
  72.     }  
  73. }  

四、发送模板消息
[java]  view plain  copy
 print ?
  1. /** 
  2.  *  
  3.  */  
  4. package com.phil.wechatmsg.service.impl;  
  5.   
  6. import java.util.TreeMap;  
  7.   
  8. import org.springframework.stereotype.Service;  
  9.   
  10. import com.phil.common.config.WechatConfig;  
  11. import com.phil.common.util.HttpReqUtil;  
  12. import com.phil.common.util.JsonUtil;  
  13. import com.phil.wechatmsg.model.template.resp.TemplateMsgResult;  
  14. import com.phil.wechatmsg.service.WechatTemplateMsgService;  
  15.   
  16. /** 
  17.  * 模板消息接口实现类 
  18.  * @author phil 
  19.  * @date  2017年7月31日 
  20.  * 
  21.  */  
  22. @Service  
  23. public class WechatTemplateMsgServiceImpl implements WechatTemplateMsgService {  
  24.   
  25.     /** 
  26.      * 发送模板消息 
  27.      * @param accessToken 
  28.      * @param data 
  29.      * @return 状态 
  30.      */  
  31.     @Override  
  32.     public TemplateMsgResult sendTemplate(String accessToken, String data) {  
  33.         TemplateMsgResult templateMsgResult = null;  
  34.         TreeMap<String,String> params = new TreeMap<String,String>();  
  35.         params.put("access_token", accessToken);  
  36.         String result = HttpReqUtil.HttpsDefaultExecute(HttpReqUtil.POST_METHOD, WechatConfig.SEND_TEMPLATE_MESSAGE, params, data);  
  37.         templateMsgResult = JsonUtil.fromJson(result, TemplateMsgResult.class);  
  38.         return templateMsgResult;  
  39.     }  
  40. }  
[java]  view plain  copy
 print ?
  1. package com.phil.wechatmsg.model.template.resp;  
  2.   
  3. import com.phil.common.result.ResultState;  
  4.   
  5. /** 
  6.  * 模板消息 返回的结果 
  7.  * @author phil 
  8.  * @date 2017年6月30日 
  9.  * 
  10.  */  
  11. public class TemplateMsgResult extends ResultState {  
  12.     /** 
  13.      *  
  14.      */  
  15.     private static final long serialVersionUID = 3198012785950215862L;  
  16.   
  17.     private String msgid; // 消息id(发送模板消息)  
  18.   
  19.     public String getMsgid() {  
  20.         return msgid;  
  21.     }  
  22.   
  23.     public void setMsgid(String msgid) {  
  24.         this.msgid = msgid;  
  25.     }  
  26. }  
[java]  view plain  copy
 print ?
  1. package com.phil.common.result;  
  2.   
  3. import java.io.Serializable;  
  4.   
  5. /** 
  6.  * 微信API返回状态 
  7.  *  
  8.  * @author phil 
  9.  * @date 2017年7月2日 
  10.  * 
  11.  */  
  12. public class ResultState implements Serializable {  
  13.   
  14.     /** 
  15.      *  
  16.      */  
  17.     private static final long serialVersionUID = 1692432930341768342L;  
  18.   
  19.     private int errcode; // 状态  
  20.       
  21.     private String errmsg; //信息  
  22.   
  23.     public int getErrcode() {  
  24.         return errcode;  
  25.     }  
  26.   
  27.     public void setErrcode(int errcode) {  
  28.         this.errcode = errcode;  
  29.     }  
  30.   
  31.     public String getErrmsg() {  
  32.         return errmsg;  
  33.     }  
  34.   
  35.     public void setErrmsg(String errmsg) {  
  36.         this.errmsg = errmsg;  
  37.     }  
  38. }  

工具类不再提供

五、根据业务调用方法

一般注册成功、支付成功、支付失败等等情况下会用到,以下只是个示例controller

[java]  view plain  copy
 print ?
  1. package com.phil.wechatmsg.controller;  
  2.   
  3. import java.util.TreeMap;  
  4.   
  5. import javax.servlet.http.HttpServletRequest;  
  6. import javax.servlet.http.HttpServletResponse;  
  7.   
  8. import org.apache.log4j.Logger;  
  9. import org.springframework.beans.factory.annotation.Autowired;  
  10. import org.springframework.stereotype.Controller;  
  11.   
  12. import com.phil.common.util.JsonUtil;  
  13. import com.phil.wechatmsg.model.template.req.WechatTemplateMsg;  
  14. import com.phil.wechatmsg.model.template.resp.TemplateMsgResult;  
  15. import com.phil.wechatmsg.service.WechatTemplateMsgService;  
  16.   
  17. /** 
  18.  * 模板消息示例,只是个示例 
  19.  * @author phil 
  20.  * @date  2017年8月1日 
  21.  * 
  22.  */  
  23. @Controller  
  24. public class WechatTemplateMsgController {  
  25.       
  26.     public static final Logger logger = Logger.getLogger(WechatTemplateMsgController.class);  
  27.       
  28.     @Autowired  
  29.     private WechatTemplateMsgService wechatTemplateMsgService;  
  30.       
  31.     public TemplateMsgResult sendTemplate(HttpServletRequest request, HttpServletResponse response){  
  32.         TemplateMsgResult templateMsgResult = null;  
  33.         TreeMap<String,TreeMap<String,String>> params = new TreeMap<String,TreeMap<String,String>>();  
  34.         //根据具体模板参数组装  
  35.         params.put("first",WechatTemplateMsg.item("您的户外旅行活动订单已经支付完成,可在我的个人中心中查看""#000000"));  
  36.         params.put("keyword1",WechatTemplateMsg.item("8.1发现尼泊尔—人文与自然的旅行圣地""#000000"));  
  37.         params.put("keyword2",WechatTemplateMsg.item("5000元""#000000"));  
  38.         params.put("keyword3",WechatTemplateMsg.item("2017.1.2""#000000"));  
  39.         params.put("keyword4",WechatTemplateMsg.item("5""#000000"));  
  40.         params.put("remark",WechatTemplateMsg.item("请届时携带好身份证件准时到达集合地点,若临时退改将产生相应损失,敬请谅解,谢谢!""#000000"));  
  41.         WechatTemplateMsg wechatTemplateMsg = new WechatTemplateMsg();  
  42.         wechatTemplateMsg.setTemplate_id("Ub2oYYFPf8ofmA17H31Zqu9Z_HLycZ7MC-Dx_Se1Nkw");    
  43.         wechatTemplateMsg.setTouser("241235134");  
  44.         wechatTemplateMsg.setUrl("http://music.163.com/#/song?id=27867140");  
  45.         wechatTemplateMsg.setData(params);  
  46.         String data = JsonUtil.toJson(wechatTemplateMsg);  
  47.         templateMsgResult =  wechatTemplateMsgService.sendTemplate("accessToken", data);  
  48.         return templateMsgResult;  
  49.     }  
  50. }  
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值