zoukankan      html  css  js  c++  java
  • 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 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 Exception
    101     {
    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<Map> list = new ArrayList<Map>();
    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 }

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

  • 相关阅读:
    快速排序
    推荐!手把手教你使用Git
    「瞻前顾后」写出我心(九十九)
    「减法」写出我心(九十八)
    「焦虑」写出我心(九十七)
    「认知水平」​​​​​​​​写出我心(九十六)
    「成功的事业」写出我心(九十五)
    「爱」​​​​​​写出我心(九十四)
    「赢」​​​​​写出我心(九十三)
    「体面人」​​​​写出我心(九十二)
  • 原文地址:https://www.cnblogs.com/always-online/p/3871961.html
Copyright © 2011-2022 走看看