From 478a10008e602100f4edbe57ddc9eab22591707e Mon Sep 17 00:00:00 2001 From: chandler <1915724901@qq.com> Date: Tue, 1 Oct 2024 15:47:25 +0800 Subject: [PATCH] =?UTF-8?q?feat(0):=20[java]-[wechat-ferry-mvn]-=E6=B6=88?= =?UTF-8?q?=E6=81=AF=E6=8E=A5=E5=8F=A3=E6=94=AF=E6=8C=81boot=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=E6=89=93=E5=8D=B0=EF=BC=8C=E4=BE=BF=E4=BA=8E=E5=90=8E?= =?UTF-8?q?=E7=BB=ADboot=E9=A1=B9=E7=9B=AE=E8=87=AA=E8=BA=AB=E6=8E=A5?= =?UTF-8?q?=E7=AE=A1=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- clients/java/wechat-ferry-mvn/pom.xml | 6 + .../ferry/config/WeChatConfiguration.java | 13 +- .../ferry/controller/WeChatMsgController.java | 44 +++++ .../java/com/wechat/ferry/enums/SexEnum.java | 42 +++++ .../ferry/handle/WeChatSocketClient.java | 127 ++++++++----- .../java/com/wechat/ferry/service/SDK.java | 15 +- .../ferry/service/WeChatMsgService.java | 21 +++ .../service/impl/WeChatMsgServiceImpl.java | 33 ++++ .../wechat/ferry/utils/HttpClientUtil.java | 169 ++++++++++++++++++ .../src/main/resources/logback-spring.xml | 7 + 10 files changed, 418 insertions(+), 59 deletions(-) create mode 100644 clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/controller/WeChatMsgController.java create mode 100644 clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/enums/SexEnum.java create mode 100644 clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/service/WeChatMsgService.java create mode 100644 clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/service/impl/WeChatMsgServiceImpl.java create mode 100644 clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/utils/HttpClientUtil.java diff --git a/clients/java/wechat-ferry-mvn/pom.xml b/clients/java/wechat-ferry-mvn/pom.xml index 3d5514e..084258a 100644 --- a/clients/java/wechat-ferry-mvn/pom.xml +++ b/clients/java/wechat-ferry-mvn/pom.xml @@ -59,6 +59,12 @@ dom4j 2.1.3 + + + org.apache.httpcomponents + httpclient + 4.5.13 + com.google.protobuf diff --git a/clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/config/WeChatConfiguration.java b/clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/config/WeChatConfiguration.java index a364a76..21080e5 100644 --- a/clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/config/WeChatConfiguration.java +++ b/clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/config/WeChatConfiguration.java @@ -2,6 +2,7 @@ package com.wechat.ferry.config; import javax.annotation.Resource; +import org.springframework.boot.autoconfigure.web.ServerProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -22,6 +23,9 @@ public class WeChatConfiguration { @Resource private WeChatFerryProperties properties; + @Resource + private ServerProperties serverProperties; + @Bean public WeChatSocketClient client() { log.debug("[读取配置文件]-端口:{},地址:{}", properties.getSocketPort(), properties.getDllPath()); @@ -29,8 +33,6 @@ public class WeChatConfiguration { // Client client = new Client("127.0.0.1", 10086); // 本地启动 RPC - // Client client = new Client(); // 默认 10086 端口 - // Client client = new Client(10088,true); // 也可以指定端口 WeChatSocketClient wechatSocketClient = new WeChatSocketClient(properties.getSocketPort(), properties.getDllPath()); // 是否已登录 @@ -69,12 +71,17 @@ public class WeChatConfiguration { // 发送表情消息,gif 必须要存在 // client.sendEmotion("C:\\Projs\\WeChatFerry\\emo.gif", "filehelper"); + // 使用本机打印 + String url = "http://localhost:" + serverProperties.getPort() + "/wechat/msg/receive"; // 接收消息,并调用 printWxMsg 处理 wechatSocketClient.enableRecvMsg(100); Thread thread = new Thread(new Runnable() { public void run() { while (wechatSocketClient.getIsReceivingMsg()) { - wechatSocketClient.printWxMsg(wechatSocketClient.getMsg()); + // 只打印 + // wechatSocketClient.printWxMsg(wechatSocketClient.getMsg()); + // 转发到boot项目进行消息处理 + wechatSocketClient.forwardMsg(wechatSocketClient.getMsg(), url); } } }); diff --git a/clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/controller/WeChatMsgController.java b/clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/controller/WeChatMsgController.java new file mode 100644 index 0000000..d7d9f95 --- /dev/null +++ b/clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/controller/WeChatMsgController.java @@ -0,0 +1,44 @@ +package com.wechat.ferry.controller; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import com.alibaba.fastjson2.JSONObject; +import com.wechat.ferry.entity.TResponse; +import com.wechat.ferry.enums.ResponseCodeEnum; +import com.wechat.ferry.service.WeChatMsgService; + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; + +/** + * 控制层-微信消息处理 + * + * @author chandler + * @date 2024-10-01 14:25 + */ +@Slf4j +@RestController +@RequestMapping("/wechat/msg") +@Api(tags = "微信消息处理-接口") +public class WeChatMsgController { + + private WeChatMsgService weChatMsgService; + + @Autowired + public void setWeChatMsgService(WeChatMsgService weChatMsgService) { + this.weChatMsgService = weChatMsgService; + } + + @ApiOperation(value = "接收微信消息", notes = "receiveMsg") + @PostMapping(value = "/receive") + public TResponse receiveMsg(@RequestBody JSONObject jsonData) { + log.debug("jsonData:{}", jsonData); + return TResponse.ok(ResponseCodeEnum.SUCCESS); + } + +} diff --git a/clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/enums/SexEnum.java b/clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/enums/SexEnum.java new file mode 100644 index 0000000..6d08b6b --- /dev/null +++ b/clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/enums/SexEnum.java @@ -0,0 +1,42 @@ +package com.wechat.ferry.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 枚举-性别 + * + * @author chandler + * @date 2024/10/01 15:42 + */ +@Getter +@AllArgsConstructor +public enum SexEnum { + + /** + * 0-未知 + */ + UNKNOWN("0", "未知"), + + /** + * 1-男 + */ + BOY("1", "男"), + + /** + * 2-女 + */ + GIRL("2", "女"), + + /** + * 未匹配上 + */ + UN_MATCH("", null), + + // 结束 + ; + + private final String code; + private final String name; + +} diff --git a/clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/handle/WeChatSocketClient.java b/clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/handle/WeChatSocketClient.java index b943943..6eccd12 100644 --- a/clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/handle/WeChatSocketClient.java +++ b/clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/handle/WeChatSocketClient.java @@ -24,7 +24,9 @@ import com.wechat.ferry.entity.po.Wcf.UserInfo; import com.wechat.ferry.entity.po.Wcf.Verification; import com.wechat.ferry.entity.po.Wcf.WxMsg; import com.wechat.ferry.entity.vo.response.WxMsgResp; +import com.wechat.ferry.enums.SexEnum; import com.wechat.ferry.service.SDK; +import com.wechat.ferry.utils.HttpClientUtil; import io.sisu.nng.Socket; import io.sisu.nng.pair.Pair1Socket; @@ -39,33 +41,49 @@ import lombok.extern.slf4j.Slf4j; @Slf4j public class WeChatSocketClient { - private static final int BUFFER_SIZE = 16 * 1024 * 1024; // 16M + /** + * 消息缓冲区大小,16M + */ + private static final Integer BUFFER_SIZE = 16 * 1024 * 1024; + + /** + * 默认IP + */ + private static final String DEFAULT_HOST = "127.0.0.1"; + + /** + * 请求地址 + */ + private static final String CMD_URL = "tcp://%s:%s"; + private Socket cmdSocket = null; private Socket msgSocket = null; - private static String DEFAULT_HOST = "127.0.0.1"; - private static int PORT = 10086; - private static String CMDURL = "tcp://%s:%s"; - private static String DEFAULT_DLL_PATH = System.getProperty("user.dir") + "\\dll\\sdk.dll"; + + /** + * 是否收到消息 + */ private boolean isReceivingMsg = false; + + /** + * 是否为本地端口 + */ private boolean isLocalHostPort = false; + + /** + * 消息返回 + */ private BlockingQueue msgQ; - private String host; - private int port; - private String dllPath; + private final String host; + private final Integer port; - public WeChatSocketClient() { - this(DEFAULT_HOST, PORT, false, DEFAULT_DLL_PATH); - } - - public WeChatSocketClient(int port, String dllPath) { + public WeChatSocketClient(Integer port, String dllPath) { this(DEFAULT_HOST, port, false, dllPath); } - public WeChatSocketClient(String host, int port, boolean debug, String dllPath) { + public WeChatSocketClient(String host, Integer port, boolean debug, String dllPath) { this.host = host; this.port = port; - this.dllPath = dllPath; SDK INSTANCE = Native.load(dllPath, SDK.class); int status = INSTANCE.WxInitSDK(debug, port); @@ -73,7 +91,7 @@ public class WeChatSocketClient { log.error("启动 RPC 失败: {}", status); System.exit(-1); } - connectRPC(String.format(CMDURL, host, port), INSTANCE); + connectRPC(String.format(CMD_URL, host, port), INSTANCE); if (DEFAULT_HOST.equals(host) || "localhost".equalsIgnoreCase(host)) { isLocalHostPort = true; } @@ -83,7 +101,6 @@ public class WeChatSocketClient { try { cmdSocket = new Pair1Socket(); cmdSocket.dial(url); - // logger.info("请点击登录微信"); while (!isLogin()) { // 直到登录成功 waitMs(1000); @@ -117,7 +134,7 @@ public class WeChatSocketClient { /** * 当前微信客户端是否登录微信号 * - * @return + * @return 是否登录结果 */ public boolean isLogin() { Request req = Request.newBuilder().setFuncValue(Functions.FUNC_IS_LOGIN_VALUE).build(); @@ -131,22 +148,21 @@ public class WeChatSocketClient { /** * 获得微信客户端登录的微信ID * - * @return + * @return 微信ID */ - public String getSelfWxid() { + public String getSelfWxId() { Request req = Request.newBuilder().setFuncValue(Functions.FUNC_GET_SELF_WXID_VALUE).build(); Response rsp = sendCmd(req); if (rsp != null) { return rsp.getStr(); } - return ""; } /** * 获取所有消息类型 * - * @return + * @return 消息类型集合 */ public Map getMsgTypes() { Request req = Request.newBuilder().setFuncValue(Functions.FUNC_GET_MSG_TYPES_VALUE).build(); @@ -154,7 +170,6 @@ public class WeChatSocketClient { if (rsp != null) { return rsp.getTypes().getTypesMap(); } - return Wcf.MsgTypes.newBuilder().build().getTypesMap(); } @@ -166,7 +181,7 @@ public class WeChatSocketClient { * "filehelper": "文件传输助手", * "newsapp": "新闻", * - * @return + * @return 联系人列表 */ public List getContacts() { Request req = Request.newBuilder().setFuncValue(Functions.FUNC_GET_CONTACTS_VALUE).build(); @@ -174,7 +189,6 @@ public class WeChatSocketClient { if (rsp != null) { return rsp.getContacts().getContactsList(); } - return Wcf.RpcContacts.newBuilder().build().getContactsList(); } @@ -183,7 +197,7 @@ public class WeChatSocketClient { * * @param db 数据库名 * @param sql 执行的sql语句 - * @return + * @return 数据记录列表 */ public List querySql(String db, String sql) { DbQuery dbQuery = DbQuery.newBuilder().setSql(sql).setDb(db).build(); @@ -198,7 +212,7 @@ public class WeChatSocketClient { /** * 获取所有数据库名 * - * @return + * @return 数据库名称列表 */ public List getDbNames() { Request req = Request.newBuilder().setFuncValue(Functions.FUNC_GET_DB_NAMES_VALUE).build(); @@ -206,15 +220,14 @@ public class WeChatSocketClient { if (rsp != null) { return rsp.getDbs().getNamesList(); } - return Wcf.DbNames.newBuilder().build().getNamesList(); } /** * 获取指定数据库中的所有表 * - * @param db - * @return + * @param db 数据库名称 + * @return 数据库中表列表 */ public Map getDbTables(String db) { Request req = Request.newBuilder().setFuncValue(Functions.FUNC_GET_DB_TABLES_VALUE).setStr(db).build(); @@ -225,7 +238,6 @@ public class WeChatSocketClient { tables.put(tbl.getName(), tbl.getSql()); } } - return tables; } @@ -240,7 +252,7 @@ public class WeChatSocketClient { * @author Changhua * @example sendText(" Hello @ 某人1 @ 某人2 ", " xxxxxxxx @ chatroom ", * "wxid_xxxxxxxxxxxxx1,wxid_xxxxxxxxxxxxx2"); - **/ + */ public int sendText(String msg, String receiver, String aters) { Wcf.TextMsg textMsg = Wcf.TextMsg.newBuilder().setMsg(msg).setReceiver(receiver).setAters(aters).build(); Request req = Request.newBuilder().setFuncValue(Functions.FUNC_SEND_TXT_VALUE).setTxt(textMsg).build(); @@ -250,7 +262,6 @@ public class WeChatSocketClient { if (rsp != null) { ret = rsp.getStatus(); } - return ret; } @@ -270,7 +281,6 @@ public class WeChatSocketClient { if (rsp != null) { ret = rsp.getStatus(); } - return ret; } @@ -290,7 +300,6 @@ public class WeChatSocketClient { if (rsp != null) { ret = rsp.getStatus(); } - return ret; } @@ -299,8 +308,8 @@ public class WeChatSocketClient { * * @param receiver 接收者微信id * @param xml xml内容 - * @param path - * @param type + * @param path 路径 + * @param type 类型 * @return 发送结果状态码 */ public int sendXml(String receiver, String xml, String path, int type) { @@ -312,7 +321,6 @@ public class WeChatSocketClient { if (rsp != null) { ret = rsp.getStatus(); } - return ret; } @@ -332,7 +340,6 @@ public class WeChatSocketClient { if (rsp != null) { ret = rsp.getStatus(); } - return ret; } @@ -420,12 +427,12 @@ public class WeChatSocketClient { /** * 判断是否是艾特自己的消息 * - * @param wxMsgXml - * @param wxMsgContent - * @return + * @param wxMsgXml XML消息 + * @param wxMsgContent 消息内容 + * @return 是否 */ public boolean isAtMeMsg(String wxMsgXml, String wxMsgContent) { - String format = String.format("", getSelfWxid()); + String format = String.format("", getSelfWxId()); boolean isAtAll = wxMsgContent.startsWith("@所有人") || wxMsgContent.startsWith("@all"); if (wxMsgXml.contains(format) && !isAtAll) { return true; @@ -437,7 +444,8 @@ public class WeChatSocketClient { try { msgSocket = new Pair1Socket(); msgSocket.dial(url); - msgSocket.setReceiveTimeout(2000); // 2 秒超时 + // 设置 2 秒超时 + msgSocket.setReceiveTimeout(2000); } catch (Exception e) { log.error("创建消息 RPC 失败", e); return; @@ -508,14 +516,13 @@ public class WeChatSocketClient { for (RpcContact c : contacts) { int value = c.getGender(); String gender; - if (value == 1) { + if (SexEnum.BOY.getCode().equals(String.valueOf(value))) { gender = "男"; - } else if (value == 2) { + } else if (SexEnum.GIRL.getCode().equals(String.valueOf(value))) { gender = "女"; } else { gender = "未知"; } - log.info("{}, {}, {}, {}, {}, {}, {}", c.getWxid(), c.getName(), c.getCode(), c.getCountry(), c.getProvince(), c.getCity(), gender); } } @@ -553,4 +560,30 @@ public class WeChatSocketClient { } } + public void forwardMsg(WxMsg msg, String url) { + WxMsgResp wxMsgResp = new WxMsgResp(); + wxMsgResp.setIsSelf(msg.getIsSelf()); + wxMsgResp.setIsGroup(msg.getIsGroup()); + wxMsgResp.setId(msg.getId()); + wxMsgResp.setType(msg.getType()); + wxMsgResp.setTs(msg.getTs()); + wxMsgResp.setRoomId(msg.getRoomid()); + wxMsgResp.setContent(msg.getContent()); + wxMsgResp.setSender(msg.getSender()); + wxMsgResp.setSign(msg.getSign()); + wxMsgResp.setThumb(msg.getThumb()); + wxMsgResp.setExtra(msg.getExtra()); + wxMsgResp.setXml(msg.getXml().replace("\n", "").replace("\t", "")); + + String jsonString = JSONObject.toJSONString(wxMsgResp); + try { + String responseStr = HttpClientUtil.doPostJson(url, jsonString); + if (!JSONObject.parseObject(responseStr).getString("code").equals("200")) { + log.error("本机消息转发失败!-URL:{}", url); + } + } catch (Exception e) { + log.error("转发接口报错:", e); + } + } + } diff --git a/clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/service/SDK.java b/clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/service/SDK.java index ce91454..24fe7d0 100644 --- a/clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/service/SDK.java +++ b/clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/service/SDK.java @@ -5,9 +5,6 @@ import com.sun.jna.Library; /** * SDK.dll的接口类 * - * @Author xinggq - * @Date 2024/7/10 - * * @author xinggq * @date 2024-07-10 15:21 */ @@ -15,17 +12,17 @@ public interface SDK extends Library { /** * 初始化SDK - * - * @param debug - * @param port - * @return + * + * @param debug 开发模式 + * @param port 端口 + * @return 状态值 */ int WxInitSDK(boolean debug, int port); /** * 退出SDK - * - * @return + * + * @return 状态值 */ int WxDestroySDK(); diff --git a/clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/service/WeChatMsgService.java b/clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/service/WeChatMsgService.java new file mode 100644 index 0000000..b513ba2 --- /dev/null +++ b/clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/service/WeChatMsgService.java @@ -0,0 +1,21 @@ +package com.wechat.ferry.service; + +/** + * 业务接口-消息处理 + * + * @author chandler + * @date 2024-10-01 14:30 + */ +public interface WeChatMsgService { + + /** + * 接收消息 + * + * @param jsonString json转换后的字符串 + * + * @author chandler + * @date 2024-10-01 14:33 + */ + void receiveMsg(String jsonString); + +} diff --git a/clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/service/impl/WeChatMsgServiceImpl.java b/clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/service/impl/WeChatMsgServiceImpl.java new file mode 100644 index 0000000..46292e0 --- /dev/null +++ b/clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/service/impl/WeChatMsgServiceImpl.java @@ -0,0 +1,33 @@ +package com.wechat.ferry.service.impl; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import com.wechat.ferry.handle.WeChatSocketClient; +import com.wechat.ferry.service.WeChatMsgService; + +import lombok.extern.slf4j.Slf4j; + +/** + * 业务实现层-消息处理 + * + * @author chandler + * @date 2024-10-01 14:35 + */ +@Slf4j +@Service +public class WeChatMsgServiceImpl implements WeChatMsgService { + + private WeChatSocketClient wechatSocketClient; + + @Autowired + public void setWechatSocketClient(WeChatSocketClient wechatSocketClient) { + this.wechatSocketClient = wechatSocketClient; + } + + @Override + public void receiveMsg(String jsonString) { + log.debug("[收到消息]-[消息内容]-打印:{}", jsonString); + } + +} diff --git a/clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/utils/HttpClientUtil.java b/clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/utils/HttpClientUtil.java new file mode 100644 index 0000000..86509de --- /dev/null +++ b/clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/utils/HttpClientUtil.java @@ -0,0 +1,169 @@ +package com.wechat.ferry.utils; + +import java.io.IOException; +import java.net.URI; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import org.apache.http.NameValuePair; +import org.apache.http.client.entity.UrlEncodedFormEntity; +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.client.utils.URIBuilder; +import org.apache.http.entity.ContentType; +import org.apache.http.entity.StringEntity; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClients; +import org.apache.http.message.BasicNameValuePair; +import org.apache.http.util.EntityUtils; + +import lombok.extern.slf4j.Slf4j; + +/** + * HTTP请求类 + */ +@Slf4j +@SuppressWarnings("all") +public class HttpClientUtil { + + /** + * 带参数的get请求 + * + * @param url + * @param param + * @return String + */ + public static String doGet(String url, Map param) { + // 创建Httpclient对象 + CloseableHttpClient httpclient = HttpClients.createDefault(); + + String resultString = ""; + CloseableHttpResponse response = null; + try { + // 创建uri + URIBuilder builder = new URIBuilder(url); + if (param != null) { + for (String key : param.keySet()) { + builder.addParameter(key, param.get(key)); + } + } + URI uri = builder.build(); + // 创建http GET请求 + HttpGet httpGet = new HttpGet(uri); + // 执行请求 + response = httpclient.execute(httpGet); + // 判断返回状态是否为200 + if (response.getStatusLine().getStatusCode() == 200) { + resultString = EntityUtils.toString(response.getEntity(), "UTF-8"); + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + try { + if (response != null) { + response.close(); + } + httpclient.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + return resultString; + } + + /** + * 不带参数的get请求 + * + * @param url + * @return String + */ + public static String doGet(String url) { + return doGet(url, null); + } + + /** + * 带参数的post请求 + * + * @param url + * @param param + * @return String + */ + public static String doPost(String url, Map param) { + // 创建Httpclient对象 + CloseableHttpClient httpClient = HttpClients.createDefault(); + CloseableHttpResponse response = null; + String resultString = ""; + try { + // 创建Http Post请求 + HttpPost httpPost = new HttpPost(url); + // 创建参数列表 + if (param != null) { + List paramList = new ArrayList<>(); + for (String key : param.keySet()) { + paramList.add(new BasicNameValuePair(key, param.get(key))); + } + // 模拟表单 + UrlEncodedFormEntity entity = new UrlEncodedFormEntity(paramList); + httpPost.setEntity(entity); + } + // 执行http请求 + response = httpClient.execute(httpPost); + resultString = EntityUtils.toString(response.getEntity(), "utf-8"); + } catch (Exception e) { + e.printStackTrace(); + } finally { + try { + response.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + return resultString; + } + + /** + * 不带参数的post请求 + * + * @param url + * @return String + */ + public static String doPost(String url) { + return doPost(url, null); + } + + /** + * 传送json类型的post请求 + * + * @param url + * @param json + * @return String + */ + public static String doPostJson(String url, String json) { + // 创建Httpclient对象 + CloseableHttpClient httpClient = HttpClients.createDefault(); + CloseableHttpResponse response = null; + String resultString = ""; + try { + // 创建Http Post请求 + HttpPost httpPost = new HttpPost(url); + // 创建请求内容 + StringEntity entity = new StringEntity(json, ContentType.APPLICATION_JSON); + httpPost.setEntity(entity); + // 执行http请求 + response = httpClient.execute(httpPost); + resultString = EntityUtils.toString(response.getEntity(), "utf-8"); + } catch (Exception e) { + e.printStackTrace(); + } finally { + try { + response.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + return resultString; + } + +} \ No newline at end of file diff --git a/clients/java/wechat-ferry-mvn/src/main/resources/logback-spring.xml b/clients/java/wechat-ferry-mvn/src/main/resources/logback-spring.xml index c33f8b0..d7669b6 100644 --- a/clients/java/wechat-ferry-mvn/src/main/resources/logback-spring.xml +++ b/clients/java/wechat-ferry-mvn/src/main/resources/logback-spring.xml @@ -83,6 +83,13 @@ + + + + + + +