Skip to content

MP_如何调用未支持的接口

chanjarster edited this page Nov 3, 2014 · 1 revision

本项目是由个人兴趣发起的项目,所以有时候会比微信官方开放的api要慢一些,如果急着需要使用某个api的话,可以直接使用WxMpService的下列3个方法来救急:

  1. String get(String url, String queryParam) throws WxErrorException;
  2. String post(String url, String postData) throws WxErrorException;
  3. public <T, E> T execute(RequestExecutor<T, E> executor, String uri, E data) throws WxErrorException;

这三个方法都带有自动刷新access_token和遇到errcode抛出WxErrorException的功能,所以使用的时候只需专注于业务实现就行了。

getpost方法返回的是String,也就是微信服务器返回的内容。你可以拿这个String返回值自己处理。

或者使用比较高级的execute方法,T是返回值类型,E是参数类型,可以参考项目里的mediaUpload方法:

  public WxMediaUploadResult mediaUpload(String mediaType, File file) throws WxErrorException {
    String url = "http://file.api.weixin.qq.com/cgi-bin/media/upload?type=" + mediaType;
    return execute(new MediaUploadRequestExecutor(), url, file);
  }
public class MediaUploadRequestExecutor implements RequestExecutor<WxMediaUploadResult, File> {

  @Override
  public WxMediaUploadResult execute(CloseableHttpClient httpclient, HttpHost httpProxy, String uri, File file) throws WxErrorException, ClientProtocolException, IOException {
    HttpPost httpPost = new HttpPost(uri);
    if (httpProxy != null) {
      RequestConfig config = RequestConfig.custom().setProxy(httpProxy).build();
      httpPost.setConfig(config);
    }
    if (file != null) {
      HttpEntity entity = MultipartEntityBuilder
            .create()
            .addBinaryBody("media", file)
            .build();
      httpPost.setEntity(entity);
      httpPost.setHeader("Content-Type", ContentType.MULTIPART_FORM_DATA.toString());
    }
    CloseableHttpResponse response = httpclient.execute(httpPost);
    String responseContent = Utf8ResponseHandler.INSTANCE.handleResponse(response);
    WxError error = WxError.fromJson(responseContent);
    if (error.getErrorCode() != 0) {
      throw new WxErrorException(error);
    }
    return WxMediaUploadResult.fromJson(responseContent);
  }

}
Clone this wiki locally