微信公众号开发 公众号接口开发 封装统一的GET/POST请求接口

10万+IT人都在关注,史上最全面的微信开发实战教程:包含公众号,小程序,微信支付等开发案例

欢迎关注笔者个人博客:http://blogs.chenyunkeji.com/

在微信公众号/小程序开发过程中,后端服务要用到微信公众平台提供的各种接口,比如创建个性化菜单的接口,网页授权接口,消息事件接口等,事件推送接口等,几乎大多数的微信接口都要用到GET/POST方式的http请求,那么就需要封装一款通用的高效的统一请求接口,笔者把封装好的代码分享出来,这里涉及到2个工具类和1个依赖jar,工具类分别是1个是信任管理器工具类,1个是具体的请求接口工具类,依赖的jar见下面的maven依赖,本案例使用Java语言,笔者相关博客中都会用到这2个工具类,需要的开发者朋友直接粘贴拿走就可用,下面直接看具体代码:

一、引入maven依赖jar

<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
</dependency>

二、信任管理器工具类

/**
 * 创建时间:2019年3月19日 下午3:47:54
 * 类说明:信任管理器工具类
 * @author guobinhui
 * @since JDK 1.8.0_51
 */

public class MyX509TrustManager implements X509TrustManager{

    @Override
    public void checkClientTrusted(X509Certificate[] arg0, String arg1) throws CertificateException {
        // TODO Auto-generated method stub
    }

    @Override
    public void checkServerTrusted(X509Certificate[] arg0, String arg1) throws CertificateException {
        // TODO Auto-generated method stub
    }

    @Override
    public X509Certificate[] getAcceptedIssuers() {
        // TODO Auto-generated method stub
        return null;
    }
}

三、统一请求封装

/**
 * 创建时间:2019年3月19日 下午3:47:54
 * 类说明:封装统一的GET/POST请求接口
 * @author guobinhui
 * @since JDK 1.8.0_51
 */
public class WeiXinUtil {
    private final static Logger logger= LoggerFactory.getLogger(WeiXinUtil.class);
    
    public static JSONObject HttpGet(String URL) {
        String result = null;
        JSONObject jsonObj = null;
        CloseableHttpClient httpclient = HttpClients.createDefault();
        CloseableHttpResponse response = null;
        try {
            // 创建httpGet.
            HttpGet httpGet = new HttpGet(URL);
            // 通过请求对象获取响应对象
            response = httpclient.execute(httpGet);
            // 判断网络连接状态码是否正常(0--200都数正常)
            if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
                HttpEntity  entity = response.getEntity();//从HttpResponse中获取结果
                if(!StringUtils.isEmpty(entity)){
                     result =   EntityUtils.toString(entity,"utf-8");
                     logger.info("请求的数据结果为{}",result);
                     jsonObj = JSONObject.parseObject(result);//字符串类型转换为JSON对象
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (response != null) {
                    response.close();
                }
                httpclient.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return jsonObj;
    }
     
    public static JSONObject httpPost(String requestUrl, String requestMethod, String outputStr) {
        JSONObject jsonObject = null;
        StringBuffer buffer = new StringBuffer();
        try {
            // 创建SSLContext对象,并使用我们指定的信任管理器初始化
            TrustManager[] tm = { new MyX509TrustManager() };
            SSLContext sslContext = SSLContext.getInstance("SSL", "SunJSSE");
            sslContext.init(null, tm, new java.security.SecureRandom());
            // 从上述SSLContext对象中得到SSLSocketFactory对象
            SSLSocketFactory ssf = sslContext.getSocketFactory();

            URL url = new URL(requestUrl);
            HttpsURLConnection httpUrlConn = (HttpsURLConnection) url.openConnection();
            httpUrlConn.setSSLSocketFactory(ssf);

            httpUrlConn.setDoOutput(true);
            httpUrlConn.setDoInput(true);
            httpUrlConn.setUseCaches(false);
            
            // 设置请求方式(GET/POST)
            httpUrlConn.setRequestMethod(requestMethod);

            // 当有数据需要提交时
            if (null != outputStr) {
                OutputStream outputStream = httpUrlConn.getOutputStream();
                // 注意编码格式,防止中文乱码
                outputStream.write(outputStr.getBytes("UTF-8"));
                outputStream.close();
            }

            // 将返回的输入流转换成字符串
            InputStream inputStream = httpUrlConn.getInputStream();
            InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "utf-8");
            BufferedReader bufferedReader = new BufferedReader(inputStreamReader);

            String str = null;
            while ((str = bufferedReader.readLine()) != null) {
                buffer.append(str);
            }
            bufferedReader.close();
            inputStreamReader.close();
            // 释放资源
            inputStream.close();
            inputStream = null;
            httpUrlConn.disconnect();
            jsonObject = JSON.parseObject(buffer.toString());
        } catch (ConnectException ce) {
            logger.info("Weixin server connection timed out...");
        } catch (Exception e) {
            logger.info("https request error:{}.");
        }
        return jsonObject;
    }
}

更多JavaEE资料请关注下面公众号,欢迎广大开发者朋友一起交流。更多微信公众号功能演示请扫码体验,笔者电话(微信):18629374628

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章