Skip to content

Commit

Permalink
添加Bean
Browse files Browse the repository at this point in the history
  • Loading branch information
yaphone committed Jul 3, 2017
2 parents 047fb40 + 5a0bac9 commit 2bc3e1a
Show file tree
Hide file tree
Showing 18 changed files with 233 additions and 32 deletions.
79 changes: 73 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,11 +32,13 @@

## 更新日志

- 2017-6-28:增加被动添加好友功能。

- 2017-6-23:增加获取群好友昵称功能,修复已知问题。

- 2017-6-16:增加微信状态维护
- 2017-6-16:增加微信状态维护

- 2017-6-13:修复获取群列表为空问题,增加根据群ID获取群成员列表方法
- 2017-6-13:修复获取群列表为空问题,增加根据群ID获取群成员列表方法


Expand Down Expand Up @@ -158,6 +160,16 @@ public static boolean sendPicFileByNickName(String nickName, String filePath)
public static boolean sendFileMsgByUserId(String userId, String filePath)
```

#### 15.处理好友添加请求,MessageTools.addFriend(JSONObject msg, boolean accept)

当收到好友添加请求时,可调用此函数进行处理,msg为收到的好友添加请求消息,accept传true为接受好友请求,false为拒绝,其函数声明为:

```java
public static void addFriend(JSONObject msg, boolean accept)
```



## TODO List 即将支持/正在开发

- 拉人进群功能
Expand Down Expand Up @@ -242,7 +254,7 @@ src/main/java是itchat4j的项目源码,在src/test/java目录下有两个小D
}
```

### 图片消息
### 2.图片消息

```json
{
Expand Down Expand Up @@ -296,7 +308,7 @@ src/main/java是itchat4j的项目源码,在src/test/java目录下有两个小D
}
```

### 语音消息
### 3.语音消息

```Json
{
Expand Down Expand Up @@ -350,7 +362,7 @@ src/main/java是itchat4j的项目源码,在src/test/java目录下有两个小D
}
```

### 小视频消息
### 4.小视频消息

```Json
{
Expand Down Expand Up @@ -404,7 +416,7 @@ src/main/java是itchat4j的项目源码,在src/test/java目录下有两个小D
}
```

### 名片消息
### 5.名片消息

```Json
{
Expand Down Expand Up @@ -458,6 +470,59 @@ src/main/java是itchat4j的项目源码,在src/test/java目录下有两个小D
}
```

### 6.被动添加好友消息

```json
{
"SubMsgType": 0,
"VoiceLength": 0,
"FileName": "",
"ImgHeight": 0,
"ToUserName": "@5ce504de33c5105c599277b603e9d02c",
"HasProductId": 0,
"ImgStatus": 1,
"Url": "",
"ImgWidth": 0,
"ForwardFlag": 0,
"Status": 3,
"Ticket": "",
"RecommendInfo": {
"Ticket": "v2_7b244cf55b35daf113c16efb4db83ca0a38a4ca40a01a375d4f36b64fb7f597429495e333ebdb1673164fad0e0ec1aca1fbb90043d410360e29c2277caf7f8f1@stranger",
"UserName": "@8703fa509d1e91f2eb9d9b4e9a2946ded04d9ee1bba002908981270b75200b12",
"Sex": 2,
"AttrStatus": 102497,
"City": "南岸",
"NickName": "yaphone",
"Scene": 6,
"Province": "重庆",
"Content": "",
"Alias": "",
"Signature": "",
"OpCode": 2,
"QQNum": 0,
"VerifyFlag": 0
},
"CreateTime": 1498658433,
"NewMsgId": 1801473737376226000,
"MsgType": 37,
"groupMsg": false,
"MsgId": "1801473737376226019",
"StatusNotifyCode": 0,
"AppInfo": {
"Type": 0,
"AppID": ""
},
"AppMsgType": 0,
"PlayLength": 0,
"MediaId": "",
"Content": "<msg fromusername=\"wxid_a6p74rz9ovbz21\" encryptusername=\"v1_361333ea6e854479810494826e82e9e2a49fb0107ed702186afe900cc88470d94788df3e30945d5e46cf87edfc4dcbff@stranger\" fromnickname=\"yaphone\" content=\"\" shortpy=\"YAPHONE\" imagestatus=\"3\" scene=\"6\" country=\"CN\" province=\"Chongqing\" city=\"South Bank\" sign=\"\" percard=\"1\" sex=\"2\" alias=\"\" weibo=\"\" weibonickname=\"\" albumflag=\"0\" albumstyle=\"0\" albumbgimgid=\"\" snsflag=\"17\" snsbgimgid=\"http://mmsns.qpic.cn/mmsns/4376ae1e0cf0ccced233def9ad1560d0dec29d64941ab85a46d7c13c5df14f3338c7290aefc758d1960b91bbb372abf030e795b4c2d050f7/0\" snsbgobjectid=\"11749457640825893599\" mhash=\"\" mfullhash=\"\" bigheadimgurl=\"http://wx.qlogo.cn/mmhead/ver_1/rA30HUEYRfMW5Se0ib95ZT8XMY24IicxPY2QPblbK6UNzicwUIIE9CGmgKh4WOUuo8PLeAsPwiaNfLVGDOAOUADZ9VHOzyC8th7iavQwnCw3Fuos/0\" smallheadimgurl=\"http://wx.qlogo.cn/mmhead/ver_1/rA30HUEYRfMW5Se0ib95ZT8XMY24IicxPY2QPblbK6UNzicwUIIE9CGmgKh4WOUuo8PLeAsPwiaNfLVGDOAOUADZ9VHOzyC8th7iavQwnCw3Fuos/132\" ticket=\"v2_7b244cf55b35daf113c16efb4db83ca0a38a4ca40a01a375d4f36b64fb7f597429495e333ebdb1673164fad0e0ec1aca1fbb90043d410360e29c2277caf7f8f1@stranger\" opcode=\"2\" googlecontact=\"\" qrticket=\"\" chatroomusername=\"\" sourceusername=\"\" sourcenickname=\"\"><brandlist count=\"0\" ver=\"656202095\"></brandlist></msg>",
"StatusNotifyUserName": "",
"FromUserName": "fmessage",
"OriContent": "",
"FileSize": ""
}
```



