公众号 接收规则 消息_微信公众平台 发送模板消息(Java接口开发)

前言:最近一直再弄微信扫码推送图文消息和模板消息发送,感觉学习到了不少东西。今天先总结一下微信公众平台模板消息的发送。因为这个自己弄了很久,开始很多地方不明白,所以今天好好总结一下。

微信公众平台技术文档:模板消息接口

一、概述

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

关于使用规则,请注意:

1、所有服务号都可以在功能->添加功能插件处看到申请模板消息功能的入口,但只有认证后的服务号才可以申请模板消息的使用权限并获得该权限;

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

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

4、每个账号可以同时使用25个模板。

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

关于接口文档,请注意:

1、模板消息调用时主要需要模板ID和模板中各参数的赋值内容;

2、模板中参数内容必须以”.DATA”结尾,否则视为保留字;

3、模板保留符号”{{ }}”。

看微信公众平台接口文档最开始我的内心是崩溃的,因为目录列表一开始就是设置所属行业,获取所属行业信息等。后来整理思路,我们主要负责的功能的实现,就不去考虑那么多其他的内容,直接弄模板消息的发送。但是发送模板之前有一个很重要的步骤,就是模板ID(template_id)。微信公众平台发送模板消息有严格的要求,参考模板消息运营规范。

二、模板消息的设计

这里是依靠微信公众平台测试公众号的模板消息接口来设计消息模板,通过行业类型来获取模板的同学还是参考微信公众平台的官方文档来学习。

1 新增模板消息

微信的测试公众号为我们提供了测试的消息模板,最多可添加10个(感觉够用,毕竟只是测试),新增测试模板。

(1)添加模板标题和模板内容

模板标题比较好理解,模板内容需要设计参数,参数需以{{开头,以.DATA}}结尾。

例如:{{first.DATA}}

first就是我们接口传的参数。

{{first.DATA}}

商品:{{keynote1.DATA}}

价格:{{keynote2.DATA}}

日期:{{keynote3.DATA}}

{{remark.DATA}}

新增之后就可以看到模板记录,就有我们需要的模板ID了。有了模板ID我们就可以按照接下来的微信公众平台发送模板消息接口来实现我们的功能。

三、发送模板消息

1 接口调用请求说明

http请求方式: POST

https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=ACCESS_TOKEN

2 POST数据说明

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"

}

}

}

3 参数说明

参数

是否必填

说明、

touser

接收者openid

template_id

模板ID

url

模板跳转链接

miniprogram

跳小程序所需数据,不需跳小程序可不用传该数据

appid

所需跳转到的小程序appid(该小程序appid必须与发模板消息的公众号是绑定关联关系)

pagepath

所需跳转到小程序的具体页面路径,支持带参数,(示例index?foo=bar)

data

模板数据

注:url和miniprogram都是非必填字段,若都不传则模板无跳转;若都传,会优先跳转至小程序。开发者可根据实际需要选择其中一种跳转方式即可。当用户的微信客户端版本不支持跳小程序时,将会跳转至url。

4 java接口开发

(1)封装请求参数Demo

public class TemplateData {

private String value;

private String color;

public String getValue() {

return value;

}

public void setValue(String value) {

this.value = value;

}

public String getColor() {

return color;

}

public void setColor(String color) {

this.color = color;

}

}

public class WechatTemplate {

private String touser;

private String template_id;

private String url;

private Map 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 Map getData() {

return data;

}

public void setData(Map data) {

this.data = data;

}

}

(2)发送模板消息方法

public class TemplateMessageServiceImpl implements TemplateMessageService{

private RestTemplate restTemplate ;

private String serviceHost = "https://api.weixin.qq.com";

public TemplateMessageServiceImpl() {

restTemplate = RestTemplateFactory.makeRestTemplate();

}

@Override

public WeixinResponse sendTemplateMessage(String accessToken, WeixinTemplate weixinTemplate) {

WeixinResponse weixinResponse = null;

String url = new StringBuffer(serviceHost).append("/cgi-bin/message/template/send?access_token=")

.append(accessToken).toString();

weixinResponse = restTemplate.postForObject(url, weixinTemplate, WeixinResponse.class,new HashMap());

return weixinResponse;

}

}

说明:简单理解模板消息发送,首先是获取accessToken,(如何获取请参考:微信公众平台 获取access_token)。其次是模板消息的参数封装,最后就是http的post请求。我的http请求是使用Spring的restTemplate进行请求,就不用我单独写一个http请求方法,如果没有使用可以写一个http请求的工具类。

