一、微信上傳素材接口簡介
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。