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

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

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

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

一、使用规则

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

二、接口文档规范

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

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

三、 封装模板消息

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

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

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数据
	/**
	 * 参数
	 * @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;
	}
}

四、发送模板消息

// 发送模板消息
public static final String SEND_TEMPLATE_MESSAGE = "https://api.weixin.qq.com/cgi-bin/message/template/send";
/**
 * 发送模板消息
 * 
 * @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(SystemConfig.POST_METHOD, WechatConfig.SEND_TEMPLATE_MESSAGE,
			params, data);
	templateMsgResult = JsonUtil.fromJsonString(result, TemplateMsgResult.class);
	//log.....
	return templateMsgResult;
}
package com.phil.wechat.msg.model.template.resp;

import com.phil.wechat.base.result.ResultState;

/**
 * 模板消息 返回的结果
 * @author phil
 * @date 2017年6月30日
 *
 */
public class TemplateMsgResult extends ResultState {

	private static final long serialVersionUID = 3198012785950215862L;
	private String msgid; // 消息id(发送模板消息)
}
package com.phil.wechat.base.result;

/**
 * 微信API返回状态
 * 
 * @author phil
 * @date 2017年7月2日
 *
 */
public class ResultState extends AbstractResult {
	
	private static final long serialVersionUID = 1692432930341768342L;
	private int errcode; // 状态	
	private String errmsg; //信息
}

五、根据业务调用方法

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

package com.phil.wechat.msg.controller;

import java.util.TreeMap;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import com.phil.modules.util.JsonUtil;
import com.phil.wechat.base.controller.BaseController;
import com.phil.wechat.msg.model.template.req.WechatTemplateMsg;
import com.phil.wechat.msg.model.template.resp.TemplateMsgResult;
import com.phil.wechat.msg.service.WechatMsgService;

/**
 * @author phil
 * @date  2017年9月19日
 *
 */
@Controller
@RequestMapping("/wechat")
public class WechatMsgController extends BaseController {
	
	private Logger logger = LoggerFactory.getLogger(this.getClass());
	
	@Autowired
	private WechatMsgService wechatMsgService;
	
	public TemplateMsgResult sendTemplate(){
		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.toJsonString(wechatTemplateMsg);
		templateMsgResult =  wechatMsgService.sendTemplate("accessToken", data);
		return templateMsgResult;
	}
	
}

我是工具类

感谢支持

查看评论

微信公众号开发--模板消息

微信公众号开发,发送模版消息
  • frankcheng5143
  • frankcheng5143
  • 2017-03-08 22:03:49
  • 5672

微信公众号开发之[发送模板消息]

1、什么是模板消息? 微信为防止服务号对用户进行恶意骚扰和营销,而服务号在某些场景又必须给用户发送消息时(如购物成功、支付成功),这时候就可以应用微信提供的模板消息来给用户进行提醒。...
  • rwb0123
  • rwb0123
  • 2015-12-29 10:23:45
  • 6325

微信公众号开发之模板消息

欢迎留言、转发微信极速开发系列文章:点击这里 最近有点小感冒,文章的更新进度延误了一些,希望此系列文章对你研究微信公众开发有帮助。前几篇文章介绍了微信支付。 公众号支付、微信扫码支付、刷卡支付、微...
  • zyw_java
  • zyw_java
  • 2017-03-11 12:44:18
  • 2376

微信模板消息最简单案例

代码如下:其中access_token 、openid和模板ID自己重新填写
  • u014772637
  • u014772637
  • 2016-07-02 10:14:03
  • 1455

微信公众号开发(十)模板消息

模板消息仅用于公众号向用户发送重要的服务通知,只能用于符合其要求的服务场景中,如信用卡刷卡通知,商品购买成功通知等。不支持广告等营销类消息以及其它所有可能对用户造成骚扰的消息。 1、设置所属行业 设置...
  • qq_28506819
  • qq_28506819
  • 2017-09-15 00:02:46
  • 902

微信公众号模板消息接口

说明 模板消息仅用于公众号向用户发送重要的服务通知,只能用于符合其要求的服务场景中,如信用卡刷卡通知,商品购买成功通知等。不支持广告等营销类消息以及其它所有可能对用户造成骚扰的消息。 使用规则 ...
  • qq_20802379
  • qq_20802379
  • 2018-03-26 23:27:47
  • 101

微信小程序实例:创建下发模板消息实例

鉴于目前网络上都还找不到小程序下发模板消息的相关资源,在多次阅读了官方文档今天终于把小程序的模版消息给测通了,接下来介绍在不使用服务器的情况下,前端开发人员在本地怎么测试模板消息的发送。 1、在...
  • eadio
  • eadio
  • 2016-12-13 15:45:06
  • 37792

微信模版消息开发

在项目中,用到了微信的模版消息。搜索了一下,发现了很多好玩的东西,这里跟大家分享一下。 一,微信公众平台简介  微信公众平台,可以分为三类。 (1)订阅号:主要偏重于为用户传达资讯,类似于 ...
  • u013034640
  • u013034640
  • 2016-09-30 18:18:36
  • 1431

java微信模板消息接口的使用

用Java做微信开发也有一段时间了,我发现Java拿来开发微信经常会被反对,也不知道是为什么总有一些人有类似“php开发微信应用才是最好的”这种偏执或偏见;个人觉得选何种语言要综合自身或团队的情况来选...
  • chenwill3
  • chenwill3
  • 2015-11-14 20:56:48
  • 15420

微信公众号开发-----微信模板消息接口-----发送模板消息

发送模板消息 接口调用请求说明 http请求方式: POST https://api.weixin.qq.com/cgi-bin/message/template/send?access_...
  • qq_35661013
  • qq_35661013
  • 2017-08-29 17:42:46
  • 1686
    个人资料
    专栏达人 持之以恒
    等级:
    访问量: 11万+
    积分: 1757
    排名: 2万+
    博客专栏
    最新评论