关闭

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

标签: 微信模板消息微信消息模板
15018人阅读 评论(30) 收藏 举报
分类:

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

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

一、使用规则

  • 所有服务号都可以在功能->添加功能插件处看到申请模板消息功能的入口
  • 需要选择公众账号服务所处的2个行业,每月可更改1次所选行业
  • 在所选择行业的模板库中选用已有的模板进行调用
  • 每个账号可以同时使用25个模板
  • 当前每个账号的模板消息的日调用上限为10万次,单个模板没有特殊限制,以公众号MP后台开发者中心页面中标明的数字为准

二、接口文档规范

  • 模板消息调用时主要需要模板ID和模板中各参数的赋值内容
  • 模板中参数内容必须以".DATA"结尾,否则视为保留字
  • 模板保留符号"{{ }}"

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

三、 封装模板消息

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

{{first.DATA}}
旅行活动名称:{{keyword1.DATA}}
订单金额:{{keyword2.DATA}}
旅行时间:{{keyword3.DATA}}
参与人数:{{keyword4.DATA}}
{{remark.DATA}}

发送模板消息的接口: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"
                   }
           }
       }
package com.phil.wechatmsg.model.template.req;

import java.util.TreeMap;

import com.phil.common.annotation.NotRequire;

/**
 * 模板消息
 * @author phil
 * @date 2017年7月2日
 *
 */
public class WechatTemplateMsg {

	private String touser; //接收者openid

	private String template_id; //模板ID

	@NotRequire//只是个标识
	private String url; //模板跳转链接

	// "miniprogram":{ 未加入
	// "appid":"xiaochengxuappid12345",
	// "pagepath":"index?foo=bar"
	// },

	private TreeMap<String, TreeMap<String, String>> data; //data数据

	public String getTouser() {
		return touser;
	}

	public void setTouser(String touser) {
		this.touser = touser;
	}

	public String getTemplate_id() {
		return template_id;
	}

	public void setTemplate_id(String template_id) {
		this.template_id = template_id;
	}

	public String getUrl() {
		return url;
	}

	public void setUrl(String url) {
		this.url = url;
	}

	public TreeMap<String, TreeMap<String, String>> getData() {
		return data;
	}

	public void setData(TreeMap<String, TreeMap<String, String>> data) {
		this.data = data;
	}

	/**
	 * 参数
	 * @param value
	 * @param color 可不填
	 * @return
	 */
	public static TreeMap<String, String> item(String value, String color) {
		TreeMap<String, String> params = new TreeMap<String, String>();
		params.put("value", value);
		params.put("color", color);
		return params;
	}
}

四、发送模板消息

/**
 * 
 */
package com.phil.wechatmsg.service.impl;

import java.util.TreeMap;

import org.springframework.stereotype.Service;

import com.phil.common.config.WechatConfig;
import com.phil.common.util.HttpReqUtil;
import com.phil.common.util.JsonUtil;
import com.phil.wechatmsg.model.template.resp.TemplateMsgResult;
import com.phil.wechatmsg.service.WechatTemplateMsgService;

/**
 * 模板消息接口实现类
 * @author phil
 * @date  2017年7月31日
 *
 */
@Service
public class WechatTemplateMsgServiceImpl implements WechatTemplateMsgService {

	/**
	 * 发送模板消息
	 * @param accessToken
	 * @param data
	 * @return 状态
	 */
	@Override
	public TemplateMsgResult sendTemplate(String accessToken, String data) {
		TemplateMsgResult templateMsgResult = null;
		TreeMap<String,String> params = new TreeMap<String,String>();
		params.put("access_token", accessToken);
		String result = HttpReqUtil.HttpsDefaultExecute(HttpReqUtil.POST_METHOD, WechatConfig.SEND_TEMPLATE_MESSAGE, params, data);
		templateMsgResult = JsonUtil.fromJson(result, TemplateMsgResult.class);
		return templateMsgResult;
	}
}
package com.phil.wechatmsg.model.template.resp;

import com.phil.common.result.ResultState;

/**
 * 模板消息 返回的结果
 * @author phil
 * @date 2017年6月30日
 *
 */
public class TemplateMsgResult extends ResultState {
	/**
	 * 
	 */
	private static final long serialVersionUID = 3198012785950215862L;

	private String msgid; // 消息id(发送模板消息)

	public String getMsgid() {
		return msgid;
	}

	public void setMsgid(String msgid) {
		this.msgid = msgid;
	}
}
package com.phil.common.result;

import java.io.Serializable;

/**
 * 微信API返回状态
 * 
 * @author phil
 * @date 2017年7月2日
 *
 */
public class ResultState implements Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1692432930341768342L;

	private int errcode; // 状态
	
	private String errmsg; //信息

	public int getErrcode() {
		return errcode;
	}

	public void setErrcode(int errcode) {
		this.errcode = errcode;
	}

	public String getErrmsg() {
		return errmsg;
	}

	public void setErrmsg(String errmsg) {
		this.errmsg = errmsg;
	}
}

工具类不再提供

五、根据业务调用方法

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

package com.phil.wechatmsg.controller;

import java.util.TreeMap;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;

import com.phil.common.util.JsonUtil;
import com.phil.wechatmsg.model.template.req.WechatTemplateMsg;
import com.phil.wechatmsg.model.template.resp.TemplateMsgResult;
import com.phil.wechatmsg.service.WechatTemplateMsgService;

/**
 * 模板消息示例,只是个示例
 * @author phil
 * @date  2017年8月1日
 *
 */
