博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java微信接口之五—消息分组群发
阅读量:5994 次
发布时间:2019-06-20

本文共 7886 字,大约阅读时间需要 26 分钟。

一、微信消息分组群发接口简介

  1、请求:该请求是使用post提交地址为: 

  https://api.weixin.qq.com/cgi-bin/message/mass/sendall?access_token=ACCESS_TOKEN

    其中ACCESS_TOKEN是我们动态获取的

    发送的数据:(这里使用图文消息示例)

{   "filter":{      "group_id":"2"   },   "mpnews":{      "media_id":"123dsdajkasd231jhksad"   },    "msgtype":"mpnews"}

  filter,用于设定图文消息的接收者;

  group_id,群发到的分组的group_id(可在java微信接口之二—获取用户组);

  mpnews,用于设定即将发送的图文消息;

  media_id, 用于群发的消息的media_id(可在java微信接口之四—上传素材中获取);  msgtype,群发的消息类型,图文消息为mpnews,文本消息为text,语音为voice,音乐为music,图片为image,视频为video.

 2、响应:该响应也是以json方式返回的

  正确的时候返回的数据: 

{   "errcode":0,   "errmsg":"send job submission success",   "msg_id":34182}

  errcode 错误码

  errmsg 错误信息
  msg_id 消息ID 

  错误的时候返回的数据:{"errcode":40004,"errmsg":"invalid media type"}

  errcode,为错误代码,errmsg为错误信息

  具体api可查看:

二、关于java代码的调用

  该接口的调用与java微信接口四—上传素材一样,需要使用到commons-httpclient。其中数据是构造成json数据后,放在post方法请求体里面发送给服务器端。

三、代码实现

 

