java微信接口之五—消息分组群发

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

  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可查看:http://mp.weixin.qq.com/wiki/index.php?title=%E9%AB%98%E7%BA%A7%E7%BE%A4%E5%8F%91%E6%8E%A5%E5%8F%A3

二、关于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 PostMethod(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 void main(String[] args) throws Exception
 90     {
 91         String accessToken = getToken(GET_TOKEN_URL, APP_ID, SECRET);// 获取token在微信接口之一中获取
 92         if (accessToken != null)// token成功获取
 93         {
 94             System.out.println(accessToken);
 95             File file = new File("f:" + File.separator + "2000.JPG"); // 获取本地文件
 96             String id = uploadImage(UPLOAD_IMAGE_URL, accessToken, "image",
 97                     file);// java微信接口之三—上传多媒体文件 可获取
 98             if (id != null)
 99             {
100                 // 构造数据
101                 Map map = new HashMap();
102                 map.put("thumb_media_id", id);
103                 map.put("author", "wxx");
104                 map.put("title", "标题");
105                 map.put("content", "测试fdsfdsfsdfssfdsfsdfsdfs");
106                 map.put("digest", "digest");
107                 map.put("show_cover_pic", "0");
108
109                 Map map2 = new HashMap();
110                 map2.put("thumb_media_id", id);
111                 map2.put("author", "wxx");
112                 map2.put("content_source_url", "www.google.com");
113                 map2.put("title", "标题");
114                 map2.put("content", "测试fdsfdsfsdfssfdsfsdfsdfs");
115                 map2.put("digest", "digest");
116
117                 Map map3 = new HashMap();
118                 List<Map> list = new ArrayList<Map>();
119                 list.add(map);
120                 list.add(map2);
121                 map3.put("articles", list);
122
123                 Gson gson = new Gson();
124                 String result = gson.toJson(map3);// 转换成json数据格式
125                 String mediaId = uploadFodder(UPLOAD_FODDER_URL, accessToken,
126                         result);
127                 if (mediaId != null)
128                 {
129                     String ids = getGroups(GET_USER_GROUP, accessToken);// 在java微信接口之二—获取用户组
130                     if (ids != null)
131                     {
132                         String[] idarray = ids.split(",");// 用户组id数组
133                         for (String gid : idarray)
134                         {
135
136                             JsonObject jObj = new JsonObject();
137                             JsonObject filter = new JsonObject();
138                             filter.addProperty("group_id", gid);
139                             jObj.add("filter", filter);
140
141
142                             JsonObject mpnews = new JsonObject();
143                             mpnews.addProperty("media_id", mediaId);
144                             jObj.add("mpnews", mpnews);
145
146                             jObj.addProperty("msgtype", "mpnews");
147                             System.out.println(jObj.toString());
148
149                             String result2 = sendMsg(SEND_MESSAGE_URL,
150                                     accessToken, jObj.toString());
151                             System.out.println(result2);
152                         }
153                     }
154                 }
155
156             }
157         }
158     }
159 }

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

java微信接口之五—消息分组群发,布布扣,bubuko.com

时间: 2024-09-29 01:31:31

java微信接口之五—消息分组群发的相关文章

java微信接口之四—上传素材

一.微信上传素材接口简介 1.请求:该请求是使用post提交地址为: https://api.weixin.qq.com/cgi-bin/media/uploadnews?access_token=ACCESS_TOKEN 其中ACCESS_TOKEN是我们动态获取的. 发送的数据: {"articles":[ { "thumb_media_id":"qI6_Ze_6PtV7svjolgs-rN6stStuHIjs9_DidOHaj0Q-mwvBelOXC

微信接口图文消息群发,预览

上来就直接贴代码了,具体问题放到最后说,这个类我将方法全都封装在里面了,基本上拿去修改一下就可以用了 using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Text.RegularExpressions;using Newtonsoft.Json;using System.Web.SessionState;using Website_CS;using mgtArt

java微信接口开发java SpringMVC mybatis 后台框架 集成代码生成器开发利器

获取[下载地址]   QQ: 313596790   [免费支持更新]支持三大数据库 mysql  oracle  sqlsever   更专业.更强悍.适合不同用户群体[新录针对本系统的视频教程,手把手教开发一个模块,快速掌握本系统]A 代码生成器(开发利器);      增删改查的处理类,service层,mybatis的xml,SQL( mysql   和oracle)脚本,   jsp页面 都生成   就不用写搬砖的代码了,生成的放到项目里,可以直接运行B 阿里巴巴数据库连接池druid

java 微信自定义菜单 java微信接口开发 公众平台 SSM redis shiro 多数据源

获取[下载地址]   QQ: 313596790官网 http://www.fhadmin.org/A 调用摄像头拍照,自定义裁剪编辑头像,头像图片色度调节B 集成代码生成器 [正反双向](单表.主表.明细表.树形表,快速开发利器)+快速表单构建器 freemaker模版技术 ,0个代码不用写,生成完整的一个模块,带页面.建表sql脚本,处理类,service等完整模块C 集成阿里巴巴数据库连接池druid  数据库连接池  阿里巴巴的 druid.Druid在监控.可扩展性.稳定性和性能方面都

java微信接口之三—上传多媒体文件

一.微信上传多媒体接口简介 1.请求:该请求是使用post提交from来实现的,我们可以在网页上进行表单提交来实现.地址为: http://file.api.weixin.qq.com/cgi-bin/media/upload?access_token=ACCESS_TOKEN&type=TYPE 其中ACCESS_TOKEN是我们动态获取的,TYPE是 媒体文件类型.有以下几种类型:,分别有图片(image).语音(voice).视频(video)和缩略图(thumb). post提交的数据就

Java - 微信公众号 - 消息回复

1.开发接入 (1)更改入门教程中的Controller:  注(验证是属于GET,然而交互是属于POST) @RequestMapping(value = "/getMsg", method = {RequestMethod.GET, RequestMethod.POST}) public void getMsg(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException

java微信接口之二—获取用户组

一.微信获取用户组接口简介 1.请求 该请求也是GET方式请求.请求的url格式如下: https://api.weixin.qq.com/cgi-bin/groups/get?access_token=ACCESS_TOKEN 其中ACCESS_TOKEN是之前我们获取到的. 2.响应 该响应也是以json方式返回的 正确的时候返回的数据: { "groups": [ { "id": 0, "name": "未分组", &q

java微信接口之——获取access_token

一.微信获取access_token接口简介 1.请求:该请求是GET方式请求,所以要携带的参数都是附加到url后面传递给微信服务器.请求的url格式如下: https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET 其中,APPID与APPSECRET都我们开发的时候自己帐号申请的. 2.响应:返回数据都是json数据,格式如下: 正确的时候返回的数据:

资深程序员教你用Python如何调企业微信接口发送消息!叼的不行!

进入正题 先来几张好玩的图片 首先进入python交互界面,导入我自己写的模块,然后发一个测试消 息,"Hello,小伙伴们好!",然后看看企业号能否收到相应的消息. 那么问题来了,既然可以这么玩,那岂不可以把所有能通知的信息都可以通过python调用接口发送信息了?那当然了,可以把自己感兴趣的用爬虫爬下来,然后发给自己,也可以用于报警等信息,还可以......就看你自己怎么玩吧 上图第一行嘛,就是python解释器的绝对路径,也就是你python的安装路径,自行修改即可.第二行申明编