使用gson和httpclient呼叫微信公众平台API
吐槽:微信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>() {@Overridepublic 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老失败。
导致只有一个标题。
版权声明:本文博客原创文章,博客,未经同意,不得转载。
使用gson和httpclient呼叫微信公众平台API相关推荐
- 神卓互联内网穿透微信公众平台 API 实现微信登录
神卓互联是一家专注于内网穿透和互联网软件开发的公司,其提供的内网穿透服务和微信开发能够满足众多企业和个人的需求.本文将介绍神卓互联的内网传统微信开发服务. 在内网中使用微信开发具有一定的困难,因为微信 ...
- 【转】微信公众平台API
<?php /*** 微信公众平台API* * @author maojianlw@139.com* @link http://www.eaglephp.com*/ class WeixinCh ...
- 微信公众平台服务器的官方示例代码,微信公众平台API接口(示例代码)
简介 微信公众平台消息接口为开发者提供了一种新的消息处理方式.微信公众平台消息接口为开发者提供与用户进行消息交互的能力.对于成功接入消息接口的微信公众账号,当用户发消息给公众号,微信公众平台服务器会使 ...
- 微信公众平台API接口开发教程
简介 微信公众平台消息接口为开发者提供了一种新的消息处理方式.微信公众平台消息接口为开发者提供与用户进行消息交互的能力.对于成功接入消息接口的微信公众账号,当用户发消息给公众号,微信公众平台服务器会使 ...
- 调用微信公众平台API免费给自己发消息
素材: 注册 微信公众平台的订阅号 开通开发者中心功能,注册公众平台测试账号.获取到appID和appsecret 摘要: 使用Python 2.7 基于 微信'公众平台测试账号'的appID和app ...
- java微信公众平台开发接口_微信公众平台API的Java通讯实现
微信公众平台 相信大家也不陌生,官方网站提供了一个简单的php程序Demo 因为微信平台采用HTTP方式承载微信的协议,而且不是双向通讯,也就是说只能由微信服务器主动请求我们的服务器.其实当你使用我开 ...
- 用 Rails 搭建微信公众平台 API
微信 API 简介 先来看看 API 的工作流程和机制 微信公众平台的账户可以开启"开发模式"(在"高级功能"中),开启之后,用户发送微信到你的账户时,将有如下 ...
- 微信公众平台api下载php,微信公众平台消息接口PHP版
使用前提条件:拥有一个公网上的HTTP服务器主机空间,具有创建目录.上传文件等权限.推荐新浪的SAE.http://sae.sina.com.cn/ 首先请注册微信公众平台的账号,注册地址:http: ...
- php微信公众平台API接口(thinkphp5)
整合了微信公众号的接口.包括但不限于:获取access_token,自定义菜单,消息管理,用户管理等.持续更新...下一步增加微信支付和支付宝支付接口 更多详细信息和更新可访问项目github地址,请 ...
最新文章
- 【每日一算法】重排链表
- 半导体产业格局:行稳而致远,强者将恒强
- 点云的无序性_PU-Net:解决3D点云数据的上采样问题
- [转载]从12306谈起验证码的架构
- C++ Primer 5th笔记(chap 14 重载运算和类型转换)算术和关系运算符
- django中的认证登陆与用户的创建
- 如何获取元素在父级div里的位置_关于元素的浮动你了解多少
- select默认选中的option_macOS下妙用option按键
- Mysql 启动报错解析:Starting MySQL.. ERROR! The server quit without updating PID file (/usr/local/mysql/dat
- arm中断保护和恢复_浅谈ARM处理器的七种异常处理
- 动态添加控件[可重复同一控件]
- 10php1c,PHP程序员,进阶选择C还是C++亦或者别语言
- 手机modem开发(4)---高通QXDM抓modem log
- java的gc策略_Java的GC与内存分配策略
- 四阶行列式直接展开_【Just For Fun】n 階行列式計算 宏 生成器,四阶行列式的最优展开...
- linux下配置环境变量方式
- css美化浏览器默认滚动条样式
- 微信小程序获取验证码
- 六一儿童节海报合集,一起重拾童年吧~
- 3、基于竞速小车 实现 华为hi lens红绿灯识别操作
热门文章
- Tomcat的Maven插件使用方法(在idea里面运行Tomcat)
- ACL2021--ChineseBert论文分享
- 上海名校计算机专业第一本科生:我5天里打工3天,丝毫不影响GPA,可见「教学」有多荒谬...
- 记录国外大学精彩的研究内容
- c语言求学生平均分 总分结构体,c语言 已知学生三门课程基本信息如下。请使用结构体编程,计算学生三门课程平均成绩后,列表输出学生的姓名、数学、英语、计算机、平均分信息,并按平均分排序。(...
- 【Mac】nginx 安装与配置
- Java Web 文件上传下载
- java案例大象和鹦鹉_小象调皮装死,象妈妈急忙找来饲养员,被拆穿后小象反应太可爱...
- 重庆高中自考本科最快需要多久?
- Linux笔记 No.28---( rsync服务、SSH服务)