diff --git a/java/wcferry/src/main/java/com/iamteer/Client.java b/java/wcferry/src/main/java/com/iamteer/Client.java index 9ca88a0..f82e6fd 100644 --- a/java/wcferry/src/main/java/com/iamteer/Client.java +++ b/java/wcferry/src/main/java/com/iamteer/Client.java @@ -116,6 +116,11 @@ public class Client { } } + /** + * 当前微信客户端是否登录微信号 + * + * @return + */ public boolean isLogin() { Request req = new Request.Builder().setFuncValue(Functions.FUNC_IS_LOGIN_VALUE).build(); Response rsp = sendCmd(req); @@ -125,6 +130,11 @@ public class Client { return false; } + /** + * 获得微信客户端登录的微信ID + * + * @return + */ public String getSelfWxid() { Request req = new Request.Builder().setFuncValue(Functions.FUNC_GET_SELF_WXID_VALUE).build(); Response rsp = sendCmd(req); @@ -135,6 +145,11 @@ public class Client { return ""; } + /** + * 获取所有消息类型 + * + * @return + */ public Map getMsgTypes() { Request req = new Request.Builder().setFuncValue(Functions.FUNC_GET_MSG_TYPES_VALUE).build(); Response rsp = sendCmd(req); @@ -145,6 +160,16 @@ public class Client { return Wcf.MsgTypes.newBuilder().build().getTypesMap(); } + /** + * 获取所有联系人 + * "fmessage": "朋友推荐消息", + * "medianote": "语音记事本", + * "floatbottle": "漂流瓶", + * "filehelper": "文件传输助手", + * "newsapp": "新闻", + * + * @return + */ public List getContacts() { Request req = new Request.Builder().setFuncValue(Functions.FUNC_GET_CONTACTS_VALUE).build(); Response rsp = sendCmd(req); @@ -155,6 +180,28 @@ public class Client { return Wcf.RpcContacts.newBuilder().build().getContactsList(); } + /** + * 获取sql执行结果 + * + * @param db 数据库名 + * @param sql 执行的sql语句 + * @return + */ + public List querySql(String db, String sql) { + DbQuery dbQuery = DbQuery.newBuilder().setSql(sql).setDb(db).build(); + Request req = new Request.Builder().setFuncValue(Functions.FUNC_EXEC_DB_QUERY_VALUE).setQuery(dbQuery).build(); + Response rsp = sendCmd(req); + if (rsp != null) { + return rsp.getRows().getRowsList(); + } + return null; + } + + /** + * 获取所有数据库名 + * + * @return + */ public List getDbNames() { Request req = new Request.Builder().setFuncValue(Functions.FUNC_GET_DB_NAMES_VALUE).build(); Response rsp = sendCmd(req); @@ -165,6 +212,12 @@ public class Client { return Wcf.DbNames.newBuilder().build().getNamesList(); } + /** + * 获取指定数据库中的所有表 + * + * @param db + * @return + */ public Map getDbTables(String db) { Request req = new Request.Builder().setFuncValue(Functions.FUNC_GET_DB_TABLES_VALUE).setStr(db).build(); Response rsp = sendCmd(req); @@ -203,6 +256,13 @@ public class Client { return ret; } + /** + * 发送图片消息 + * + * @param path 图片地址 + * @param receiver 接收者微信id + * @return 发送结果状态码 + */ public int sendImage(String path, String receiver) { Wcf.PathMsg pathMsg = Wcf.PathMsg.newBuilder().setPath(path).setReceiver(receiver).build(); Request req = new Request.Builder().setFuncValue(Functions.FUNC_SEND_IMG_VALUE).setFile(pathMsg).build(); @@ -216,6 +276,13 @@ public class Client { return ret; } + /** + * 发送文件消息 + * + * @param path 文件地址 + * @param receiver 接收者微信id + * @return 发送结果状态码 + */ public int sendFile(String path, String receiver) { Wcf.PathMsg pathMsg = Wcf.PathMsg.newBuilder().setPath(path).setReceiver(receiver).build(); Request req = new Request.Builder().setFuncValue(Functions.FUNC_SEND_FILE_VALUE).setFile(pathMsg).build(); @@ -229,6 +296,15 @@ public class Client { return ret; } + /** + * 发送Xml消息 + * + * @param receiver 接收者微信id + * @param xml xml内容 + * @param path + * @param type + * @return 发送结果状态码 + */ public int sendXml(String receiver, String xml, String path, int type) { Wcf.XmlMsg xmlMsg = Wcf.XmlMsg.newBuilder().setContent(xml).setReceiver(receiver).setPath(path).setType(type).build(); Request req = new Request.Builder().setFuncValue(Functions.FUNC_SEND_XML_VALUE).setXml(xmlMsg).build(); @@ -242,6 +318,13 @@ public class Client { return ret; } + /** + * 发送表情消息 + * + * @param path 表情路径 + * @param receiver 消息接收者 + * @return 发送结果状态码 + */ public int sendEmotion(String path, String receiver) { Wcf.PathMsg pathMsg = Wcf.PathMsg.newBuilder().setPath(path).setReceiver(receiver).build(); Request req = new Request.Builder().setFuncValue(Functions.FUNC_SEND_EMOTION_VALUE).setFile(pathMsg).build(); @@ -255,6 +338,92 @@ public class Client { return ret; } + /** + * 接收好友请求 + * + * @param v3 xml.attrib["encryptusername"] + * @param v4 xml.attrib["ticket"] + * @return 结果状态码 + */ + public int acceptNewFriend(String v3, String v4) { + int ret = -1; + Verification verification = Verification.newBuilder().setV3(v3).setV4(v4).build(); + Request req = new Request.Builder().setFuncValue(Functions.FUNC_ACCEPT_FRIEND_VALUE).setV(verification).build(); + Response rsp = sendCmd(req); + if (rsp != null) { + ret = rsp.getStatus(); + } + return ret; + } + + /** + * 添加群成员为微信好友 + * + * @param roomID 群ID + * @param wxIds 要加群的人列表,逗号分隔 + * @return 1 为成功,其他失败 + */ + public int addChatroomMembers(String roomID, String wxIds) { + int ret = -1; + AddMembers addMembers = AddMembers.newBuilder().setRoomid(roomID).setWxids(wxIds).build(); + Request req = new Request.Builder().setFuncValue(Functions.FUNC_ADD_ROOM_MEMBERS_VALUE).setM(addMembers).build(); + Response rsp = sendCmd(req); + if (rsp != null) { + ret = rsp.getStatus(); + } + return ret; + } + + /** + * 接收转账 + * + * @param transferid 转账消息里的 transferid + * @param wxId 转账消息里的发送人 + * @return 1 为成功,其他失败 + */ + public int receiveTransfer(String transferid, String wxId) { + int ret = -1; + Transfer build = Transfer.newBuilder().setTid(transferid).setWxid(wxId).build(); + Request req = new Request.Builder().setFuncValue(Functions.FUNC_RECV_TRANSFER_VALUE).setTf(build).build(); + Response rsp = sendCmd(req); + if (rsp != null) { + ret = rsp.getStatus(); + } + return ret; + } + + /** + * 解密图片 + * + * @param srcPath 加密的图片路径 + * @param dstPath 解密的图片路径 + * @return 是否成功 + */ + public boolean decryptImage(String srcPath, String dstPath) { + int ret = -1; + DecPath build = DecPath.newBuilder().setSrc(srcPath).setDst(dstPath).build(); + Request req = new Request.Builder().setFuncValue(Functions.FUNC_DECRYPT_IMAGE_VALUE).setDec(build).build(); + Response rsp = sendCmd(req); + if (rsp != null) { + ret = rsp.getStatus(); + } + return ret == 1; + } + + /** + * 获取个人信息 + * + * @return 个人信息 + */ + public UserInfo getUserInfo() { + Request req = new Request.Builder().setFuncValue(Functions.FUNC_GET_USER_INFO_VALUE).build(); + Response rsp = sendCmd(req); + if (rsp != null) { + return rsp.getUi(); + } + return null; + } + public boolean getIsReceivingMsg() { return isReceivingMsg; } @@ -268,6 +437,22 @@ public class Client { } } + /** + * 判断是否是艾特自己的消息 + * + * @param wxMsgXml + * @param wxMsgContent + * @return + */ + public boolean isAtMeMsg(String wxMsgXml, String wxMsgContent) { + String format = String.format("", getSelfWxid()); + boolean isAtAll = wxMsgContent.startsWith("@所有人") || wxMsgContent.startsWith("@all"); + if (wxMsgXml.contains(format) && !isAtAll) { + return true; + } + return false; + } + private void listenMsg(String url) { try { msgSocket = new Pair1Socket();