微信后端代码
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

322 lines
12 KiB

package com.ynxbd.common.helper.http;
import com.alibaba.fastjson.JSONObject;
import com.aliyun.tea.okhttp.OkHttpClientBuilder;
import com.ynxbd.common.helper.common.ErrorHelper;
import com.ynxbd.common.helper.common.JsonHelper;
import com.ynxbd.common.result.JsonResult;
import com.ynxbd.common.result.JsonResultEnum;
import com.ynxbd.wx.utils.DesEncryptHelper;
import com.ynxbd.wx.wxfactory.utils.XmlHelper;
import lombok.extern.slf4j.Slf4j;
import okhttp3.*;
import java.io.IOException;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
@Slf4j
public class OkHttpHelper {
@FunctionalInterface
public interface Header {
void setHeaders(Headers.Builder headers);
}
@FunctionalInterface
public interface MapParams {
void setParams(Map<String, Object> map);
}
public static final MediaType TYPE_XML = MediaType.parse("application/xml;encoding=utf-8");
public static final MediaType TYPE_JSON = MediaType.parse("application/json;encoding=utf-8");
public static final MediaType TYPE_FORM = MediaType.parse("application/x-www-form-urlencoded;encoding=utf-8");
private static final ConcurrentHashMap<String, OkHttpClient> clients = new ConcurrentHashMap<>();
public static OkHttpClient getOkHttpClient(String requestUrl) {
if (requestUrl == null) {
return null;
}
try {
URL url = new URL(requestUrl);
String key;
key = getClientKey(url.getHost(), url.getPort());
OkHttpClient client = clients.get(key);
if (null == client) {
client = creatClient();
clients.put(key, client);
}
return client;
} catch (Exception e) {
ErrorHelper.println(e);
}
return null;
}
public static OkHttpClient creatClient() {
OkHttpClientBuilder builder = new OkHttpClientBuilder();
Map<String, Object> runtime = new HashMap<>();
runtime.put("ignoreSSL", true);
runtime.put("httpProxy", null);
runtime.put("connectTimeout", 15000);
runtime.put("readTimeout", 15000);
builder = builder
.connectTimeout(runtime)
.readTimeout(runtime)
.connectionPool(runtime)
.certificate(runtime)
.proxy(runtime)
.proxyAuthenticator(runtime);
return builder.buildOkHttpClient();
}
private static String getClientKey(String host, int port) {
return String.format("%s:%d", host, port);
}
public static String get(String url, MapParams mapParams) {
OkHttpClient client = getOkHttpClient(url);
if (client == null) {
return null;
}
Map<String, Object> requestParams = new HashMap<>();
if (mapParams != null) {
mapParams.setParams(requestParams);
}
try (Response response = client.newCall(new Request.Builder().get()
.url(mackParamsUrl(url, requestParams)).build()).execute()) {
if (!response.isSuccessful()) {
return null;
}
try (ResponseBody body = response.body()) {
if (body == null) {
return null;
}
return body.string();
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
public static void getAsync(String url, MapParams mapParams) {
OkHttpClient client = getOkHttpClient(url);
if (client == null) {
return;
}
Map<String, Object> requestParams = new HashMap<>();
if (mapParams != null) {
mapParams.setParams(requestParams);
}
client.newCall(new Request.Builder().get().url(mackParamsUrl(url, requestParams)).build()).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
log.error(e.getMessage());
}
@Override
public void onResponse(Call call, Response response) throws IOException {
try (ResponseBody responseBody = response.body()) {
if (!response.isSuccessful()) {
if (responseBody != null) {
log.error(responseBody.string());
}
} else {
if (responseBody != null) {
log.info(responseBody.string());
}
}
}
}
});
}
public static String post(String url, RequestBody requestBody, Header header) {
OkHttpClient client = getOkHttpClient(url);
if (client == null) {
return null;
}
Headers.Builder headersBuilder = new Headers.Builder();
if (header != null) {
header.setHeaders(headersBuilder);
}
try (Response response = client.newCall(new Request.Builder().url(url).post(requestBody).headers(headersBuilder.build()).build()).execute()) {
if (!response.isSuccessful()) {
return null;
}
try (ResponseBody body = response.body()) {
if (body == null) {
return null;
}
String respBody = body.string();
log.info("接口响应数据resp={}", respBody);
return respBody;
}
} catch (Exception e) {
ErrorHelper.println(e);
}
return null;
}
public static String post(String url, RequestBody requestBody) {
return post(url, requestBody, null);
}
public static String postJsonStr(String url, OkHttpHelper.MapParams params, Header header) {
return post(url, OkHttpHelper.createJson(params), header);
}
public static String postFormStr(String url, OkHttpHelper.MapParams params, Header header) {
return post(url, OkHttpHelper.createForm(params), header);
}
public static String postXmlStr(String url, OkHttpHelper.MapParams params, Header header) {
return post(url, OkHttpHelper.createXml(params), header);
}
public static JSONObject postJson(String url, OkHttpHelper.MapParams params, Header header) {
return JsonHelper.parseObject(post(url, OkHttpHelper.createJson(params), header));
}
public static JSONObject postForm(String url, OkHttpHelper.MapParams params, Header header) {
return JsonHelper.parseObject(post(url, OkHttpHelper.createForm(params), header));
}
// -----------------------------------------------------------------------------------------------------------------
public static JsonResult post(String url, RequestBody requestBody, Header header, JsonResultEnum jsonResultEnum) {
return JsonResult.jsonToBean(post(url, requestBody, header), jsonResultEnum);
}
public static JsonResult postJson(String url, OkHttpHelper.MapParams params, Header header, JsonResultEnum jsonResultEnum) {
return JsonResult.jsonToBean(post(url, OkHttpHelper.createJson(params), header), jsonResultEnum);
}
public static JsonResult postForm(String url, OkHttpHelper.MapParams params, Header header, JsonResultEnum jsonResultEnum) {
return JsonResult.jsonToBean(post(url, OkHttpHelper.createForm(params), header), jsonResultEnum);
}
public static JsonResult postXml(String url, OkHttpHelper.MapParams params, Header header, JsonResultEnum jsonResultEnum) {
return JsonResult.xmlToBean(post(url, OkHttpHelper.createXml(params), header), jsonResultEnum);
}
public static RequestBody createForm(OkHttpHelper.MapParams method) {
Map<String, Object> params = new HashMap<>();
if (method != null) {
method.setParams(params);
}
FormBody.Builder builder = new FormBody.Builder();
if (params.size() > 0) {
Object value;
for (Map.Entry<String, Object> item : params.entrySet()) {
value = item.getValue();
if (value != null) {
builder.add(item.getKey(), String.valueOf(value));
}
}
}
return builder.build();
}
public static RequestBody createJson(OkHttpHelper.MapParams jsonMethod) {
Map<String, Object> params = new HashMap<>();
if (jsonMethod != null) {
jsonMethod.setParams(params);
}
return RequestBody.create(TYPE_JSON, JsonHelper.toJsonString(params));
}
public static RequestBody createXml(MapParams mapParams) {
Map<String, Object> requestMap = new HashMap<>();
if (mapParams != null) {
mapParams.setParams(requestMap);
}
// log.info("请求数据 reqXml={}", XmlHelper.mapToXml(requestMap));
return RequestBody.create(TYPE_JSON, XmlHelper.mapToXml(requestMap));
}
public static void test() {
getAsync("http://10.20.10.60:8123/MessagePlatform/AppointmentSuccess", params -> {
params.put("openId", DesEncryptHelper.enCode("oeso-t62kkoRwLVVkSkwmmjPfUXk"));
params.put("patientName", "123");
params.put("deptName", "测试");
params.put("doctor", "测试"); // 医生姓名
params.put("sex", "男"); //
params.put("seq", "0"); // HIS交易流水号
});
// Map<String, Object> runtime = new HashMap<>();
// runtime.put("ignoreSSL", true);
// runtime.put("httpProxy", null);
// runtime.put("connectTimeout", 15000);
// runtime.put("readTimeout", 15000);
}
//
// public static void main(String[] args) {
// test();
// System.out.println("333333333333333333333");
// getAsync("http://wx.hhzyy.com/api/ip.do", params -> {
// });
//
// System.out.println(clients);
//
//// Map<String, Object> runtime = new HashMap<>();
//// runtime.put("ignoreSSL", true);
//// runtime.put("httpProxy", null);
//// runtime.put("connectTimeout", 15000);
//// runtime.put("readTimeout", 15000);
// }
/**
* 生成携带参数的链接
*
* @param url 请求地址
* @param params 参数
* @return 携带参数的链接 / null
*/
public static String mackParamsUrl(String url, Map<String, Object> params) {
if (url == null || "".equals(url)) {
return null;
}
if (params == null || params.size() == 0) {
return url;
}
StringBuilder sb = new StringBuilder();
sb.append(url);
int index = url.indexOf("?");
if (index == -1) {
sb.append("?");
} else {
sb.append("&");
}
boolean isFirst = false;
Object value;
for (Map.Entry<String, Object> entry : params.entrySet()) {
if (isFirst) {
sb.append("&");
}
value = entry.getValue();
if (value != null) {
sb.append(entry.getKey()).append("=");
sb.append(value);
}
isFirst = true;
}
return sb.toString();
}
}