吐槽:微信api很无语,部分用xml,部分用json。
最近在找如何调用微信公众平台关于json相关的api比较方便,最后发现httpcliect和gson不错。如果你有更好的方式,请告诉我。
以下代码先了解如何使用gson和httpclient,有功夫再整到我的sophia里
import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.Reader; import java.util.HashMap; import java.util.Map; import org.apache.http.Consts; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.StatusLine; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.HttpResponseException; import org.apache.http.client.ResponseHandler; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPost; import org.apache.http.entity.ContentType; import org.apache.http.entity.StringEntity; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.util.EntityUtils; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.JsonObject; public class JsonTest { /** * 获取access token * @return * @throws ClientProtocolException * @throws IOException */ public static String getToken() throws ClientProtocolException, IOException { CloseableHttpClient httpclient = HttpClients.createDefault(); // String appid = "eeeeeeee"; String secret = "eeeeeeeeeeeeeeee"; HttpGet httpget = new HttpGet("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + appid + "&secret=" + secret) ; ResponseHandler<JsonObject> rh = new ResponseHandler<JsonObject>() { @Override public JsonObject handleResponse( final HttpResponse response) throws IOException { StatusLine statusLine = response.getStatusLine(); HttpEntity entity = response.getEntity(); if (statusLine.getStatusCode() >= 300) { throw new HttpResponseException( statusLine.getStatusCode(), statusLine.getReasonPhrase()); } if (entity == null) { throw new ClientProtocolException("Response contains no content"); } Gson gson = new GsonBuilder().create(); //ContentType contentType = ContentType.getOrDefault(entity); //Charset charset = contentType.getCharset(); Reader reader = new InputStreamReader(entity.getContent()); return gson.fromJson(reader, JsonObject.class); } }; JsonObject myjson = httpclient.execute(httpget, rh); System.out.println(myjson.get("access_token").getAsString()); return myjson.get("access_token").getAsString(); } /** * 下载文件 * @throws ClientProtocolException * @throws IOException */ public static void downloadMediaFile(String token) throws ClientProtocolException, IOException { String mediaId = "fdsddddddddddd"; String url = "http://file.api.weixin.qq.com/cgi-bin/media/get?access_token=ACCESS_TOKEN&media_id=MEDIA_ID"; url = url.replaceAll("ACCESS_TOKEN", token); url = url.replaceAll("MEDIA_ID", mediaId); CloseableHttpClient httpclient = HttpClients.createDefault(); HttpGet httpget = new HttpGet(url); CloseableHttpResponse response = httpclient.execute(httpget); try { HttpEntity entity = response.getEntity(); if (entity != null) { long len = entity.getContentLength(); if (len != -1) { byte[] content = EntityUtils.toByteArray(entity); System.out.println(response.getStatusLine()); OutputStream os = new FileOutputStream("/Users/sssss/abc.jpg"); // 开始读取 os.write(content); // 完毕,关闭所有链接 os.close(); } else { // Stream content out } } } finally { response.close(); } } /** * post json格式数据包 ----- 客服消息 * @param map * @throws ClientProtocolException * @throws IOException */ public static void postJsonData(Map map) throws ClientProtocolException, IOException { String token = "lv3s0iunvVvEj9K3bz12xofvXfW1916ePLqZ7mN6mx7reY-IDzPTrwoErd4pSMD4eSps56QbmbaQ"; String url = "https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=ACCESS_TOKEN"; url = url.replaceAll("ACCESS_TOKEN", token); CloseableHttpClient httpclient = HttpClients.createDefault(); Gson gson = new Gson(); StringEntity entity = new StringEntity(gson.toJson(map), ContentType.create("plain/text", Consts.UTF_8)); entity.setChunked(true); HttpPost httppost = new HttpPost(url); httppost.setEntity(entity); CloseableHttpResponse response = httpclient.execute(httppost); System.out.println(response.getStatusLine()); } public static void main(String[] args) throws ClientProtocolException, IOException { String token = getToken(); downloadMediaFile(token); //客服消息 Map map = new HashMap(); map.put("touser", "o3Y0et021tT_MVK2bdY1DhSWwFCc"); map.put("msgtype", "text"); Map m = new HashMap(); m.put("content", "hello world"); map.put("text", m); postJsonData(map); } }
不好意思,昨天晚上发表文章,csdn老失败。导致只有标题。
时间: 2024-10-23 21:30:00