微信公众号关注一次回复多条消息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