微信公众号开发之关注推送图文消息
关注/取消关注事件
用户在关注与取消关注公众号时,微信会把这个事件推送到开发者填写的URL。方便开发者给用户下发欢迎消息或者做帐号的解绑。
微信服务器在五秒内收不到响应会断掉连接,并且重新发起请求,总共重试三次。
关于重试的消息排重,推荐使用FromUserName + CreateTime 排重。
假如服务器无法保证在五秒内处理并回复,可以直接回复空串,微信服务器不会对此作任何处理,并且不会发起重试。
推送XML数据包示例:
<xml><ToUserName>< ![CDATA[toUser] ]></ToUserName><FromUserName>< ![CDATA[FromUser] ]></FromUserName><CreateTime>123456789</CreateTime><MsgType>< ![CDATA[event] ]></MsgType><Event>< ![CDATA[subscribe] ]></Event></xml>
参数说明:
参数 | 描述 |
---|---|
ToUserName | 开发者微信号 |
FromUserName | 发送方帐号(一个OpenID) |
CreateTime | 消息创建时间 (整型) |
MsgType | 消息类型,event |
Event | 事件类型,subscribe(订阅)、unsubscribe(取消订阅) |
回复图文消息
<xml><ToUserName>< ![CDATA[toUser] ]></ToUserName><FromUserName>< ![CDATA[fromUser] ]></FromUserName><CreateTime>12345678</CreateTime><MsgType>< ![CDATA[news] ]></MsgType><ArticleCount>2</ArticleCount><Articles><item><Title>< ![CDATA[title1] ]></Title> <Description>< ![CDATA[description1] ]></Description><PicUrl>< ![CDATA[picurl] ]></PicUrl><Url>< ![CDATA[url] ]></Url></item><item><Title>< ![CDATA[title] ]></Title><Description>< ![CDATA[description] ]></Description><PicUrl>< ![CDATA[picurl] ]></PicUrl><Url>< ![CDATA[url] ]></Url></item></Articles></xml>
参数 | 是否必须 | 说明 |
---|---|---|
ToUserName | 是 | 接收方帐号(收到的OpenID) |
FromUserName | 是 | 开发者微信号 |
CreateTime | 是 | 消息创建时间 (整型) |
MsgType | 是 | news |
ArticleCount | 是 | 图文消息个数,限制为8条以内 |
Articles | 是 | 多条图文消息信息,默认第一个item为大图,注意,如果图文数超过8,则将会无响应 |
Title | 是 | 图文消息标题 |
Description | 是 | 图文消息描述 |
PicUrl | 是 | 图片链接,支持JPG、PNG格式,较好的效果为大图360*200,小图200*200 |
Url | 是 | 点击图文消息跳转链接 |
详细代码如下
public class News {private String Title;//图文标题private String Description;//图文描述private String PicUrl;//图片链接,支持JPG、PNG格式,较好的效果为大图360*200,小图200*200private String Url;//点击图文消息跳转链接public News(String title, String description, String picUrl, String url) {this.Title = title;this.Description = description;this.PicUrl = picUrl;this.Url = url;}public News(){super();}public String getTitle() {return Title;}public void setTitle(String title) {this.Title = title;}public String getDescription() {return Description;}public void setDescription(String description) {this.Description = description;}public String getPicUrl() {return PicUrl;}public void setPicUrl(String picUrl) {this.PicUrl = picUrl;}public String getUrl() {return Url;}public void setUrl(String url) {this.Url = url;}
}
NewsMessage.java
public class NewsMessage extends BaseMessage {private int ArticleCount;//图文消息个数,限制为8条以内private List<News> Articles;//多条图文消息信息,默认第一个item为大图,注意,如果图文数超过8,则将会无响应public NewsMessage(String toUserName, String fromUserName, Long createTime, String msgType, Integer articleCount, List<News> articles) {super(toUserName, fromUserName, createTime, msgType);this.ArticleCount = articleCount;this.Articles = articles;}public NewsMessage() {super();}public int getArticleCount() {return ArticleCount;}public void setArticleCount(int articleCount) {this.ArticleCount = articleCount;}public List<News> getArticles() {return Articles;}public void setArticles(List<News> articles) {this.Articles = articles;}
}
初始化图文消息:
/*** 初始化图文消息*/public static String initNewsMessage(String toUSerName, String fromUserName) {List<News> newsList = new ArrayList<News>();NewsMessage newsMessage = new NewsMessage();//组建一条图文↓ ↓ ↓News newsItem = new News();newsItem.setTitle("欢迎关注我的公众号");newsItem.setDescription("进行操作之前请先注册!");newsItem.setPicUrl(WXConstants.BASE_SERVER + "/image/wx/login_article_cover.png");newsItem.setUrl("https://open.weixin.qq.com/connect/oauth2/authorize?appid=" + WXConstants.APPID + "&redirect_uri=" + WXConstants.BASE_SERVER + "/wxuser/toRegister&response_type=code&scope=snsapi_base&state=BINDFACE#wechat_redirect");newsList.add(newsItem);//组装图文消息相关信息newsMessage.setToUserName(fromUserName);newsMessage.setFromUserName(toUSerName);newsMessage.setCreateTime(new Date().getTime());newsMessage.setMsgType(WXConstants.MESSAGE_NEWS);newsMessage.setArticles(newsList);newsMessage.setArticleCount(newsList.size());//调用newsMessageToXml将图文消息转化为XML结构并返回return MessageUtil.newsMessageToXml(newsMessage);}/*** 图文消息转XML结构方法*/public static String newsMessageToXml(NewsMessage message) {XStream xs = new XStream();//由于转换后xml根节点默认为class类,需转化为<xml>xs.alias("xml", message.getClass());xs.alias("item", new News().getClass());return xs.toXML(message);}
测试关注:
@Controller
@RequestMapping("/wechat")
public class WxController {private final static String MEDIATYPE_CHARSET_JSON_UTF8 = MediaType.APPLICATION_JSON_VALUE + ";charset=UTF-8";private static Logger log = LoggerFactory.getLogger(WxController.class);@RequestMapping(value = "/chat", method = {RequestMethod.GET, RequestMethod.POST}, produces = MEDIATYPE_CHARSET_JSON_UTF8)public void get(HttpServletRequest request, HttpServletResponse response) throws Exception {//如果为get请求,则为开发者模式验证if ("get".equals(request.getMethod().toLowerCase())) {doGet();//在开发者模式验证中已处理,在此省略} else {request.setCharacterEncoding("UTF-8");response.setCharacterEncoding("UTF-8");PrintWriter out = response.getWriter();try {Map<String, String> map = MessageUtil.xmlToMap(request);String ToUserName = map.get("ToUserName");String FromUserName = map.get("FromUserName");request.getSession().setAttribute("openid",FromUserName);String CreateTime = map.get("CreateTime");String MsgType = map.get("MsgType");String message = null;if (MsgType.equals(WXConstants.MESSAGE_EVENT)) {//从集合中,获取是哪一种事件传入String eventType = map.get("Event");if (eventType.equals(WXConstants.MESSAGE_SUBSCRIBE)) {message = MessageUtil.initNewsMessage(ToUserName, FromUserName);}}out.print(message); //返回转换后的XML字符串} catch (DocumentException e) {e.printStackTrace();}out.close();}}
}
关注测试号,弹出如下结果:
微信公众号开发之关注推送图文消息相关推荐
- 微信公众号开发-----接送事件推送之关注/取消关注
本文主要实现的功能包括 关注/取消关注事件 阅读本文之前请先认真阅读微信公众号技术文档之接受事件推送 需注意的是:验证消息的确来自微信服务器和接收事件时微信服务器都会发送请求到填写的服务器地址URL上 ...
- 微信公众号开发-菜单事件推送
菜单事件推送在微信公众号开发中也是属于比较常用的一个功能,就是用户点击菜单之后,微信会将事件推送给接口程序. 不过微信开发到现在也是老生常谈的的东西了,我就简单写一下菜单事件推送的这个过程. 注意:点 ...
- 微信公众号自定义菜单和推送模板消息
1.微信公众号测试账号: 找到服务号的开发文档,点击进去. Java代码: 准备工作: (1)填写JS接口安全域名 (2)填写接口配置信息: (2)java的Token验证接口 @RequestMap ...
- 微信公众号开发 [03] 结合UEditor实现图文消息群发功能
0.写在前面的话 如何实现微信平台后台管理中的,图文消息发送功能? 大概的过程如下: 通过类似表单的形式,将文章各部分内容提交到后台,封装成一个实体类,并持久化到数据库中 需要推送的时候,将不同的文章 ...
- 【微信公众号开发】【6】图文消息加强
前言: 1,图文消息参数介绍 2,注意区分图片消息和图文消息,图片消息是不能带链接的 3,一定要给图文消息的Url属性赋值.(柳峰老师说如果Url为空,用户点击后将会打开一个空白页面,待验证,我以前直 ...
- Java+Python 微信公众号自动给女朋友推送专属浪漫早安问候
目录结构 前言 0.推送效果 1.自动化平台地址(免费的) 1.1.平台首页 1.2.个人信息注册页面 1.3.成功注册页面 1.4.登录页面 2.注册步骤 2.1.扫码登录 2.2.第二步,复制粘贴 ...
- 微信公众号如何一天能推送多条图文消息
微信公众号推送多条图文消息,可以在关注回复,扫描二维码回复,群发消息里实现,其他场景均不能推送多条图文消息,微信早已禁用了部分场景功能的多图文消息使用. 微号帮功能有关注回复.扫描二维码回复,群发消息 ...
- python微信语音转发_Python 微信公众号开发(2)——听得懂语音消息的聊天机器人...
提要: 这篇文章里我们会写: 1.如何对一个聊天机器人进行抓包分析接口: 2.如何将现成的聊天机器 API 部署到自己的公众号上: 3.如何实现接收语音消息并调用聊天机器人 API 自动回复文字: 4 ...
- 如何创建微信公众号, 微网站 以及发多图文消息
1. 到微信公众平台官网,创建一个自己的微信公众号 第一步,打开腾讯微信公众平台官网 http://mp.weixin.qq.com 第二步,打开了微信公共平台的注册页面以后,点击右上角的" ...
最新文章
- html 消息通知功能,HTML5之消息通知的使用(Web Notification)
- Charles是Mac的Fiddler抓包工具
- Vue——定义全局工具类
- 计算机应用能力大纲,计算机应用能力水平考试大纲.doc
- Glib 对 C 函数进行单元测试
- STM32的IAP在线升级的源码中的地址解读
- SpringCloud服务注册与发现Eureka
- 音视频编解码:NVIDIA Jetson Linux Multimedia API(总结)
- 【IDE】JetBrains全家桶教程系列,学生认证 + 汉化
- linux+echo+权限不够,解决linux echo命令以及linux echo命令提示权限不够的方法
- 访问Internet 需要哪些步骤
- 调用微博API获取微博内容
- python str函数数字转换成字符串,Pandas将数字转换为字符串意外结果
- IPv6技术精要--第5章 IPv6公网单播地址
- win10网络诊断为DNS服务器未响应,Win10系统下电脑无法连接网络诊断提示DNS服务器未响应解决方法...
- 电子计算机怎么按不了数字,计算器失灵按不出数字
- 三阶魔方没有。四阶魔方 有的公式
- 一起聆听碳氮循环研究新动态,我们在苏州期待您的精彩分享和参与!
- 【小蜜蜂蓝桥杯笔记】DS18B20温度传感器的使用
- 程序设计阶段性总结报告一
热门文章
- 计算机的屏幕约是16平方分米吗,电脑屏幕的面积大约是六平方分米对吗
- mac电脑卸载安装node(不同版本),安装淘宝镜像
- ArcGIS绘制北半球俯视投影地图
- hdfs上传文件没有权限写入的问题解决put: Permission denied: user=root, access=WRITE
- Java编写的金额转中文大写
- 从抑郁到爱上科研,上海交大博士自述开挂读博路,网友:知乎见过最好的文章...
- 局域网怎么同步文件?Samba协议同步文件
- 指数和对数的公式总结
- could not open selected vm debug port (8700)解决方法
- 6.selenium实际用法