(3)封装响应参数Demo

package com.plateno.weixin.message.model;

public class WeixinResponse {

private String msgid;

private int errcode;

private String errmsg;

public String getMsgid() {

return msgid;

}

public void setMsgid(String msgid) {

this.msgid = msgid;

}

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;

}

@Override

public String toString() {

StringBuffer buf = new StringBuffer("WeixinResponse[msgid=");

buf.append(msgid)

.append(",errcode=").append(errcode)

.append(",errmsg=").append(errmsg)

.append("]");

return buf.toString();

}

}

模板消息发送效果:

四、事件推送

在模版消息发送任务完成后,微信服务器会将是否送达成功作为通知,发送到开发者中心中填写的服务器配置地址中。

1 送达成功时

(1)推送的XML如下

1395658920

200163836

(2)参数说明

参数

说明

ToUserName

公众号微信号

FromUserName

接收模板消息的用户的openid

CreateTime

创建时间

MsgType

消息类型是事件

Event

事件为模板消息发送结束

MsgID

消息id

Status

发送状态为成功

2 送达由于用户拒收(用户设置拒绝接收公众号消息)而失败时

(1)推送的XML如下

1395658984

200163840

(2)参数说明

参数

说明

ToUserName

公众号微信号

FromUserName

接收模板消息的用户的openid

CreateTime

创建时间

MsgType

消息类型是事件

Event

事件为模板消息发送结束

MsgID

消息id

Status

发送状态为用户拒绝接收

3 送达由于其他原因失败时

(1)推送的XML如下

1395658984

200163840

(2)参数说明

参数

说明

ToUserName

公众号微信号

FromUserName

接收模板消息的用户的openid

CreateTime

创建时间

MsgType

消息类型是事件

Event

事件为模板消息发送结束

MsgID

消息id

Status

发送状态为发送失败(非用户拒绝)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/486156.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java中注释的使用

如何在Java中使用注释 在编写程序时,经常需要添加一些注释,用以描述某段代码的作用。 一般来说,对于一份规范的程序源代码而言,注释应该占到源代码的 1/3 以上。因此,注释是程序源代码的重要组成部分,一定要…

关于动态规划,你想知道的都在这里了!

作者 | Your DevOps Guy翻译| 火火酱~,责编 | 晋兆雨出品 | AI科技大本营头图 | 付费下载于视觉中国什么是动态规划?它又有什么重要的呢?在本文中,我将介绍由Richard Bellman在20世纪50年代提出的动态规划(dynamic pro…

linux修改永久ip地址,centos设置IP地址,永久修改ipv4

# ifconfig #查看下本机的IP地址。eth0Link encap:Ethernet HWaddr 00:50:56:0A:0B:0Cinet addr:192.168.0.3 Bcast:192.168.0.255 Mask:255.255.255.0inet6 addr: fe80::250:56ff:fe0a:b0c/64 Scope:LinkUP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1RX packets:172220…

详细介绍MySQL/MariaDB的锁

官方手册:https://dev.mysql.com/doc/refman/5.7/en/innodb-locking-transaction-model.html 1.事务提交的方式 在MariaDB/MySQL中有3种事务提交的方式。 1.显式开启和提交。 使用begin或者start transaction来显式开启一个事务,显式开启的事务必须使用c…

filter导致跨域失效_【SpringMVC】与权限拦截器冲突导致的Cors跨域设置失效问题...

问题描述前端域名FE.com向后端域名BE.com分别请求访问优惠券的列表和提交新增的优惠券,API设计所用的Method分别为Get和Post,结果为前一次访问成功而后一次访问失败。这两次请求都是跨域请求,其中请求1包含一个Get请求,请求2本应该…

美国专利商标局发布人工智能专利扩散分析报告

以下文章来源:中科院知识产权信息,2020-11-23报告显示,从2002到2018年,美国人工智能专利的年申请量增长超过100%,从每年3万件增加到6万多件,含人工智能的专利申请所占份额从9%上升到近16%。同时&#xff0c…

java 开发环境的搭建

这里主要说的是在windows 环境下怎么配置环境。 1.首先安装JDK java的sdk简称JDK ,去其官方网站下载最近的JDK即可。。http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html点击下载好的exe文件安装即可。 2.接下来我们需要配置环…

linux内核等价多路径路由,Linux内核分析 - 网络[四]:路由表

路由表的创建inet_init() -> ip_init() -> ip_fib_init() -> fib_net_init() -> ip_fib_net_init()[net\ipv4\fib_frontend.c]首先为路由表分配空间,这里的每个表项hlist_head实际都会链接一个单独的路由表,FIB_TABLE_HASHSZ表示了分配多少个…

2017级面向对象程序设计 作业二

以下均以扫描方式为例,即电梯只会在最底层和最高层选择掉头,路途中遇到路径方向相同的乘客将他带上电梯。 文字描述面向过程实现的步骤: 一. 定义有关电梯的变量,如:1.电梯当前所在楼层.,2. 电梯内的人数&a…

server sql top速度变慢解决方案_SQL Server数据库查询速度慢的原因和解决方法

SQL Server数据库查询速度慢的原因有很多,常见的有以下几种:1、没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷)2、I/O吞吐量小,形成了瓶颈效应。3、没有创建计算列导致查询不优化。4、内存不足5、网络速度慢…

