在我们搭建好微信开发环境后,会在官网里看到超级多接口,下面我这里举三个例子来测试一下接口的调用。
废话不多说,因为太简单了,直接上代码,三个接口测试如下:
/*** 微信公总号开发接口工具类* @author suibibk@qq.com**/public class WeiXinAPI {private static String grant_type = "client_credential";private static String appid = "**********";private static String secret ="************************";/*** 获取AccessToken 有效期是7200秒,建议缓存到redis或者内存中* @return* @throws Exception*/public static String getAccessToken(){String httpPath="https://api.weixin.qq.com/cgi-bin/token?grant_type="+grant_type+"&appid="+appid+"&secret="+secret;String result = HttpUtils.doGet(httpPath);JsonParser parser = new JsonParser();JsonObject object=(JsonObject) parser.parse(result);String access_token=object.get("access_token").getAsString();System.out.println("调接口获取的access_token:"+access_token);return access_token;}/*** 生成永久性二维码* @param accessToken* @param scene_str 场景值* @return* @throws Exception*/public static String createQRCode(String accessToken, String scene_str){String url ="https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token="+accessToken;String json = "{\"action_name\": \"QR_LIMIT_STR_SCENE\", \"action_info\": {\"scene\": {\"scene_str\": \""+scene_str+"\"}}}";String result = HttpUtils.doPost(url, json);JsonParser parser = new JsonParser();JsonObject object=(JsonObject) parser.parse(result);String qrurl=object.get("url").getAsString();System.out.println(qrurl);return qrurl;}/*** 长连接诶生成短连接接口* @param accessToken* @param long_url* @return* @throws Exception*/public static String long2short(String accessToken,String long_url){String url ="https://api.weixin.qq.com/cgi-bin/shorturl?access_token="+accessToken;Gson gson = new Gson();Map<String,Object> map = new HashMap<String,Object>();map.put("action", "long2short");map.put("long_url", long_url);String json = gson.toJson(map);String result = HttpUtils.doPost(url, json);JsonParser parser = new JsonParser();JsonObject object=(JsonObject) parser.parse(result);String errcode=object.get("errcode").getAsString();String short_url = "";if("0".equals(errcode)) {short_url = object.get("short_url").getAsString();System.out.println(short_url);}return short_url;}public static void main(String[] args) {String access_token = getAccessToken();createQRCode(access_token,"HDWUERYUWEIR");long2short(access_token,"https://read.suibibk.com/chapter/a4bf5896f49a11e9978300163e0a1f06");}}
我们主要是获取两个必须的参数:appid和secret,这个在微信公众号管理平台有,还有一个就是http请求的工具类,这里主要进行简单的get请求以及post请求,返回值是String如下:
/*** setConnectTimeout:设置连接超时时间,单位毫秒。setConnectionRequestTimeout:设置从connect Manager(连接池)获取Connection 超时时间,单位毫秒。这个属性是新加的属性,因为目前版本是可以共享连接池的。setSocketTimeout:请求获取数据的超时时间(即响应时间),单位毫秒。 如果访问一个接口,多少时间内无法返回数据,就直接放弃此次调用。*//*** http请求工具类* @author lwh* @date 20181130*/public class HttpUtils {private static final Integer CONNECT_TIMEOUT = 5000;//接超时时间,单位毫秒private static final Integer CONNECT_REQUEST_TIMEOUT = 1000;//从connect Manager(连接池)获取Connection 超时时间,单位毫秒。private static final Integer SOCKET_TIMEOUT = 5000;//响应时间private static final Log log = LogFactory.getLog(HttpUtils.class);/*** url get请求* @param url 访问的url* @return* @throws Exception*/public static String doGet(String url){String result = "";log.info("get请求的url:"+url);try {HttpResponse response = doGet(url, null, CONNECT_TIMEOUT, CONNECT_REQUEST_TIMEOUT, SOCKET_TIMEOUT);result = getString(response);} catch (Exception e) {// TODO: handle exceptionlog.info(e.getMessage());}log.info("返回的值:"+result);return result;}/*** url post请求* @param url 请求的url* @param json 传输的json信息,建议全部转换成json回来* @return* @throws Exception*/public static String doPost(String url,String json) {String result = "";log.info("post请求的url:"+url);try {HttpResponse response = doPost(url, json, CONNECT_TIMEOUT, CONNECT_REQUEST_TIMEOUT, SOCKET_TIMEOUT);result = getString(response);} catch (Exception e) {// TODO: handle exceptionlog.info(e.getMessage());}log.info("返回的值:"+result);return result;}public static HttpResponse doGet(String path,Map<String, String> querys,Integer connectTimeout,Integer ConnectionRequestTimeout,Integer responseConnectTimeout)throws Exception {HttpClient httpClient = wrapClient(path);HttpGet request = new HttpGet(path);RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(connectTimeout).setConnectionRequestTimeout(ConnectionRequestTimeout).setSocketTimeout(responseConnectTimeout).build();request.setConfig(requestConfig);return httpClient.execute(request);}public static HttpResponse doPost(String path,Map<String, Object> bodys,Integer connectTimeout,Integer ConnectionRequestTimeout,Integer responseConnectTimeout)throws Exception {HttpClient httpClient = wrapClient(path);HttpPost request = new HttpPost(path);RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(5000).setConnectionRequestTimeout(1000).setSocketTimeout(5000).build();request.setConfig(requestConfig);if (bodys != null) {List<NameValuePair> nameValuePairList = new ArrayList<NameValuePair>();for (String key : bodys.keySet()) {nameValuePairList.add(new BasicNameValuePair(key, bodys.get(key).toString()));}UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(nameValuePairList, "utf-8");formEntity.setContentType("application/x-www-form-urlencoded; charset=UTF-8");request.setEntity(formEntity);}return httpClient.execute(request);}public static HttpResponse doPost(String path,String jsonBody,Integer connectTimeout,Integer ConnectionRequestTimeout,Integer responseConnectTimeout)throws Exception {HttpClient httpClient = wrapClient(path);HttpPost request = new HttpPost(path);RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(5000).setConnectionRequestTimeout(1000).setSocketTimeout(5000).build();request.setConfig(requestConfig);if (jsonBody != null) {@SuppressWarnings("deprecation")StringEntity entity = new StringEntity(jsonBody, "text/xml", "utf-8");entity.setContentType("application/x-www-form-urlencoded; charset=UTF-8");request.setEntity(entity);}return httpClient.execute(request);}/*** 获取 HttpClient* @param path* @return*/private static HttpClient wrapClient(String path) {HttpClient httpClient = HttpClientBuilder.create().build();if (path != null && path.startsWith("https://")) {return sslClient();}return httpClient;}/*** 在调用SSL之前需要重写验证方法,取消检测SSL* 创建ConnectionManager,添加Connection配置信息* @return HttpClient 支持https*/private static HttpClient sslClient() {try {// 在调用SSL之前需要重写验证方法,取消检测SSLX509TrustManager trustManager = new X509TrustManager() {public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {}public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {}public X509Certificate[] getAcceptedIssuers() {return null;}};SSLContext ctx = SSLContext.getInstance(SSLConnectionSocketFactory.TLS);ctx.init(null, new TrustManager[] { trustManager }, null);SSLConnectionSocketFactory socketFactory = new SSLConnectionSocketFactory(ctx, NoopHostnameVerifier.INSTANCE);// 创建RegistryRequestConfig requestConfig = RequestConfig.custom().setCookieSpec(CookieSpecs.STANDARD_STRICT).setExpectContinueEnabled(Boolean.TRUE).setTargetPreferredAuthSchemes(Arrays.asList(AuthSchemes.NTLM,AuthSchemes.DIGEST)).setProxyPreferredAuthSchemes(Arrays.asList(AuthSchemes.BASIC)).build();Registry<ConnectionSocketFactory> socketFactoryRegistry = RegistryBuilder.<ConnectionSocketFactory>create().register("http", PlainConnectionSocketFactory.INSTANCE).register("https",socketFactory).build();// 创建ConnectionManager,添加Connection配置信息PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager(socketFactoryRegistry);CloseableHttpClient closeableHttpClient = HttpClients.custom().setConnectionManager(connectionManager).setDefaultRequestConfig(requestConfig).build();return closeableHttpClient;} catch (KeyManagementException ex) {throw new RuntimeException(ex);} catch (NoSuchAlgorithmException ex) {throw new RuntimeException(ex);}}public static String getString(HttpResponse httpResponse) throws IOException {HttpEntity entity = httpResponse.getEntity();String resp = EntityUtils.toString(entity, "UTF-8");return resp;}public static void main(String[] args) throws Exception {String url ="https://www.suibibk.com/blog/579412311547052032/555875030676799488/639387539102236672";System.out.println(doGet(url));System.out.println(doPost(url,null));}}
JSON以及Http请求需要的maven依赖如下:
<dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId><version>4.5.5</version></dependency><!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpcore --><dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpcore</artifactId><version>4.4.9</version></dependency><dependency><groupId>com.google.code.gson</groupId><artifactId>gson</artifactId><version>2.8.5</version></dependency>