## 如何使用
Expand Down Expand Up @@ -844,6 +909,8 @@ itchat4j开源后,收到很多朋友的建议,对ithcat4j改进做出了很

@QQ群好友([email protected]

以及[每位PR的朋友](https://github.com/yaphone/itchat4j/graphs/contributors)

## 问题和建议

本项目长期更新、维护,功能不断扩展与完善中,欢迎star。
Expand Down
4 changes: 2 additions & 2 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -103,8 +103,8 @@
<artifactId>maven-compiler-plugin</artifactId>
<version>3.0</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>

Expand Down
2 changes: 0 additions & 2 deletions src/main/java/cn/zhouyafeng/itchat4j/Wechat.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,12 @@
import org.slf4j.LoggerFactory;

import cn.zhouyafeng.itchat4j.controller.LoginController;
import cn.zhouyafeng.itchat4j.core.Core;
import cn.zhouyafeng.itchat4j.core.MsgCenter;
import cn.zhouyafeng.itchat4j.face.IMsgHandlerFace;

public class Wechat {
private static final Logger LOG = LoggerFactory.getLogger(Wechat.class);
private IMsgHandlerFace msgHandler;
private Core core = Core.getInstance();

public Wechat(IMsgHandlerFace msgHandler, String qrPath) {
System.setProperty("jsse.enableSNIExtension", "false"); // 防止SSL错误
Expand Down
81 changes: 69 additions & 12 deletions src/main/java/cn/zhouyafeng/itchat4j/api/MessageTools.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,16 @@

import java.io.File;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Random;

import javax.activation.MimetypesFileTypeMap;

import org.apache.commons.lang3.StringUtils;
import org.apache.http.Consts;
import org.apache.http.HttpEntity;
import org.apache.http.entity.ContentType;
Expand All @@ -21,10 +24,14 @@
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;

import cn.zhouyafeng.itchat4j.beans.BaseMsg;
import cn.zhouyafeng.itchat4j.beans.RecommendInfo;
import cn.zhouyafeng.itchat4j.core.Core;
import cn.zhouyafeng.itchat4j.utils.Config;
import cn.zhouyafeng.itchat4j.utils.MyHttpClient;
import cn.zhouyafeng.itchat4j.utils.enums.StorageLoginInfoEnum;
import cn.zhouyafeng.itchat4j.utils.enums.URLEnum;
import cn.zhouyafeng.itchat4j.utils.enums.VerifyFriendEnum;

/**
* 消息处理类
Expand Down Expand Up @@ -75,8 +82,8 @@ public static void sendMsgById(String text, String id) {
*
* @author https://github.com/yaphone
* @date 2017年5月4日 下午11:17:38
* @param msg
* @param toUserName
* @param text
* @param nickName
*/
public static boolean sendMsgByNickName(String text, String nickName) {
if (nickName != null) {
Expand Down Expand Up @@ -121,16 +128,7 @@ public static void webWxSendMsg(int msgType, String content, String toUserName)
}

/**
* 上传多媒体文件到 微信服务器,目前应该支持3种类型:
* <p>
* 1. pic 直接显示,包含图片,表情
* </p>
* <p>
* 2.video
* </p>
* <p>
* 3.doc 显示为文件,包含PDF等
* </p>
* 上传多媒体文件到 微信服务器,目前应该支持3种类型: 1. pic 直接显示,包含图片,表情 2.video 3.doc 显示为文件,包含PDF等
*
* @author https://github.com/yaphone
* @date 2017年5月7日 上午12:41:13
Expand Down Expand Up @@ -364,4 +362,63 @@ private static boolean webWxSendAppMsg(String userId, Map<String, String> data)
return false;
}

/**
* 被动添加好友
*
* @date 2017年6月29日 下午10:08:43
* @param msg
* @param accept
* true 接受 false 拒绝
*/
public static void addFriend(BaseMsg msg, boolean accept) {
if (!accept) { // 不添加
return;
}
int status = VerifyFriendEnum.ACCEPT.getCode(); // 接受好友请求
RecommendInfo recommendInfo = msg.getRecommendInfo();
String userName = recommendInfo.getUserName();
String ticket = recommendInfo.getTicket();
// 更新好友列表
// TODO 此处需要更新好友列表
// core.getContactList().add(msg.getJSONObject("RecommendInfo"));

String url = String.format(URLEnum.WEB_WX_VERIFYUSER.getUrl(), core.getLoginInfo().get("url"),
String.valueOf(System.currentTimeMillis() / 3158L), core.getLoginInfo().get("pass_ticket"));

List<Map<String, Object>> verifyUserList = new ArrayList<Map<String, Object>>();
Map<String, Object> verifyUser = new HashMap<String, Object>();
verifyUser.put("Value", userName);
verifyUser.put("VerifyUserTicket", ticket);
verifyUserList.add(verifyUser);

List<Integer> sceneList = new ArrayList<Integer>();
sceneList.add(33);

JSONObject body = new JSONObject();
body.put("BaseRequest", core.getParamMap().get("BaseRequest"));
body.put("Opcode", status);
body.put("VerifyUserListSize", 1);
body.put("VerifyUserList", verifyUserList);
body.put("VerifyContent", "");
body.put("SceneListCount", 1);
body.put("SceneList", sceneList);
body.put("skey", core.getLoginInfo().get(StorageLoginInfoEnum.skey.getKey()));

String result = null;
try {
String paramStr = JSON.toJSONString(body);
HttpEntity entity = myHttpClient.doPost(url, paramStr);
result = EntityUtils.toString(entity, Consts.UTF_8);
} catch (Exception e) {
LOG.error("webWxSendMsg", e);
}

if (StringUtils.isBlank(result)) {
LOG.error("被动添加好友失败");
}

LOG.debug(result);

}

}
2 changes: 2 additions & 0 deletions src/main/java/cn/zhouyafeng/itchat4j/api/WechatTools.java
Original file line number Diff line number Diff line change
Expand Up @@ -172,6 +172,8 @@ public static void setUserInfo() {
}

/**
*
* 根据用户昵称设置备注名称
*
* @date 2017年5月27日 上午12:21:40
* @param userName
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/cn/zhouyafeng/itchat4j/core/Core.java
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ public static Core getInstance() {

private JSONObject userSelf; // 登陆账号自身信息
private List<JSONObject> memberList = new ArrayList<JSONObject>(); // 好友+群聊+公众号+特殊账号
private List<JSONObject> contactList = new ArrayList<JSONObject>();;// 好友
private List<JSONObject> contactList = new ArrayList<JSONObject>();// 好友
private List<JSONObject> groupList = new ArrayList<JSONObject>();; // 群
private Map<String, JSONArray> groupMemeberMap = new HashMap<String, JSONArray>(); // 群聊成员字典
private List<JSONObject> publicUsersList = new ArrayList<JSONObject>();;// 公众号/服务号
Expand Down
9 changes: 8 additions & 1 deletion src/main/java/cn/zhouyafeng/itchat4j/core/MsgCenter.java
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
import cn.zhouyafeng.itchat4j.api.MessageTools;
import cn.zhouyafeng.itchat4j.beans.BaseMsg;
import cn.zhouyafeng.itchat4j.face.IMsgHandlerFace;
import cn.zhouyafeng.itchat4j.utils.MsgCodeEnum;
import cn.zhouyafeng.itchat4j.utils.enums.MsgCodeEnum;
import cn.zhouyafeng.itchat4j.utils.enums.MsgTypeEnum;
import cn.zhouyafeng.itchat4j.utils.tools.CommonTools;

Expand Down Expand Up @@ -84,6 +84,8 @@ public static JSONArray produceMsg(JSONArray msgList) {
m.put("Type", MsgTypeEnum.VOICE.getType());
} else if (m.getInteger("MsgType").equals(MsgCodeEnum.MSGTYPE_VERIFYMSG.getCode())) {// friends
// 好友确认消息
// MessageTools.addFriend(core, userName, 3, ticket); // 确认添加好友
m.put("Type", MsgTypeEnum.VERIFYMSG.getType());

} else if (m.getInteger("MsgType").equals(MsgCodeEnum.MSGTYPE_SHARECARD.getCode())) { // 共享名片
m.put("Type", MsgTypeEnum.NAMECARD.getType());
Expand Down Expand Up @@ -129,6 +131,7 @@ public static void handleMsg(IMsgHandlerFace msgHandler) {
String result = msgHandler.textMsgHandle(msg);
MessageTools.sendMsgById(result, core.getMsgList().get(0).getFromUserName());
} else if (msg.getType().equals(MsgTypeEnum.PIC.getType())) {

String result = msgHandler.picMsgHandle(msg);
MessageTools.sendMsgById(result, core.getMsgList().get(0).getFromUserName());
} else if (msg.getType().equals(MsgTypeEnum.VOICE.getType())) {
Expand All @@ -142,6 +145,10 @@ public static void handleMsg(IMsgHandlerFace msgHandler) {
MessageTools.sendMsgById(result, core.getMsgList().get(0).getFromUserName());
} else if (msg.getType().equals(MsgTypeEnum.SYS.getType())) { // 系统消息
msgHandler.sysMsgHandle(msg);
} else if (msg.getType().equals(MsgTypeEnum.VERIFYMSG.getType())) { // 确认添加好友消息
String result = msgHandler.verifyAddFriendMsgHandle(msg);
MessageTools.sendMsgById(result,
core.getMsgList().get(0).getRecommendInfo().getUserName());
}
} catch (Exception e) {
e.printStackTrace();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -70,4 +70,13 @@ public interface IMsgHandlerFace {
*/
public void sysMsgHandle(BaseMsg msg);

/**
* 处理确认添加好友消息
*
* @date 2017年6月28日 下午10:15:30
* @param msg
* @return
*/
public String verifyAddFriendMsgHandle(BaseMsg msg);

}
Original file line number Diff line number Diff line change
Expand Up @@ -295,7 +295,7 @@ public void run() {
try {
JSONArray msgList = new JSONArray();
msgList = msgObj.getJSONArray("AddMsgList");
JSONArray modContactList = msgObj.getJSONArray("ModContactList"); // 存有删除或者新增的好友信息
JSONArray modContactList = msgObj.getJSONArray("ModContactList"); // 存在删除或者新增的好友信息
msgList = MsgCenter.produceMsg(msgList);
for (int j = 0; j < msgList.size(); j++) {
JSONObject userInfo = modContactList.getJSONObject(j);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,6 @@ public HttpEntity doGet(String url, List<BasicNameValuePair> params, boolean red
if (params != null) {
String paramStr = EntityUtils.toString(new UrlEncodedFormEntity(params, Consts.UTF_8));
httpGet = new HttpGet(url + "?" + paramStr);

} else {
httpGet = new HttpGet(url);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package cn.zhouyafeng.itchat4j.utils;
package cn.zhouyafeng.itchat4j.utils.enums;

/**
* 消息类型
Expand Down Expand Up @@ -42,7 +42,7 @@ public enum MsgCodeEnum {
MSGTYPE_STATUSNOTIFY(51, ""),
MSGTYPE_SYSNOTICE(9999, ""),
MSGTYPE_POSSIBLEFRIEND_MSG(40, ""),
MSGTYPE_VERIFYMSG(37, ""),
MSGTYPE_VERIFYMSG(37, "好友请求"),
MSGTYPE_SHARECARD(42, ""),
MSGTYPE_SYS(10000, "系统消息"),
MSGTYPE_RECALLED(10002, "")
Expand Down
Loading

0 comments on commit 2bc3e1a

Please sign in to comment.