import cn.hutool.core.lang.Pair;
import cn.hutool.crypto.SecureUtil;
import com.dtyunxi.exchange.biz.model.ApiChannelType;
import com.dtyunxi.exchange.biz.utils.OkHttpUtil;
import okhttp3.OkHttpClient;
import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.ssl.SSLContexts;
import org.apache.http.util.EntityUtils;
import org.apache.tomcat.util.http.fileupload.IOUtils;
import org.springframework.http.HttpMethod;
import org.springframework.stereotype.Component;
import org.springframework.util.Base64Utils;
import javax.net.ssl.SSLContext;
import java.io.*;
import java.security.KeyStore;
import java.util.HashMap;
import java.util.Map;
import java.util.TreeMap;
private static final String SslContentKey = "certBase64Content";
private Map<String, CloseableHttpClient> OkHttpClientMap = new HashMap<>();
public Pair<Integer, String> execute(Map<String, Object> requestContext, HttpMethod httpMethod, String url, Map<String, String> headers, Object postData) throws IOException {
String base64Content = requestContext.get(SslContentKey).toString();
String mchId = requestContext.get("mchId").toString();
String key = mchId;
CloseableHttpClient httpClient = OkHttpClientMap.get(key);
if (httpClient == null) {
SSLContext sslContext = initSSLContext(mchId, base64Content);
SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslContext,
null,//new String[]{"TLSv1"},
(String[]) null,
SSLConnectionSocketFactory.BROWSER_COMPATIBLE_HOSTNAME_VERIFIER);
httpClient = HttpClients.custom().setSSLSocketFactory(sslsf).build();
;
OkHttpClientMap.put(key, httpClient);
}
String result = null;
try {
HttpPost httpost = new HttpPost(url);
httpost.addHeader("Connection", "keep-alive");
httpost.addHeader("Accept", "*/*");
httpost.addHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
httpost.addHeader("Host", "api.mch.weixin.qq.com");
httpost.addHeader("X-Requested-With", "XMLHttpRequest");
httpost.addHeader("Cache-Control", "max-age=0");
httpost.addHeader("User-Agent", "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0) ");
httpost.setEntity(new StringEntity(postData.toString(), "UTF-8"));
CloseableHttpResponse response = null;
try {
response = httpClient.execute(httpost);
HttpEntity entity = response.getEntity();
String jsonStr = EntityUtils.toString(response.getEntity(), "UTF-8");
EntityUtils.consume(entity);
result = jsonStr;
} catch (Exception ex) {
ex.printStackTrace();
return Pair.of(500, ex.getMessage());
} finally {
if (response != null) {
response.close();
}
}
} finally {
//httpClient.close();
}
return Pair.of(200, result);
//return OkHttpUtil.execute(httpMethod, url, headers, postData);
}