无关风月
3 天以前 b5ead35c1d955f2a0e2e10da79254860d0ba95e9
ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/utils/vx/HttpUtil.java
@@ -1,195 +1,195 @@
package com.ruoyi.admin.utils.vx;
import lombok.extern.slf4j.Slf4j;
import org.apache.http.HttpEntity;
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.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import java.io.IOException;
import static com.wechat.pay.contrib.apache.httpclient.constant.WechatPayHttpHeaders.WECHAT_PAY_SERIAL;
import static org.apache.http.HttpHeaders.ACCEPT;
import static org.apache.http.HttpHeaders.CONTENT_TYPE;
import static org.apache.http.entity.ContentType.APPLICATION_JSON;
/**
 * 微信支付专用类 请求操作方法
 *
 * @author hjl
 */
@Slf4j
public class HttpUtil {
    /**
     * 发起批量转账API 批量转账到零钱
     *
     * @param requestUrl        请求路径
     * @param requestJson       组合参数
     * @param wechatPayserialNo 商户证书序列号
     * @param privatekeypath    商户私钥证书路径
     */
    public static String postTransBatRequest(
            String requestUrl,
            String requestJson,
            String wechatPayserialNo,
            String mchId,
            String privatekeypath, String url) {
        CloseableHttpResponse response;
        HttpEntity entity;
        CloseableHttpClient httpClient = null;
        try {
            HttpPost httpPost = createHttpPost(requestUrl, requestJson, wechatPayserialNo, mchId, privatekeypath, url);
            httpClient = HttpClients.createDefault();
            //发起转账请求
            response = httpClient.execute(httpPost);
            log.info("response:{}", response);
            //获取返回的数据
            entity = response.getEntity();
            log.info("-----getHeaders.Request-ID:" + response.getHeaders("Request-ID"));
            return EntityUtils.toString(entity);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            // 关闭流
            try {
                if (httpClient != null) {
                    httpClient.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return null;
    }
    /**
     * 账单查询
     *
     * @param requestUrl        请求完整地址
     * @param wechatPayserialNo 商户证书序列号
     * @param privatekeypath    商户私钥证书路径
     */
    public static String getTransBatRequest(
            String requestUrl,
            String wechatPayserialNo,
            String mchId,
            String privatekeypath, String url) {
        CloseableHttpResponse response;
        HttpEntity entity;
        CloseableHttpClient httpClient = null;
        try {
            HttpGet httpPost = createHttpGet(requestUrl, wechatPayserialNo, mchId, privatekeypath, url);
            httpClient = HttpClients.createDefault();
            //发起转账请求
            response = httpClient.execute(httpPost);
            log.info("response:{}", response);
            //获取返回的数据
            entity = response.getEntity();
            log.info("-----getHeaders.Request-ID:" + response.getHeaders("Request-ID"));
            return EntityUtils.toString(entity);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            // 关闭流
            try {
                if (httpClient != null) {
                    httpClient.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return null;
    }
    /**
     * @param requestUrl        请求完整地址
     * @param requestJson       请求参数
     * @param wechatPayserialNo 支付证书序列号
     * @param mchId             商户号
     * @param privatekeypath    私钥路径
     * @param servletPath       相对路径
     */
    private static HttpPost createHttpPost(String requestUrl,
                                           String requestJson,
                                           String wechatPayserialNo,
                                           String mchId,
                                           String privatekeypath, String servletPath) {
        //商户私钥证书
        HttpPost httpPost = new HttpPost(requestUrl);
        // NOTE: 建议指定charset=utf-8。低于4.4.6版本的HttpCore,不能正确的设置字符集,可能导致签名错误
        httpPost.addHeader(ACCEPT, APPLICATION_JSON.toString());
        httpPost.addHeader(CONTENT_TYPE, APPLICATION_JSON.toString());
        //"55E551E614BAA5A3EA38AE03849A76D8C7DA735A");
        httpPost.addHeader(WECHAT_PAY_SERIAL, wechatPayserialNo);
        //-------------------------核心认证 start-----------------------------------------------------------------
        String strToken = null;
        try {
            log.info("requestJson:{}", requestJson);
            strToken = WechatPayV3Util.getToken("POST",
                    servletPath,
                    requestJson, mchId, wechatPayserialNo, privatekeypath);
        } catch (Exception e) {
            log.error("createHttpPost error:", e);
            e.printStackTrace();
        }
        StringEntity reqEntity = new StringEntity(requestJson, APPLICATION_JSON);
        log.info("token " + strToken);
        // 添加认证信息
        httpPost.addHeader("Authorization",
                "WECHATPAY2-SHA256-RSA2048" + " "
                        + strToken);
        //---------------------------核心认证 end---------------------------------------------------------------
        httpPost.setEntity(reqEntity);
        return httpPost;
    }
    /**
     * 创建get 请求
     *
     * @param requestUrl        请求完整地址
     * @param wechatPayserialNo 支付证书序列号
     * @param mchId             商户号
     * @param privatekeypath    私钥路径
     * @param servletPath       相对路径  请求地址上如果有参数 则此处需要带上参数
     * @return HttpGet
     */
    private static HttpGet createHttpGet(String requestUrl,
                                         String wechatPayserialNo,
                                         String mchId,
                                         String privatekeypath, String servletPath) {
        //商户私钥证书
        HttpGet httpGet = new HttpGet(requestUrl);
        // NOTE: 建议指定charset=utf-8。低于4.4.6版本的HttpCore,不能正确的设置字符集,可能导致签名错误
        httpGet.addHeader("Content-Type", "application/json");
        httpGet.addHeader("Accept", "application/json");
        //"55E551E614BAA5A3EA38AE03849A76D8C7DA735A");
        httpGet.addHeader("Wechatpay-Serial", wechatPayserialNo);
        //-------------------------核心认证 start-----------------------------------------------------------------
        String strToken = null;
        try {
            strToken = WechatPayV3Util.getToken("GET",
                    servletPath,
                    "", mchId, wechatPayserialNo, privatekeypath);
        } catch (Exception e) {
            log.error("createHttpGet error:", e);
            e.printStackTrace();
        }
        log.info("token " + strToken);
        // 添加认证信息
        httpGet.addHeader("Authorization",
                "WECHATPAY2-SHA256-RSA2048" + " "
                        + strToken);
        //---------------------------核心认证 end---------------------------------------------------------------
        return httpGet;
    }
}
//package com.ruoyi.admin.utils.vx;
//
//import lombok.extern.slf4j.Slf4j;
//import org.apache.http.HttpEntity;
//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.StringEntity;
//import org.apache.http.impl.client.CloseableHttpClient;
//import org.apache.http.impl.client.HttpClients;
//import org.apache.http.util.EntityUtils;
//
//import java.io.IOException;
//
//import static com.wechat.pay.contrib.apache.httpclient.constant.WechatPayHttpHeaders.WECHAT_PAY_SERIAL;
//import static org.apache.http.HttpHeaders.ACCEPT;
//import static org.apache.http.HttpHeaders.CONTENT_TYPE;
//import static org.apache.http.entity.ContentType.APPLICATION_JSON;
//
//
///**
// * 微信支付专用类 请求操作方法
// *
// * @author hjl
// */
//@Slf4j
//public class HttpUtil {
//
//    /**
//     * 发起批量转账API 批量转账到零钱
//     *
//     * @param requestUrl        请求路径
//     * @param requestJson       组合参数
//     * @param wechatPayserialNo 商户证书序列号
//     * @param privatekeypath    商户私钥证书路径
//     */
//    public static String postTransBatRequest(
//            String requestUrl,
//            String requestJson,
//            String wechatPayserialNo,
//            String mchId,
//            String privatekeypath, String url) {
//        CloseableHttpResponse response;
//        HttpEntity entity;
//        CloseableHttpClient httpClient = null;
//        try {
//            HttpPost httpPost = createHttpPost(requestUrl, requestJson, wechatPayserialNo, mchId, privatekeypath, url);
//            httpClient = HttpClients.createDefault();
//            //发起转账请求
//            response = httpClient.execute(httpPost);
//            log.info("response:{}", response);
//            //获取返回的数据
//            entity = response.getEntity();
//            log.info("-----getHeaders.Request-ID:" + response.getHeaders("Request-ID"));
//            return EntityUtils.toString(entity);
//        } catch (Exception e) {
//            e.printStackTrace();
//        } finally {
//            // 关闭流
//            try {
//                if (httpClient != null) {
//                    httpClient.close();
//                }
//            } catch (IOException e) {
//                e.printStackTrace();
//            }
//        }
//        return null;
//    }
//
//
//    /**
//     * 账单查询
//     *
//     * @param requestUrl        请求完整地址
//     * @param wechatPayserialNo 商户证书序列号
//     * @param privatekeypath    商户私钥证书路径
//     */
//    public static String getTransBatRequest(
//            String requestUrl,
//            String wechatPayserialNo,
//            String mchId,
//            String privatekeypath, String url) {
//        CloseableHttpResponse response;
//        HttpEntity entity;
//        CloseableHttpClient httpClient = null;
//        try {
//            HttpGet httpPost = createHttpGet(requestUrl, wechatPayserialNo, mchId, privatekeypath, url);
//            httpClient = HttpClients.createDefault();
//            //发起转账请求
//            response = httpClient.execute(httpPost);
//            log.info("response:{}", response);
//            //获取返回的数据
//            entity = response.getEntity();
//            log.info("-----getHeaders.Request-ID:" + response.getHeaders("Request-ID"));
//            return EntityUtils.toString(entity);
//        } catch (Exception e) {
//            e.printStackTrace();
//        } finally {
//            // 关闭流
//            try {
//                if (httpClient != null) {
//                    httpClient.close();
//                }
//            } catch (IOException e) {
//                e.printStackTrace();
//            }
//        }
//        return null;
//    }
//
//    /**
//     * @param requestUrl        请求完整地址
//     * @param requestJson       请求参数
//     * @param wechatPayserialNo 支付证书序列号
//     * @param mchId             商户号
//     * @param privatekeypath    私钥路径
//     * @param servletPath       相对路径
//     */
//    private static HttpPost createHttpPost(String requestUrl,
//                                           String requestJson,
//                                           String wechatPayserialNo,
//                                           String mchId,
//                                           String privatekeypath, String servletPath) {
//        //商户私钥证书
//        HttpPost httpPost = new HttpPost(requestUrl);
//        // NOTE: 建议指定charset=utf-8。低于4.4.6版本的HttpCore,不能正确的设置字符集,可能导致签名错误
//        httpPost.addHeader(ACCEPT, APPLICATION_JSON.toString());
//        httpPost.addHeader(CONTENT_TYPE, APPLICATION_JSON.toString());
//        //"55E551E614BAA5A3EA38AE03849A76D8C7DA735A");
//        httpPost.addHeader(WECHAT_PAY_SERIAL, wechatPayserialNo);
//
//        //-------------------------核心认证 start-----------------------------------------------------------------
//        String strToken = null;
//        try {
//            log.info("requestJson:{}", requestJson);
//            strToken = WechatPayV3Util.getToken("POST",
//                    servletPath,
//                    requestJson, mchId, wechatPayserialNo, privatekeypath);
//        } catch (Exception e) {
//            log.error("createHttpPost error:", e);
//            e.printStackTrace();
//        }
//        StringEntity reqEntity = new StringEntity(requestJson, APPLICATION_JSON);
//        log.info("token " + strToken);
//        // 添加认证信息
//        httpPost.addHeader("Authorization",
//                "WECHATPAY2-SHA256-RSA2048" + " "
//                        + strToken);
//        //---------------------------核心认证 end---------------------------------------------------------------
//        httpPost.setEntity(reqEntity);
//        return httpPost;
//    }
//
//    /**
//     * 创建get 请求
//     *
//     * @param requestUrl        请求完整地址
//     * @param wechatPayserialNo 支付证书序列号
//     * @param mchId             商户号
//     * @param privatekeypath    私钥路径
//     * @param servletPath       相对路径  请求地址上如果有参数 则此处需要带上参数
//     * @return HttpGet
//     */
//    private static HttpGet createHttpGet(String requestUrl,
//                                         String wechatPayserialNo,
//                                         String mchId,
//                                         String privatekeypath, String servletPath) {
//        //商户私钥证书
//        HttpGet httpGet = new HttpGet(requestUrl);
//        // NOTE: 建议指定charset=utf-8。低于4.4.6版本的HttpCore,不能正确的设置字符集,可能导致签名错误
//        httpGet.addHeader("Content-Type", "application/json");
//        httpGet.addHeader("Accept", "application/json");
//        //"55E551E614BAA5A3EA38AE03849A76D8C7DA735A");
//        httpGet.addHeader("Wechatpay-Serial", wechatPayserialNo);
//        //-------------------------核心认证 start-----------------------------------------------------------------
//        String strToken = null;
//        try {
//            strToken = WechatPayV3Util.getToken("GET",
//                    servletPath,
//                    "", mchId, wechatPayserialNo, privatekeypath);
//        } catch (Exception e) {
//            log.error("createHttpGet error:", e);
//            e.printStackTrace();
//        }
//
//        log.info("token " + strToken);
//        // 添加认证信息
//        httpGet.addHeader("Authorization",
//                "WECHATPAY2-SHA256-RSA2048" + " "
//                        + strToken);
//        //---------------------------核心认证 end---------------------------------------------------------------
//        return httpGet;
//    }
//}