微信公众号关注一次回复多条消息java开发

最近公司在做一个微信公众号,由于刚接触,也参考了不少网上的资料。领导要求关注、默认和关键字回复可以返回多条消息,网上翻阅的半天发现只能是被动回复一条+上主动推送若干条,最后以这样的方式完成了这个需求,现贴出来,给大家一个参考。实体类网上有的部分就不贴了,贴我自己写的部分

关注回复若干条

// 判断行为是订阅
				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());
			//转换xml
			respMessage = MessageUtil.textMessageToXml(textMessage);  
		}else if("news".equals(type)){
			//图文类型list
			List<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_id
			image.setMediaId(wr.getMediaId());
			imageMessage.setImage(image);
			//转换成xml
			respMessage = 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"
    }
}

新手开发,有什么不足之处,还请大家指正。


  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值