当前位置: 首页 > 工具软件 > news > 使用案例 >

微信企业号开发三:主动调用模式之发送news消息

蒋正平
2023-12-01

企业可以主动发消息给成员,消息量不受限制

调用接口时,使用Https协议、JSON数据包格式,数据包不需做加密处理。

目前消息型应用支持文本、图片、语音、视频、文件、图文等消息类型。除了news类型,其它类型的消息可在发送时加上保密选项,保密消息会被打上水印,并且只有接收者才能阅读。主页型应用支持文本类型,文本长度不超过20个字。

news消息

{
   "touser": "UserID1|UserID2|UserID3",
   "toparty": " PartyID1 | PartyID2 ",
   "totag": " TagID1 | TagID2 ",
   "msgtype": "news",
   "agentid": 1,
   "news": {
       "articles":[
           {
               "title": "Title",
               "description": "Description",
               "url": "URL",
               "picurl": "PIC_URL"
           },
           {
               "title": "Title",
               "description": "Description",
               "url": "URL",
               "picurl": "PIC_URL"
           }    
       ]
   }
}
参数必须说明
touser成员ID列表(消息接收者,多个接收者用‘|’分隔,最多支持1000个)。特殊情况:指定为@all,则向关注该企业应用的全部成员发送
toparty部门ID列表,多个接收者用‘|’分隔,最多支持100个。当touser为@all时忽略本参数
totag标签ID列表,多个接收者用‘|’分隔。当touser为@all时忽略本参数
msgtype消息类型,此时固定为:news
agentid企业应用的id,整型。可在应用的设置页面查看
articles图文消息,一个图文消息支持1到10条图文
title标题
description描述
url点击后跳转的链接。
picurl图文消息的图片链接,支持JPG、PNG格式,较好的效果为大图640*320,小图80*80。如不填,在客户端不显示图片

---------------------------------------------------------------------------------------------------------------

---------------------------------------------------------------------------------------------------------------