1 package com.demo.test;  2   3 import java.io.File;  4 import java.util.ArrayList;  5 import java.util.HashMap;  6 import java.util.List;  7 import java.util.Map;  8   9 import org.apache.commons.httpclient.methods.PostMethod; 10 import org.apache.commons.httpclient.methods.multipart.FilePart; 11 import org.apache.commons.httpclient.methods.multipart.MultipartRequestEntity; 12 import org.apache.commons.httpclient.methods.multipart.Part; 13 import org.apache.http.HttpEntity; 14 import org.apache.http.HttpResponse; 15 import org.apache.http.HttpStatus; 16 import org.apache.http.client.HttpClient; 17 import org.apache.http.client.methods.HttpGet; 18 import org.apache.http.impl.client.DefaultHttpClient; 19 import org.apache.http.util.EntityUtils; 20  21 import com.google.gson.Gson; 22 import com.google.gson.JsonArray; 23 import com.google.gson.JsonObject; 24 import com.google.gson.JsonParser; 25  26 public class Test 27 { 28     public static final String GET_TOKEN_URL = "https://api.weixin.qq.com/cgi-bin/token";// 获取access 29     public static final String UPLOAD_IMAGE_URL = "http://file.api.weixin.qq.com/cgi-bin/media/upload";// 上传多媒体文件 30     public static final String UPLOAD_FODDER_URL = "https://api.weixin.qq.com/cgi-bin/media/uploadnews"; 31     public static final String GET_USER_GROUP = "https://api.weixin.qq.com/cgi-bin/groups/get"; // url 32     public static final String SEND_MESSAGE_URL = "https://api.weixin.qq.com/cgi-bin/message/mass/sendall"; 33     public static final String APP_ID = "wxa549b28c24cf341e"; 34     public static final String SECRET = "78d8a8cd7a4fa700142d06b96bf44a37"; 35  36  37     /** 38      * 发送消息 39      *  40      * @param uploadurl 41      *            apiurl 42      * @param access_token 43      * @param data 44      *            发送数据 45      * @return 46      */ 47     public static String sendMsg(String url, String token, String data) 48     { 49         org.apache.commons.httpclient.HttpClient client = new org.apache.commons.httpclient.HttpClient(); 50         String sendurl = String.format("%s?access_token=%s", url, token); 51         PostMethod post = new UTF8PostMethod(sendurl); 52         post 53                 .setRequestHeader( 54                         "User-Agent", 55                         "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:30.0) Gecko/20100101 Firefox/30.0"); 56  57         post.setRequestHeader("Host", "file.api.weixin.qq.com"); 58         post.setRequestHeader("Connection", "Keep-Alive"); 59         post.setRequestHeader("Cache-Control", "no-cache"); 60         String result = null; 61         try 62         { 63             post.setRequestBody(data); 64             int status = client.executeMethod(post); 65             if (status == HttpStatus.SC_OK) 66             { 67                 String responseContent = post.getResponseBodyAsString(); 68                 System.out.println(responseContent); 69                 JsonParser jsonparer = new JsonParser();// 初始化解析json格式的对象 70                 JsonObject json = jsonparer.parse(responseContent) 71                         .getAsJsonObject(); 72                 if (json.get("errcode") != null 73                         && json.get("errcode").getAsString().equals("0")) 74                 { 75                     result = json.get("errmsg").getAsString(); 76                 } 77             } 78         } 79         catch (Exception e) 80         { 81             e.printStackTrace(); 82         } 83         finally 84         { 85             return result; 86         } 87     } 88      89     public static class UTF8PostMethod extends PostMethod {
//防止发送的消息产生乱码 90 public UTF8PostMethod(String url) { 91 super(url); 92 } 93 94 @Override 95 public String getRequestCharSet() {
//文本编码格式 96 return "UTF-8"; 97 } 98 } 99 100 public static void main(String[] args) throws Exception101 {102 String accessToken = getToken(GET_TOKEN_URL, APP_ID, SECRET);// 获取token在微信接口之一中获取103 if (accessToken != null)// token成功获取104 {105 System.out.println(accessToken);106 File file = new File("f:" + File.separator + "2000.JPG"); // 获取本地文件107 String id = uploadImage(UPLOAD_IMAGE_URL, accessToken, "image",108 file);// java微信接口之三—上传多媒体文件 可获取109 if (id != null)110 {111 // 构造数据112 Map map = new HashMap();113 map.put("thumb_media_id", id);114 map.put("author", "wxx");115 map.put("title", "标题");116 map.put("content", "测试fdsfdsfsdfssfdsfsdfsdfs");117 map.put("digest", "digest");118 map.put("show_cover_pic", "0");119 120 Map map2 = new HashMap();121 map2.put("thumb_media_id", id);122 map2.put("author", "wxx");123 map2.put("content_source_url", "www.google.com");124 map2.put("title", "标题");125 map2.put("content", "测试fdsfdsfsdfssfdsfsdfsdfs");126 map2.put("digest", "digest");127 128 Map map3 = new HashMap();129 List list = new ArrayList();130 list.add(map);131 list.add(map2);132 map3.put("articles", list);133 134 Gson gson = new Gson();135 String result = gson.toJson(map3);// 转换成json数据格式136 String mediaId = uploadFodder(UPLOAD_FODDER_URL, accessToken,137 result);138 if (mediaId != null)139 {140 String ids = getGroups(GET_USER_GROUP, accessToken);// 在java微信接口之二—获取用户组141 if (ids != null)142 {143 String[] idarray = ids.split(",");// 用户组id数组144 for (String gid : idarray)145 {146 147 JsonObject jObj = new JsonObject();148 JsonObject filter = new JsonObject();149 filter.addProperty("group_id", gid);150 jObj.add("filter", filter);151 152 153 JsonObject mpnews = new JsonObject();154 mpnews.addProperty("media_id", mediaId);155 jObj.add("mpnews", mpnews);156 157 jObj.addProperty("msgtype", "mpnews"); 158 System.out.println(jObj.toString());159 160 String result2 = sendMsg(SEND_MESSAGE_URL,161 accessToken, jObj.toString());162 System.out.println(result2);163 }164 }165 }166 167 }168 }169 }170 }

  发成功后会打印消息,但由于微信服务器的原因,消息不会立即发送,会过一段时间发送。

转载地址:http://yrmlx.baihongyu.com/

你可能感兴趣的文章
消息队列NetMQ 原理分析4-Socket、Session、Option和Pipe
查看>>
【译】历史上的名人如何利用不同的思维方式成就自己
查看>>
用CSS开启硬件加速来提高网站性能(转)
查看>>
netty支持的协议
查看>>
增强版字典DictionaryEx
查看>>
ASP.NET页面刷新的实现方法总结
查看>>
夏梦竹谈Hive vs. HBase的区别
查看>>
Ignite用户配置管理介绍
查看>>
PHP精选数组函数
查看>>
用Fine Uploader+ASP.NET MVC实现ajax文件上传[代码示例]
查看>>
Java工具类
查看>>
JS地毯式学习二
查看>>
Struts2学习笔记1
查看>>
自定义String类,并且实现在STL容器中添加自定义的类型
查看>>
GreenDAO - primary key on multiple columns
查看>>
SVN 中trunk、tags、branches使用
查看>>
【BZOJ】1631: [Usaco2007 Feb]Cow Party(dijkstra)
查看>>
Zabbix监控系统深度实践
查看>>
Windows8.1和Ubuntu14.04双系统卸载Ubuntu參考教程[图]
查看>>
EF架构~XMLRepository仓储的实现~续(XAttribute方式)
查看>>