zoukankan      html  css  js  c++  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-mwvBelOXCFZiq2OsIU-p",
    "author":"xxx",
    "title":"Happy Day",
    "content_source_url":"www.qq.com",
    "content":"content",
    "digest":"digest",
    "show_cover_pic":"1"
    },
    {
    "thumb_media_id":"qI6_Ze_6PtV7svjolgs-rN6stStuHIjs9_DidOHaj0Q-mwvBelOXCFZiq2OsIU-p",
    "author":"xxx",
    "title":"Happy Day",
    "content_source_url":"www.qq.com",
    "content":"content",
    "digest":"digest",
    "show_cover_pic":"0"
    }

         ]
      }

    articles,图文消息,一个图文消息支持1到10条图文
    thumb_media_id,图文消息缩略图的media_id,可以在基础支持-上传多媒体文件接口(java微信接口之三—上传多媒体文件)中获得
    author,图文消息的作者
    title,图文消息的标题
    content_source_url,在图文消息页面点击“阅读原文”后的页面
    content,图文消息页面的内容,支持HTML标签
    digest,图文消息的描述
    show_cover_pic,是否显示封面,1为显示,0为不显示

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

      正确的时候返回的数据:

    {
    "type":"news",
    "media_id":"CsEf3ldqkAYJAU6EJeIkStVDSvffUJ54vqbThMgplD-VJXXof6ctX5fI6-aYyUiQ",
    "created_at":1391857799
    }

       type为媒体文件类型,分别有图片(image)、语音(voice)、视频(video)和缩略图(thumb),次数为news,即图文消息,

      media_id就是上传素材后素材的id,

      created_at表示创建的时间。

      错误的时候返回的数据:{"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 import java.io.File;
      2 import java.util.ArrayList;
      3 import java.util.HashMap;
      4 import java.util.List;
      5 import java.util.Map;
      6 
      7 import org.apache.commons.httpclient.methods.PostMethod;
      8 import org.apache.commons.httpclient.methods.multipart.FilePart;
      9 import org.apache.commons.httpclient.methods.multipart.MultipartRequestEntity;
     10 import org.apache.commons.httpclient.methods.multipart.Part;
     11 import org.apache.http.HttpEntity;
     12 import org.apache.http.HttpResponse;
     13 import org.apache.http.HttpStatus;
     14 import org.apache.http.client.HttpClient;
     15 import org.apache.http.client.methods.HttpGet;
     16 import org.apache.http.impl.client.DefaultHttpClient;
     17 import org.apache.http.util.EntityUtils;
     18 
     19 import com.google.gson.Gson;
     20 import com.google.gson.JsonArray;
     21 import com.google.gson.JsonObject;
     22 import com.google.gson.JsonParser;
     23 
     24 public class Test
     25 {
     26     public static final String GET_TOKEN_URL = "https://api.weixin.qq.com/cgi-bin/token";// 获取access
     27     public static final String UPLOAD_IMAGE_URL = "http://file.api.weixin.qq.com/cgi-bin/media/upload";// 上传多媒体文件
     28     public static final String UPLOAD_FODDER_URL = "https://api.weixin.qq.com/cgi-bin/media/uploadnews";
     29     public static final String APP_ID = "wxa549b28c24cf341e";
     30     public static final String SECRET = "78d8a8cd7a4fa700142d06b96bf44a37";
     31 
     32     /**
     33      * 上传素材
     34      * 
     35      * @param uploadurl
     36      *            apiurl
     37      * @param access_token
     38      *            访问token
     39      * @param data
     40      *            提交数据
     41      * @return
     42      */
     43     public static String uploadFodder(String uploadurl, String access_token,
     44             String data)
     45     {
     46         org.apache.commons.httpclient.HttpClient client = new org.apache.commons.httpclient.HttpClient();
     47         String posturl = String.format("%s?access_token=%s", uploadurl,
     48                 access_token);
     49         PostMethod post = new PostMethod(posturl);
     50         post
     51                 .setRequestHeader(
     52                         "User-Agent",
     53                         "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:30.0) Gecko/20100101 Firefox/30.0");
     54         post.setRequestHeader("Host", "file.api.weixin.qq.com");
     55         post.setRequestHeader("Connection", "Keep-Alive");
     56         post.setRequestHeader("Cache-Control", "no-cache");
     57         String result = null;
     58         try
     59         {
     60             post.setRequestBody(data);
     61             int status = client.executeMethod(post);
     62             if (status == HttpStatus.SC_OK)
     63             {
     64                 String responseContent = post.getResponseBodyAsString();
     65                 System.out.println(responseContent);
     66                 JsonParser jsonparer = new JsonParser();// 初始化解析json格式的对象
     67                 JsonObject json = jsonparer.parse(responseContent)
     68                         .getAsJsonObject();
     69                 if (json.get("errcode") == null)
     70                 {// 正确 { "type":"news", "media_id":"CsEf3ldqkAYJAU6EJeIkStVDSvffUJ54vqbThMgplD-VJXXof6ctX5fI6-aYyUiQ","created_at":1391857799}
     71                     result = json.get("media_id").getAsString();
     72                 }
     73             }
     74         }
     75         catch (Exception e)
     76         {
     77             e.printStackTrace();
     78         }
     79         finally
     80         {
     81             return result;
     82         }
     83     }
     84 
     85     public static void main(String[] args) throws Exception
     86     {
     87         String accessToken = getToken(GET_TOKEN_URL, APP_ID, SECRET);// 获取token在微信接口之一中获取
     88         if (accessToken != null)// token成功获取
     89         {
     90             System.out.println(accessToken);
     91             File file = new File("f:" + File.separator + "2000.JPG"); // 获取本地文件
     92             String id = uploadImage(UPLOAD_IMAGE_URL, accessToken, "image",
     93                     file);// java微信接口之三—上传多媒体文件 可获取
     94             if (id != null)
     95             { 
     96                 //构造数据
     97                 Map map = new HashMap();
     98                 map.put("thumb_media_id", id);
     99                 map.put("author", "wxx");
    100                 map.put("title", "标题");
    101                 map.put("content", "测试fdsfdsfsdfssfdsfsdfsdfs");
    102                 map.put("digest", "digest");
    103                 map.put("show_cover_pic", "0");
    104 
    105                 Map map2 = new HashMap();
    106                 map2.put("thumb_media_id", id);
    107                 map2.put("author", "wxx");
    108                 map2.put("content_source_url", "www.google.com");
    109                 map2.put("title", "标题");
    110                 map2.put("content", "测试fdsfdsfsdfssfdsfsdfsdfs");
    111                 map2.put("digest", "digest");
    112 
    113                 Map map3 = new HashMap();
    114                 List<Map> list = new ArrayList<Map>();
    115                 list.add(map);
    116                 list.add(map2);
    117                 map3.put("articles", list);
    118 
    119                 Gson gson = new Gson();
    120                 String result = gson.toJson(map3);//转换成json数据格式
    121                 String mediaId = uploadFodder(UPLOAD_FODDER_URL, accessToken,
    122                         result);
    123                 if (mediaId != null)
    124                 {
    125                     System.out.println(mediaId);
    126                 }
    127             }
    128         }
    129     }
    130 }

      上传成功就会打印该素材id。

  • 相关阅读:
    MF研究:TinyCLR运行时原理
    不到600美元,即可获取一套MF Porting kit 3.0
    SideShow Gadget开发[1]
    我眼中的WinHEC大会台前幕后
    Visual C++ 2008入门经典 第四章数组 字符串(二) 简单
    PHP的常用函数 简单
    Visual C++ 2008入门经典 第五章程序结构(二) 简单
    用PHP将Unicode 转化为UTF8 简单
    sql GROUP_CONCAT(... SEPARATOR) 简单
    Visual C++ 2008入门经典 第四章数组 字符串(练习题) 简单
  • 原文地址:https://www.cnblogs.com/always-online/p/3871679.html
Copyright © 2011-2022 走看看