/**
  	 * 主动发送消息
  	 * @param mess
  	 * @return
  	 */
  	public  boolean sendReqMsg(ReqBaseMessage mess){
  		//消息json格式
  		String jsonContext=mess.toJsonStr();
  		//System.out.println(jsonContext);
  		//获得token
  		String token=getTokenFromWx();
		 boolean flag=false;
		 try {
			 CloseableHttpClient httpclient = HttpClients.createDefault();
			 HttpPost httpPost= new HttpPost("https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token="+token);
			 //发送json格式的数据
			 StringEntity myEntity = new StringEntity(jsonContext, 
					   ContentType.create("text/plain", "UTF-8"));
			 //设置需要传递的数据
			 httpPost.setEntity(myEntity);
			 // Create a custom response handler
            ResponseHandler<JSONObject> responseHandler = new ResponseHandler<JSONObject>() {
            	//对访问结果进行处理
                public JSONObject handleResponse(
                        final HttpResponse response) throws ClientProtocolException, IOException {
                    int status = response.getStatusLine().getStatusCode();
                    if (status >= 200 && status < 300) {
                        HttpEntity entity = response.getEntity();
                        if(null!=entity){
                        	String result= EntityUtils.toString(entity);
                            //根据字符串生成JSON对象
                   		 	JSONObject resultObj = JSONObject.fromObject(result);
                   		 	return resultObj;
                        }else{
                        	return null;
                        }
                    } else {
                        throw new ClientProtocolException("Unexpected response status: " + status);
                    }
                }

            };
          //返回的json对象
            JSONObject responseBody = httpclient.execute(httpPost, responseHandler);
            System.out.println(responseBody);
            int result= (Integer) responseBody.get("errcode");
            if(0==result){
            	flag=true;
            }else{
            	flag=false;
            }
			httpclient.close();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		 return flag;
	}

---------------------------------------------------------------------------------------------------------------

------实体类

---------------------------------------------------------------------------------------------------------------

/**
 * 
 * 
 * @author muyunfei
 * 
 * <p>Modification History:</p> 
 * <p>Date       Author      Description</p>
 * <p>------------------------------------------------------------------</p>
 * <p>Apr 8, 2015           牟云飞       		 新建</p>
 */
public class WxNewsMessage extends ReqBaseMessage {
	public  WxNewsMessage(){}
	
	//消息
	public List<WxArticle> news;
	
	
	
	public List<WxArticle> getNews() {
		return news;
	}
	public void setNews(List<WxArticle> news) {
		this.news = news;
	}

	public  WxNewsMessage(String touser, String toparty, String totag,
			String msgtype, String agentid) {
		super();
		super.touser = touser;
		super.toparty = toparty;
		super.totag = totag;
		super.msgtype = msgtype;
		super.agentid = agentid;
	}
	
	public String toJsonStr(){
		StringBuffer jsonStr=new StringBuffer("{");
		StringBuffer str_tmp= new StringBuffer("");
		//"\"touser\": \"@all\",\"msgtype\": \"text\",\"agentid\": \"0\",\"text\": {\"content\": \"helloworld\"},\"safe\": \"0\"}";
		if(null!=touser&&!"".equals(touser)){
			if(!"".equals(str_tmp.toString())){
				str_tmp.append(",");
			}
			str_tmp.append("\"touser\": \""+touser+"\"");
		}
		if(null!=toparty&&!"".equals(toparty)){
			if(!"".equals(str_tmp.toString())){
				str_tmp.append(",");
			}
			str_tmp.append("\"toparty\": \""+toparty+"\"");
		}
		if(null!=totag&&!"".equals(totag)){
			if(!"".equals(str_tmp.toString())){
				str_tmp.append(",");
			}
			str_tmp.append("\"totag\": \""+totag+"\"");
		}
		if(null!=msgtype&&!"".equals(msgtype)){
			//去除空格
			msgtype=msgtype.trim();
			//判断是否加逗号
			if(!"".equals(str_tmp.toString())){
				str_tmp.append(",");
			}
			str_tmp.append("\"msgtype\": \""+msgtype+"\"");
			//新闻消息
			if(null!=news&&0!=news.size()){
				if(!"".equals(str_tmp.toString())){
					str_tmp.append(",");
				}
				StringBuffer content=new StringBuffer("");
				for (int i = 0; i < news.size(); i++) {
					if(i!=0){
						content.append(",");
					}
					content.append("{");
					//获得一条消息
					WxArticle info = news.get(i);
					StringBuffer artileContent=new StringBuffer("");
					if(null!=info.getTitle()&&!"".equals(info.getTitle())){
						if(null!=artileContent.toString()&&!"".equals(artileContent.toString())){
							artileContent.append(",");
						}
						//标题
						artileContent.append("\"title\": \""+info.getTitle()+"\"");
					}
					if(null!=info.getDescription()&&!"".equals(info.getDescription())){
						if(null!=artileContent&&!"".equals(artileContent)){
							artileContent.append(",");
						}
						//描述
						artileContent.append("\"description\": \""+info.getDescription()+"\"");
					}
					if(null!=info.getUrl()&&!"".equals(info.getUrl())){
						if(null!=artileContent&&!"".equals(artileContent)){
							artileContent.append(",");
						}
						//详细地址
						artileContent.append("\"url\": \""+info.getUrl()+"\"");
					}
					if(null!=info.getPicurl()&&!"".equals(info.getPicurl())){
						if(null!=artileContent&&!"".equals(artileContent)){
							artileContent.append(",");
						}
						//图片地址
						artileContent.append("\"picurl\": \""+info.getPicurl()+"\"");
					}
					content.append(artileContent.toString()+"}");
				}
				str_tmp.append("\"news\": {\"articles\":["+content+"]}");
			}
			
		}
		if(null!=agentid&&!"".equals(agentid)){
			if(!"".equals(str_tmp.toString())){
				str_tmp.append(",");
			}
			str_tmp.append("\"agentid\": \""+agentid+"\"");
		}
		
		jsonStr.append(str_tmp);
		jsonStr.append("}");
		return jsonStr.toString();
	}
}

package com.entity.wx.req;

/**
 * 图文model
 */
public class WxArticle {
	// 图文消息名称
	private String title;
	// 图文消息描述
	private String description;
	// 图片链接,支持JPG、PNG格式,较好的效果为大图640*320,小图80*80
	private String picurl;
	// 点击图文消息跳转链接
	private String url;
	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;
	}

	
}

 类似资料: