├── .classpath ├── .project ├── README.md ├── bin └── itchat4jtest │ └── demo │ ├── demo1 │ ├── Mytest.class │ └── SimpleDemo.class │ ├── demo2 │ └── TulingRobot.class │ ├── linux │ └── LinuxSimpleDemo.class │ └── windows │ └── WindowsSimpleDemo.class ├── lib └── itchat4j-1.1.0-jar-with-dependencies.jar └── src └── itchat4jtest └── demo ├── demo1 ├── Mytest.java └── SimpleDemo.java ├── demo2 └── TulingRobot.java ├── linux └── LinuxSimpleDemo.java └── windows └── WindowsSimpleDemo.java /.classpath: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /.project: -------------------------------------------------------------------------------- 1 | 2 | 3 | itchat4jdemo 4 | 5 | 6 | 7 | 8 | 9 | org.eclipse.jdt.core.javabuilder 10 | 11 | 12 | 13 | 14 | 15 | org.eclipse.jdt.core.javanature 16 | 17 | 18 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # itchat4j -- 示例程序 2 | 3 | ## 说明 4 | 5 | 此项目为[itchat4j](https://github.com/yaphone/itchat4j)的示例项目,可直接作为工程导入Eclipse,目前项目结构为: 6 | 7 | ![项目结构](http://oj5vdtyuu.bkt.clouddn.com/itchat4jdemo%E9%A1%B9%E7%9B%AE%E7%BB%93%E6%9E%84.png) 8 | 9 | 在该示例项目中,lib文件夹下为itchat4j程序,加入Build path即可。demo1包中为简单示例项目,收到文本信息直接返回原消息给发送者,图片、语音、小视频文件根据路径保存,demo2包中为图灵机器人示例,demo3包请忽略。(是我专门为Windows平台做的一个小示例,打包后可直接在windows平台下运行) 10 | 11 | ## 项目介绍 12 | 13 | ### Windows平台可直接运行jar包 14 | 15 | 为了更直观地演示,我为Windows平台做了一个可运行的版本,如果你的操作系统是Windows,可直接[下载示例项目的release版本](https://github.com/yaphone/itchat4jdemo/releases/tag/V0.0.1),然后在你的`D`盘根目录下(必须是`D`盘根目录)新建`itchat4j`目录,然后在此目录下新建`login`、`pic`、`viedo`、`voice`四个子目录,就像这样: 16 | 17 | ![目录结构](http://oj5vdtyuu.bkt.clouddn.com/%E7%9B%AE%E5%BD%95%E7%BB%93%E6%9E%84.png) 18 | 19 | 然后配置好你的Java环境变量,通过命令`java -jar 路径/windows_itchat4j.jar`来执行程序,之后,打开`D:/login`文件夹,扫描二维码即可登陆,登陆成功后,可接收文本消息,收到图片、语音、小视频消息后会保存在对应目录: 20 | 21 | ![Windows控制台](http://oj5vdtyuu.bkt.clouddn.com/windows%E5%8F%AF%E8%BF%90%E8%A1%8C%E7%A8%8B%E5%BA%8F.png) 22 | 23 | ![文件保存](http://oj5vdtyuu.bkt.clouddn.com/windows%E6%94%B6%E5%88%B0%E6%96%87%E4%BB%B6.png) 24 | 25 | 26 | 27 | ## 入门教程 28 | 29 | 接下来,通过两个小Demo来演示一下如何使用itchat4j来扩展你的个人微信号。 30 | 31 | ### Demo1: SimpleDemo 32 | 33 | 这个小Demo将会将收到的文本消息发送给发件人,如果是图片、语音或者小视频消息,将会保存在我们指定的路径下。 34 | 35 | 首先需要新建一个类来实现`IMsgHandlerFace`这个接口,这个类要做的就是我们需要完成的逻辑,该接口有四个方法需要实现,`textMsgHandle`用于处理文本信息,`picMsgHandle`用于处理图片信息,`viedoMsgHandle`用于处理小视频信息,`voiceMsgHandle`用于处理语音信息,代码如下: 36 | 37 | ```java 38 | public class MsgHandler implements IMsgHandlerFace { 39 | 40 | @Override 41 | public String picMsgHandle(JSONObject arg0) { 42 | // TODO Auto-generated method stub 43 | return null; 44 | } 45 | 46 | @Override 47 | public String textMsgHandle(JSONObject arg0) { 48 | // TODO Auto-generated method stub 49 | return null; 50 | } 51 | 52 | @Override 53 | public String viedoMsgHandle(JSONObject arg0) { 54 | // TODO Auto-generated method stub 55 | return null; 56 | } 57 | 58 | @Override 59 | public String voiceMsgHandle(JSONObject arg0) { 60 | // TODO Auto-generated method stub 61 | return null; 62 | } 63 | 64 | } 65 | ``` 66 | 67 | 由于没有关联源码,所以接口中的参数都变成了`arg0`这种,建议关联一下源码,源码可在[release](https://github.com/yaphone/itchat4j/releases)中下载,当然不关联也不会有啥影响,`arg0`其实是我们需要处理的消息体,为了更直观,建议把`arg0`修改为`msg`,msg是fastjson的JSONObject类型,这个其实不用关心,我们只需要知道如何来获取需要的消息就可以了,下面的Demo中有示例。然后我们来写处理逻辑。 68 | 69 | 在`textMsgHandler`中,通过`msg.getString("Text")`就可以获取收到的文本信息,然后作进一步处理,比如接入图灵机器人、消息自动回复等,我们需要在这个方法中返回一个字符串,即是需要回复给好友的消息,在SimpleDemo这个示例中,我们直接回复收到的原文本消息。 70 | 71 | 在`picMsgHandle`、`voiceMsgHandle`、`viedoMsgHandle`这三个方法中,我们需要将这些消息下载下来,然后再作进一步处理,所以需要为每种类型的消息提供一个保存路径,然后调用`DownloadTools.getDownloadFn`方法可以将这三种类型的消息下载下来。`DownloadTools.getDownloadFn`方法提供下载图片、语音、小视频的功能,需要三个参数,第一个参数为我们收到的msg,第二个参数为`MsgType`,也就是消息类型,图片、语音、小视频分别对应`MsgTypeEnum.PIC.getType()`、`MsgTypeEnum.VOICE.getType()`、`MsgTypeEnum.VIEDO.getType()`,然后第三个参数就是保存这些消息的路径了。 72 | 73 | 就不多说了,让代码和注释君自述吧,有不明白的地方,可以在Issue中提出来。 74 | 75 | ```java 76 | /** 77 | * 简单示例程序,收到文本信息自动回复原信息,收到图片、语音、小视频后根据路径自动保存 78 | * 79 | * @author https://github.com/yaphone 80 | * @date 创建时间:2017年4月28日 下午10:50:36 81 | * @version 1.0 82 | * 83 | */ 84 | public class SimpleDemo implements IMsgHandlerFace { 85 | 86 | @Override 87 | public String textMsgHandle(JSONObject msg) { 88 | String text = msg.getString("Text"); 89 | return text; 90 | } 91 | 92 | @Override 93 | public String picMsgHandle(JSONObject msg) { 94 | String fileName = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss").format(new Date()) + ".jpg"; // 这里使用收到图片的时间作为文件名 95 | String picPath = "D://itchat4j/pic" + File.separator + fileName; // 保存图片的路径 96 | DownloadTools.getDownloadFn(msg, MsgTypeEnum.PIC.getType(), picPath); // 调用此方法来保存图片 97 | return "图片保存成功"; 98 | } 99 | 100 | @Override 101 | public String voiceMsgHandle(JSONObject msg) { 102 | String fileName = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss").format(new Date()) + ".mp3"; // 这里使用收到语音的时间作为文件名 103 | String voicePath = "D://itchat4j/voice" + File.separator + fileName; // 保存语音的路径 104 | DownloadTools.getDownloadFn(msg, MsgTypeEnum.VOICE.getType(), voicePath); // 调用此方法来保存语音 105 | return "声音保存成功"; 106 | } 107 | 108 | @Override 109 | public String viedoMsgHandle(JSONObject msg) { 110 | String fileName = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss").format(new Date()) + ".mp4"; // 这里使用收到小视频的时间作为文件名 111 | String viedoPath = "D://itchat4j/viedo" + File.separator + fileName;// 保存小视频的路径 112 | DownloadTools.getDownloadFn(msg, MsgTypeEnum.VIEDO.getType(), viedoPath);// 调用此方法来保存小视频 113 | return "视频保存成功"; 114 | } 115 | 116 | @Override 117 | public String nameCardMsgHandle(JSONObject arg0) { 118 | return "收到名片消息"; 119 | } 120 | 121 | } 122 | ``` 123 | 124 | 之后我们需要将实现`IMsgHandlerFace`接口的类【注入】到`Wechat`中来启动服务,`Wechat`是服务的主入口,其构造函数接受两个参数,一个是我们刚才实现`IMsgHandlerFace`接口的类,另一个是保存登陆二维码图片的路径。之后在`Wechat`对象上调用`start()`方法来启动服务,会在我们刚才传入的路径下生成一个`QR.jpg`文件,即是登陆二维码,通过手机微信扫描后即可登陆,服务启动,处理逻辑开始工作。这里有一点需要注意:*二维码图片如果超过一定时间未扫描会过期,过期时会自动更新,所以你可能需要重新打开图片*。 125 | 126 | 额,文字还是太苍白,让代码和注释君自述吧。 127 | 128 | ```Java 129 | /** 130 | * 131 | * @author https://github.com/yaphone 132 | * @date 创建时间:2017年4月28日 上午12:44:10 133 | * @version 1.0 134 | * 135 | */ 136 | public class Mytest { 137 | public static void main(String[] args) { 138 | String qrPath = "D://itchat4j//login"; // 保存登陆二维码图片的路径 139 | IMsgHandlerFace msgHandler = new SimpleDemo(); // 实现IMsgHandlerFace接口的类 140 | Wechat wechat = new Wechat(msgHandler, qrPath); // 【注入】 141 | wechat.start(); // 启动服务,会在qrPath下生成一张二维码图片,扫描即可登陆,注意,二维码图片如果超过一定时间未扫描会过期,过期时会自动更新,所以你可能需要重新打开图片 142 | } 143 | 144 | } 145 | 146 | ``` 147 | 148 | ### Demo2 图灵机器人 149 | 150 | > 图灵机器人大脑具备强大的中文语义分析能力,可准确理解中文含义并作出回应,是最擅长聊中文的机器人大脑,赋予软硬件产品自然流畅的人机对话能力。(引自百度百科) 151 | 152 | 这个示例中我们接入图灵机器人的API,将收到的好友的文本信息发送给图灵机器人,并将机器人回复的消息发送给好友,接下来还是把舞台交代码和注释君吧。 153 | 154 | ```Java 155 | /** 156 | * 图灵机器人示例 157 | * 158 | * @author https://github.com/yaphone 159 | * @date 创建时间:2017年4月24日 上午12:13:26 160 | * @version 1.0 161 | * 162 | */ 163 | public class TulingRobot implements IMsgHandlerFace { 164 | 165 | MyHttpClient myHttpClient = MyHttpClient.getInstance(); 166 | String apiKey = "597b34bea4ec4c85a775c469c84b6817"; // 这里是我申请的图灵机器人API接口,每天只能5000次调用,建议自己去申请一个,免费的:) 167 | Logger logger = Logger.getLogger("TulingRobot"); 168 | 169 | @Override 170 | public String textMsgHandle(JSONObject msg) { 171 | String result = ""; 172 | String text = msg.getString("Text"); 173 | String url = "http://www.tuling123.com/openapi/api"; 174 | Map paramMap = new HashMap(); 175 | paramMap.put("key", apiKey); 176 | paramMap.put("info", text); 177 | paramMap.put("userid", "123456"); 178 | String paramStr = JSON.toJSONString(paramMap); 179 | try { 180 | HttpEntity entity = myHttpClient.doPost(url, paramStr); 181 | result = EntityUtils.toString(entity, "UTF-8"); 182 | JSONObject obj = JSON.parseObject(result); 183 | if (obj.getString("code").equals("100000")) { 184 | result = obj.getString("text"); 185 | } else { 186 | result = "处理有误"; 187 | } 188 | } catch (Exception e) { 189 | logger.info(e.getMessage()); 190 | } 191 | return result; 192 | } 193 | 194 | @Override 195 | public String picMsgHandle(JSONObject msg) { 196 | 197 | return "收到图片"; 198 | } 199 | 200 | @Override 201 | public String voiceMsgHandle(JSONObject msg) { 202 | 203 | return "收到语音"; 204 | } 205 | 206 | @Override 207 | public String viedoMsgHandle(JSONObject msg) { 208 | 209 | return "收到视频"; 210 | } 211 | 212 | public static void main(String[] args) { 213 | IMsgHandlerFace msgHandler = new TulingRobot(); 214 | Wechat wechat = new Wechat(msgHandler, "/home/itchat4j/demo/itchat4j/login"); 215 | wechat.start(); 216 | } 217 | 218 | @Override 219 | public String nameCardMsgHandle(JSONObject arg0) { 220 | return "收到名片消息"; 221 | } 222 | 223 | } 224 | ``` 225 | 226 | 227 | 228 | ## 问题和建议 229 | 230 | 本项目长期更新、维护,功能不断扩展与完善中,欢迎star。 231 | 232 | 项目使用过程中遇到问题,欢迎随时反馈。 233 | 234 | 任何问题或者建议都可以在Issue中提出来,也可以加入QQ群讨论:636365179 235 | 236 | -------------------------------------------------------------------------------- /bin/itchat4jtest/demo/demo1/Mytest.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yaphone/itchat4jdemo/e0b21529dc65daa0d6b46474580113e16c10d22d/bin/itchat4jtest/demo/demo1/Mytest.class -------------------------------------------------------------------------------- /bin/itchat4jtest/demo/demo1/SimpleDemo.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yaphone/itchat4jdemo/e0b21529dc65daa0d6b46474580113e16c10d22d/bin/itchat4jtest/demo/demo1/SimpleDemo.class -------------------------------------------------------------------------------- /bin/itchat4jtest/demo/demo2/TulingRobot.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yaphone/itchat4jdemo/e0b21529dc65daa0d6b46474580113e16c10d22d/bin/itchat4jtest/demo/demo2/TulingRobot.class -------------------------------------------------------------------------------- /bin/itchat4jtest/demo/linux/LinuxSimpleDemo.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yaphone/itchat4jdemo/e0b21529dc65daa0d6b46474580113e16c10d22d/bin/itchat4jtest/demo/linux/LinuxSimpleDemo.class -------------------------------------------------------------------------------- /bin/itchat4jtest/demo/windows/WindowsSimpleDemo.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yaphone/itchat4jdemo/e0b21529dc65daa0d6b46474580113e16c10d22d/bin/itchat4jtest/demo/windows/WindowsSimpleDemo.class -------------------------------------------------------------------------------- /lib/itchat4j-1.1.0-jar-with-dependencies.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yaphone/itchat4jdemo/e0b21529dc65daa0d6b46474580113e16c10d22d/lib/itchat4j-1.1.0-jar-with-dependencies.jar -------------------------------------------------------------------------------- /src/itchat4jtest/demo/demo1/Mytest.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yaphone/itchat4jdemo/e0b21529dc65daa0d6b46474580113e16c10d22d/src/itchat4jtest/demo/demo1/Mytest.java -------------------------------------------------------------------------------- /src/itchat4jtest/demo/demo1/SimpleDemo.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yaphone/itchat4jdemo/e0b21529dc65daa0d6b46474580113e16c10d22d/src/itchat4jtest/demo/demo1/SimpleDemo.java -------------------------------------------------------------------------------- /src/itchat4jtest/demo/demo2/TulingRobot.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yaphone/itchat4jdemo/e0b21529dc65daa0d6b46474580113e16c10d22d/src/itchat4jtest/demo/demo2/TulingRobot.java -------------------------------------------------------------------------------- /src/itchat4jtest/demo/linux/LinuxSimpleDemo.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yaphone/itchat4jdemo/e0b21529dc65daa0d6b46474580113e16c10d22d/src/itchat4jtest/demo/linux/LinuxSimpleDemo.java -------------------------------------------------------------------------------- /src/itchat4jtest/demo/windows/WindowsSimpleDemo.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yaphone/itchat4jdemo/e0b21529dc65daa0d6b46474580113e16c10d22d/src/itchat4jtest/demo/windows/WindowsSimpleDemo.java --------------------------------------------------------------------------------