@Controller
public class WechatTemplateMsgController {
	
	public static final Logger logger = Logger.getLogger(WechatTemplateMsgController.class);
	
	@Autowired
	private WechatTemplateMsgService wechatTemplateMsgService;
	
	public TemplateMsgResult sendTemplate(HttpServletRequest request, HttpServletResponse response){
		TemplateMsgResult templateMsgResult = null;
		TreeMap<String,TreeMap<String,String>> params = new TreeMap<String,TreeMap<String,String>>();
		//根据具体模板参数组装
		params.put("first",WechatTemplateMsg.item("您的户外旅行活动订单已经支付完成,可在我的个人中心中查看", "#000000"));
		params.put("keyword1",WechatTemplateMsg.item("8.1发现尼泊尔—人文与自然的旅行圣地", "#000000"));
		params.put("keyword2",WechatTemplateMsg.item("5000元", "#000000"));
		params.put("keyword3",WechatTemplateMsg.item("2017.1.2", "#000000"));
		params.put("keyword4",WechatTemplateMsg.item("5", "#000000"));
		params.put("remark",WechatTemplateMsg.item("请届时携带好身份证件准时到达集合地点,若临时退改将产生相应损失,敬请谅解,谢谢!", "#000000"));
		WechatTemplateMsg wechatTemplateMsg = new WechatTemplateMsg();
		wechatTemplateMsg.setTemplate_id("Ub2oYYFPf8ofmA17H31Zqu9Z_HLycZ7MC-Dx_Se1Nkw");  
		wechatTemplateMsg.setTouser("241235134");
		wechatTemplateMsg.setUrl("http://music.163.com/#/song?id=27867140");
		wechatTemplateMsg.setData(params);
		String data = JsonUtil.toJson(wechatTemplateMsg);
		templateMsgResult =  wechatTemplateMsgService.sendTemplate("accessToken", data);
		return templateMsgResult;
	}
}


14
4
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

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

模板消息仅用于公众号向用户发送重要的服务通知,只能用于符合其要求的服务场景中,如信用卡刷卡通知,商品购买成功通知等。不支持广告等营销类消息以及其它所有可能对用户造成骚扰的消息。 关于使用...
  • doc_wei
  • doc_wei
  • 2017-01-19 16:47
  • 1849

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

由于刘峰老师的新书还没有出来
  • xiejiawanwei2_bb
  • xiejiawanwei2_bb
  • 2014-11-01 14:41
  • 18470

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

模板消息仅用于公众号向用户发送重要的服务通知,只能用于符合其要求的服务场景中,如信用卡刷卡通知,商品购买成功通知等。不支持广告等营销类消息以及其它所有可能对用户造成骚扰的消息。 关于使用规则...
  • sxmfendou
  • sxmfendou
  • 2017-06-30 13:51
  • 623

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

模板消息仅用于公众号向用户发送重要的服务通知,只能用于符合其要求的服务场景中,如信用卡刷卡通知,商品购买成功通知等。不支持广告等营销类消息以及其它所有可能对用户造成骚扰的消息。 关于使用...
  • u013065023
  • u013065023
  • 2017-04-06 09:51
  • 1136

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

模板消息仅用于公众号向用户发送重要的服务通知,只能用于符合其要求的服务场景中,如信用卡刷卡通知,商品购买成功通知等。不支持广告等营销类消息以及其它所有可能对用户造成骚扰的消息。对于一般的服务号而言,模...
  • doc_wei
  • doc_wei
  • 2017-12-16 11:54
  • 76

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

由于柳峰老师的新书还没有出来,网上也没有过多介绍基于Java语言的开发微信公众平台模板消息的例子,因此有了本文。由于个人表达能力和编程能力有限,请多多包涵。本文仅介绍拥有模板消息权限的微信公众账号开发...
  • qq_36125733
  • qq_36125733
  • 2017-06-22 22:14
  • 236

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

微信公众账号开发-发送模板消息:   内容概要 本篇文章主要叙述如何在微信公众帐号上实现“发送模板消息开发”功能。包含json的封装与解析。   何谓模板消息 为了保证用户不受到骚扰,在开...
  • g1812453421
  • g1812453421
  • 2014-09-04 20:12
  • 10375

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

微信公众账号开发-发送模板消息:   内容概要 本篇文章主要叙述如何在微信公众帐号上实现“发送模板消息开发”功能。包含json的封装与解析。   何谓模板消息 为了...
  • u013065023
  • u013065023
  • 2017-04-06 09:39
  • 1301

微信公众平台开发-消息管理-发送模板消息

一.模板说明         模板消息是在特定服务场景中向粉丝发送的消息,例如:信用卡刷卡通知,商品购买成功通知.不同的模板有不同的风格,某些字段可以由你来填充自己的内容(同时设定颜色),从而形成自...
  • qq_33858250
  • qq_33858250
  • 2017-11-19 14:57
  • 515

微信公众平台开发教程Java版(3) 消息接收和发送

前面两章已经介绍了如何接入微信公众平台,这一章说说消息的接收和发送 可以先了解公众平台的消息api接口(接收消息,发送消息) http://mp.weixin.qq.com/wiki/index....
  • u014196852
  • u014196852
  • 2014-04-03 17:40
  • 1912
    个人资料
    • 访问:86635次
    • 积分:1474
    • 等级:
    • 排名:千里之外
    • 原创:52篇
    • 转载:3篇
    • 译文:0篇
    • 评论:106条
    博客专栏