新型支架状电极允许人类思想操作计算机

Illustration: Synchron来源:IEEE电气电子工程师据悉,两名患有神经肌肉疾病的澳大利亚人在他们的大脑中植入了支架状的电极,使他们能够利用自己的思想操作电脑,从而恢复了一些个人独立性。据发明者介绍,这是这种被称为…

java中的foreach

foreach 并不是java中的关键字,是for语句的特殊简化版,在比那里数组,集合时,foreach更加简单快捷,从字面上的意思理解 foreach 也就是 “ for每一个 ”的意思,那么到底怎么使用 foreach语句呢? …

linux c 子线程sleep,linux c之sleep的多种实现

#include #include #include //使用select实现精确到1微秒(0.000001秒)的sleepvoid sleep_us(unsigned int nusecs){struct timevaltval;tval.tv_sec nusecs / 1000000;tval.tv_usec nusecs % 1000000;select(0, NULL, NULL, NULL, &tval);}int main(){printf("star…

ACM数论-素数

ACM数论——素数 素数定义: 质数(prime number)又称素数,有无限个。质数定义为在大于1的自然数中,除了1和它本身以外不再有其他因数,这样的数称为质数。例 子:2、3、5、7、11、13、17、19。&am…

cors 前后端分离跨域问题_SpringBoot 实现前后端分离的跨域访问(CORS)

序言:跨域资源共享向来都是热门的需求,使用CORS可以帮助我们快速实现跨域访问,只需在服务端进行授权即可,无需在前端添加额外设置,比传统的JSONP跨域更安全和便捷。一、基本介绍简单来说,CORS是一种访问机制…

机器视觉中彩色成像必须考虑的十个问题

来源:Imagination Tech在为你的产品开发最适合的机器视觉系统时,需要考虑很多因素,以下列出开发过程中需要考虑的一些问题:颜色准确性/差异化首先要考虑的是应用程序所需的颜色精度和差异程度。在某些应用中,机器视觉相…

彩色的砖块

小易有一些彩色的砖块。每种颜色由一个大写字母表示。各个颜色砖块看起来都完全一样。现在有一个给定的字符串s,s中每个字符代表小易的某个砖块的颜色。小易想把他所有的砖块排成一行。如果最多存在一对不同颜色的相邻砖块,那么这行砖块就很漂亮的。请你帮助小易计算有多少种方…

linux 6.5桌面环境kde,CentOS 5/6 安装 GNOME 或 KDE 桌面

1、安装 XWindowyum-ygroupinstallXWindowSystem2.1、Centos 5.x 安装 GNOME 或 KDE (可择一安装)GNOMEyum-ygroupinstallGNOMEDesktopEnvironmentKDEyum-ygroupinstallKDE(KDesktopEnvironment)2.2、Centos 6.x 安装 GNOME 或 KDE (可择一安装)GNOMEyum-ygroupinstallDesktopK…

Zabbix的简单使用

0. 卸载mariadb 安装mysql 方法 rpm -qa |grep mariadb 然后 rpm -e --nodeps mariadb***** 安装mysql # 下载mysql源安装包 shell> wget http://dev.mysql.com/get/mysql57-community-release-el7-8.noarch.rpm # 安装mysql源 shell> yum localinstall mysql57-communi…

嫦娥“挖土”归来有多难?看看中国首颗返回式卫星的故事

本文转载自“科技日报(kjrbwx)”,原标题《嫦娥“挖土”归来有多难?看看中国首颗返回式卫星的故事》,作者 | 吕炳宏 付毅飞2020年11月30日,嫦娥五号探测器在环月轨道上,成功实施着陆器上升器组合…