微信公众号关注一次回复多条消息java开发
来源:互联网 发布:vue.js div点击事件 编辑:程序博客网 时间:2024/05/22 15:04
最近公司在做一个微信公众号,由于刚接触,也参考了不少网上的资料。领导要求关注、默认和关键字回复可以返回多条消息,网上翻阅的半天发现只能是被动回复一条+上主动推送若干条,最后以这样的方式完成了这个需求,现贴出来,给大家一个参考。实体类网上有的部分就不贴了,贴我自己写的部分
关注回复若干条
// 判断行为是订阅if (eventType.equals(MessageUtil.EVENT_TYPE_SUBSCRIBE)) {//获得该关注人员的信息WXUser user = queryUser(fromUserName,wxAccount);if(null!=user.getOpenId()){String type = Read.getMsg("subscribe.type");flag = true;//获得后台设置的回复列表for (WXReply wr : list) {//判断是否是关注类型if (type.equals((wr.getActionType()))) {//第一次为被动回复if(flag){//转换成xml形式respMessage = ReplyMessageUtil.getMsgByType(textMessage,newsMessage,imageMessage,wr);out.write(respMessage);flag = false;}else{//如果还有回复则为主动推送respMessage = ReplyMessageUtil.initiativeMsgData(fromUserName, wr); HttpBase http = new HttpBase(); //那天微信开发文档推送给关注者String jsonStr = http.post("https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token="+accessToken, null, respMessage);System.out.println(jsonStr);}System.out.println(respMessage);}}//数据新增关注人wxUserService.insertWXUser(accountCode, user.getOpenId(), user.getNickName(), user.getHeadimgurl());}//保存关注人员}
//被动回复的类型判断
/** * 被动回复消息操作 * @param textMessage * @param newsMessage * @param imageMessage * @param wr * @return */public static String getMsgByType(TextMessage textMessage,NewsMessage newsMessage,ImageMessage imageMessage,WXReply wr){String respMessage = "";//传入类型String type = wr.getMsgType();if("text".equals(type)){//设置文本消息内容textMessage.setContent(wr.getMsgContent());//转换xmlrespMessage = MessageUtil.textMessageToXml(textMessage); }else if("news".equals(type)){//图文类型listList<Article> articleList = new ArrayList<Article>(); Article article = new Article(); article.setTitle(wr.getMsgTitle()); article.setDescription(wr.getMsgDescription()); article.setPicUrl(wr.getMsgPicUrl()); article.setUrl(wr.getMsgUrl()); articleList.add(article); // 设置图文消息个数 这里是单个 newsMessage.setArticleCount(articleList.size()); // 设置图文消息包含的图文集合 newsMessage.setArticles(articleList); // //转换成xml respMessage = MessageUtil.newsMessageToXml(newsMessage); }else if("image".equals(type)){Image image = new Image();//设置media_idimage.setMediaId(wr.getMediaId());imageMessage.setImage(image);//转换成xmlrespMessage = MessageUtil.ImageMessageToXml(imageMessage);}return respMessage;}
主动回复判断 要根据微信开发文档来编写实体类,发送请求中携带的参数格式要符合,不然就回返回错误信息
/** * 主动推送消息 * @param fromUserName * @param wr * @return */public static String initiativeMsgData(String fromUserName,WXReply wr){String respMessage = "";String type = wr.getMsgType();if("text".equals(type)){//文本消息TextMsg tm = new TextMsg();Text tx = new Text();tm.setTouser(fromUserName);tm.setMsgtype("text");tx.setContent(wr.getMsgContent());tm.setText(tx);//转换成字符串respMessage = JsonHelper.bean2JsonStr(tm);}else if("news".equals(type)){//图文消息NewsMsg nm = new NewsMsg();NewsMsgForMp nmm = new NewsMsgForMp();List<News> articles = new ArrayList<News>();Map<String, List<News>> news = new HashMap<String, List<News>>();News newss = new News();MpNews mpNews = new MpNews();nm.setTouser(fromUserName);nmm.setTouser(fromUserName);if(StringUtil.isBlank(wr.getMediaId())){nm.setMsgtype("news");newss.setTitle(wr.getMsgTitle());newss.setDescription(wr.getMsgDescription());newss.setUrl(wr.getMsgUrl());newss.setPicurl(wr.getMsgPicUrl());articles.add(newss);news.put("articles", articles);articles.add(newss);nm.setNews(news);respMessage = JsonHelper.bean2JsonStr(nm);}else{nmm.setMsgtype("mpnews");nmm.setMpnews(mpNews);respMessage = JsonHelper.bean2JsonStr(nmm);}}else if("image".equals(type)){//图片消息ImageMsg iMsg = new ImageMsg();Img img = new Img();iMsg.setTouser(fromUserName);iMsg.setMsgtype("image");img.setMedia_id(wr.getMediaId());iMsg.setImage(img);respMessage = JsonHelper.bean2JsonStr(iMsg);}return respMessage;}
要注意的发送的消息是被动回复是xml格式的,主动回复是json字符串的格式
主动回复图文消息还要分2中,所以要做判断
1.发送图文消息(点击跳转到外链) 图文消息条数限制在8条以内,注意,如果图文数超过8,则将会无响应。
{ "touser":"OPENID", "msgtype":"news", "news":{ "articles": [ { "title":"Happy Day", "description":"Is Really A Happy Day", "url":"URL", "picurl":"PIC_URL" }, { "title":"Happy Day", "description":"Is Really A Happy Day", "url":"URL", "picurl":"PIC_URL" } ] }}
2.发送图文消息(点击跳转到图文消息页面) 图文消息条数限制在8条以内,注意,如果图文数超过8,则将会无响应。
{ "touser":"OPENID", "msgtype":"mpnews", "mpnews": { "media_id":"MEDIA_ID" }}
新手开发,有什么不足之处,还请大家指正。
阅读全文
1 0
- 微信公众号关注一次回复多条消息java开发
- 微信公众号首次关注自动回复图文消息
- 微信开发实战(5)—粉丝关注开发者公众号时,自动回复消息
- 微信开发实战(5)—粉丝关注开发者公众号时,自动回复消息
- 微信开发实战(5)—粉丝关注开发者公众号时,自动回复消息
- 微信公众号开发--关注后自动回复(Java记录篇)
- C#开发微信公众号之消息自动回复
- 微信公众号开发-接收与回复消息
- 微信公众号开发之文本消息自动回复
- 微信公众号开发——关注公众号自动回复
- 用java开发微信公众号:接收和被动回复普通消息(三)
- 微信公众号开发--接收与回复消息(Java)
- 微信公众号开发--接收与回复消息(Java)
- java微信公众号开发入门(3)--简单消息回复
- java微信公众号开发1.普通消息的接受并回复
- JAVA微信公众号开发之自动回复消息与图片
- 微信公众号开发--接收与回复消息(Java)
- 微信公众平台开发之关注时回复
- CSS3-3
- ssm框架maven配置文件pom.xml配置信息
- mac下安装redis命令行
- [BZOJ]2653: middle 线段树合并+二分
- SQlite数据库升级
- 微信公众号关注一次回复多条消息java开发
- 51nod1370 排列与操作
- Tomcat部署项目,if a file is locked
- java网络编程之网络概述
- 没有IDE如何编译JAVA项目
- word笔记
- oracle 前台页面输入框中模糊搜索值传入后台问题
- C++ STL系列(三)Algorithm
- http query parameter的编码问题(备忘录)