微信公众号开发 [04] 模板消息功能的开发

一、模板消息的概况

模板消息的定位是用户触发后的通知消息, 不容许在用户没作任何操做或未经用户赞成接收的前提下,主动下发消息给用户。目前在特殊状况下容许主动下发的消息只有故障类和灾害警示警告类通知,除此以外都要通过用户赞成或用户有触发行为才能下发模板消息。 公众号只能在模板库中按照本身的行业来选择模板。若是模板库中暂时没有你想要的模板,在知足微信规范和要求的状况下,能够为你所在的行业贡献新模板,帮助充实模板库

再来看下官方对于模板消息的使用规则:
  • 全部服务号均可以在功能->添加功能插件处看到申请模板消息功能的入口,但只有认证后的服务号才能够申请模板消息的使用权限并得到该权限

  • 须要选择公众帐号服务所处的2个行业,每个月可更改1次所选行业;

  • 在所选择行业的模板库中选用已有的模板进行调用

  • 每一个帐号能够同时使用25个模板。

  • 当前每一个帐号的模板消息的日调用上限为10万次,单个模板没有特殊限制。【2014年11月18日将接口调用频率从默认的日1万次提高为日10万次,可在MP登陆后的开发者中心查看】。当帐号粉丝数超过10W/100W/1000W时,模板消息的日调用上限会相应提高,以公众号MP后台开发者中心页面中标明的数字为准。

从红色标记字体部分咱们能够看到,要想使用模板消息,首先要求是认证后的服务号,其次,模板的框架是微信官方固定好的,根据不一样的行业能够不一样地选择, 咱们只能针对模板中的填充体进行变化

上面提到的这点,咱们从微信的接口文档注意事项也能够看到:
  • 模板消息调用时主要须要模板ID模板中各参数的赋值内容
  • 模板中参数内容必须以".DATA"结尾,不然视为保留字;
  • 模板保留符号"{{ }}"。

也就是说,当你申请了模板消息之后,设定了所属行业,你能够在微信后台的模板消息看到以下模板库(借用一下方倍老师的图片):


每一个模板,均可以经过后面的详情,来查看其模板形式,和须要填充的内容(以下图):


以前咱们也从文档中看到,每一个帐户能够同时拥有25个模板,也就是如上图所示的添加按钮,你能够添加25个不一样模板,最总你会在你的模板库看到你添加的模板和对应的模板ID:


二、模板消息的推送

好了,如今咱们知道模板消息是官方固定好的格式,咱们填充内容。并且对应给了咱们模板的ID,那么咱们来看看,对于推送模板消息,须要咱们提供哪些内容:
http请求方式: POST 
https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=ACCESS_TOKEN

POST数据示例以下:
{
   "touser":"OPENID",
   "template_id":"ngqIpbwh8bUfcSsECmogfXcV14J0tQlEpBO27izEYtY",
   "url":"http://weixin.qq.com/download",  
   "miniprogram":{
     "appid":"xiaochengxuappid12345",
     "pagepath":"index?foo=bar"
   },          
   "data":{
	   "first": {
	       "value":"恭喜你购买成功!",
	       "color":"#173177"
	   },
	   "keynote1":{
	       "value":"巧克力",
	       "color":"#173177"
	   },
	   "keynote2": {
	       "value":"39.8元",
	       "color":"#173177"
	   },
	   "keynote3": {
	       "value":"2014年9月22日",
	       "color":"#173177"
	   },
	   "remark":{
	       "value":"欢迎再次购买!",
	       "color":"#173177"
	   }
   }
}


参数说明:
参数     是否必填 说明
touser 接收者openid
template_id 模板ID
url 模板跳转连接
miniprogram 跳小程序所需数据,不需跳小程序可不用传该数据
appid 所需跳转到的小程序appid(该小程序appid必须与发模板消息的公众号是绑定关联关系)
pagepath 所需跳转到小程序的具体页面路径,支持带参数,(示例index?foo=bar)
data 模板数据
注:url和miniprogram都是非必填字段,若都不传则模板无跳转;若都传,会优先跳转至小程序。开发者可根据实际须要选择其中一种跳转方式便可。当用户的微信客户端版本不支持跳小程序时,将会跳转至url。

咱们主要关注的是,如何构造一个符合格式体的JSON字符串,做为POST数据进行传递。从上面的POST示例中能够看到,其余部分的设定基本上都是获取的能够固定知晓的,而data部分,是根据模板格式的不一样来填充,其中first和remark部分固定,而keynote部分根据模板不一样,要求填写的也不一样,必须和模板对应。

三、自定义模板

若是确实找不到咱们本身所须要的模板,那么就在模板库中,点击选择 ”帮助咱们完善模板库“
 
每月只能自定义三个模板


提交模板以后,要接受7到15天的审核,审核一旦经过就能够开始使用你本身自定义的模版了。

对于自定义模板,还有一系列的审核标准( 微信文档 - 消息管理 - 发送消息 - 模板消息运营规范),这里摘录格式和内容规范:
(1)格式
格式正确,模板标准格式(三段式模板)
{ {first.DATA} }
关键词1:{ {keyword1.DATA} }           
关键词2:{ {keyword2.DATA} }
关键词3:{ {keyword3.DATA} }                       
{ {remark.DATA} }

(2)内容
①标题、关键词带有品牌或公司名等没有行业通用性的内容,不能经过
包括但不限于:某某公司服务通知、某某商品购买通知
②标题不能带标点或其它特殊符号,且必须以“通知”或“提醒”结尾,不然不能经过
包括不限于:领取红包!、天气提醒!
③易被用做群发,标题或关键词不能简要说明具体服务行为或使用场景的模板不能经过
包括但不限于:管理员类通知、公告类通知、系统通知
④易对用户骚扰的,发送频率较高的模板不能经过
包括但不限于 :更新类通知、回复类通知、互动类通知
⑤推广宣传、营销类的模板不能经过
包括但不限于 :红包类通知、优惠券类通知、活动类通知、积分类通知、奖励类通知
⑥模板库里已存在相似的模板不经过

四、其余

附:
带JSON数据POST请求访问微信接口的方法:
//上传Json接口POST
public static com.alibaba.fastjson.JSONObject uploadPost(URL url,com.alibaba.fastjson.JSONObject json) throws Exception{
    HttpURLConnection conn =(HttpURLConnection) url.openConnection();
    conn.setConnectTimeout(8000);
    conn.setReadTimeout(8000);
    conn.setRequestMethod("POST");
    conn.setRequestProperty("Content-Type","application/x-www-form-urlencoded");
    conn.setDoOutput(true);
    conn.setDoInput(true);
    conn.setUseCaches(false);
    conn.connect();
    OutputStream os= conn.getOutputStream();
    os.write(json.toJSONString().getBytes("UTF-8"));//传入参数
    os.flush();
    os.close();
    InputStream is = conn.getInputStream();
    int size = is.available();
    byte[] buf=new byte[size];
    is.read(buf);
    String result =new String(buf,"UTF-8");
    return JSON.parseObject(result);
}
相关文章
相关标签/搜索