| | |
| | | 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; |
| | | // } |
| | | //} |