文档章节

基于YMP-WeChat模块接收并处理微信事件及消息的代码

有理想的鱼
 有理想的鱼
发布于 2014/03/20 23:48
字数 934
阅读 741
收藏 3
public class MessageHandler implements IMessageHandler {

	private static final Map<String, PairObject<String, Long>> __resources = new ConcurrentHashMap<String, PairObject<String, Long>>();

	public OutMessage onTextMessage(ITextMessage message) throws Exception {
		TextOutMessage _msg = new TextOutMessage(message.getFromUserName());
		_msg.setFromUserName(message.getToUserName());
		_msg.setContent("您发了一段文字: " + message.getContent());
		_msg.setCreateTime(System.currentTimeMillis());
		return _msg;
	}

	public OutMessage onImageMessage(IImageMessage message) throws Exception {
		TextOutMessage _msg = new TextOutMessage(message.getFromUserName());
		_msg.setFromUserName(message.getToUserName());
		_msg.setContent("您发了一张图片: " + message.getMediaId() + "   " + message.getPicUrl());
		_msg.setCreateTime(System.currentTimeMillis());
		return _msg;
	}

	public OutMessage onVoiceMessage(IVoiceMessage message) throws Exception {
		TextOutMessage _msg = new TextOutMessage(message.getFromUserName());
		_msg.setFromUserName(message.getToUserName());
		_msg.setContent("您发了一段语音: " + message.getMediaId() + "  "+ message.getRecognition());
		_msg.setCreateTime(System.currentTimeMillis());
		return _msg;
	}

	public OutMessage onVideoMessage(IVideoMessage message) throws Exception {
		TextOutMessage _msg = new TextOutMessage(message.getFromUserName());
		_msg.setFromUserName(message.getToUserName());
		_msg.setContent("您发了一段视频: " + message.getMediaId());
		_msg.setCreateTime(System.currentTimeMillis());
		return _msg;
	}

	public OutMessage onLocationMessage(ILocationMessage message) throws Exception {
		TextOutMessage _msg = new TextOutMessage(message.getFromUserName());
		_msg.setFromUserName(message.getToUserName());
		_msg.setContent("您分享的位置: " + message.getLabel() + "\n\r" + message.getX() + "," + message.getY() + "," + message.getScale());
		_msg.setCreateTime(System.currentTimeMillis());
		return _msg;
	}

	public OutMessage onLinkMessage(ILinkMessage message) throws Exception {
		TextOutMessage _msg = new TextOutMessage(message.getFromUserName());
		_msg.setFromUserName(message.getToUserName());
		_msg.setContent("您发了一个连接: " + message.getTitle() + "  " + message.getUrl());
		_msg.setCreateTime(System.currentTimeMillis());
		return _msg;
	}

	public OutMessage onEventMessage(InMessage message) throws Exception {
		TextOutMessage _msg = new TextOutMessage(message.getFromUserName());
		_msg.setFromUserName(message.getToUserName());
		//
		XStream _xstream = XStreamHelper.createXStream(true);
		_xstream.processAnnotations(message.getClass());
		//
		_msg.setContent("收到一条未知类型的消息报文:" + _xstream.toXML(message));
		_msg.setCreateTime(System.currentTimeMillis());
		return _msg;
	}

	public OutMessage onEventSubscribe(ISubscribeEvent event) throws Exception {
		TextOutMessage _msg = new TextOutMessage(event.getFromUserName());
		_msg.setFromUserName(event.getToUserName());
		_msg.setContent("非常感谢您对我们的关注,更新信息请访问https://github.com/suninformation");
		_msg.setCreateTime(System.currentTimeMillis());
		return _msg;
	}

	public OutMessage onEventUnsubscribe(IUnsubscribeEvent event) throws Exception {
		Logs.debug(event.getFromUserName() + "取消了关注");
		return null;
	}

	public OutMessage onEventClick(final IClickEvent event) throws Exception {
		if (event.getEventKey().equalsIgnoreCase("TEST_MSG_TEXT")) {
			TextOutMessage _msg = new TextOutMessage(event.getFromUserName());
			_msg.setContent("您好! 感谢您对我们的关注, 更新信息请访问https://github.com/suninformation!");
			WeChat.wxMessageSendCustom(_msg);
		} else if (event.getEventKey().equalsIgnoreCase("TEST_MSG_IMAGE")) {
			PairObject<String, Long> _res = __resources.get("IMAGE");
			if (_res == null || (System.currentTimeMillis() - _res.getValue()) > (1000*60*60*24*2)) {
				WxMediaUploadResult _result = WeChat.wxMediaUploadFile(WxMediaType.IMAGE, new File(RuntimeUtils.getRootPath(), "resources/image.jpg"));
				System.out.println(JSON.toJSONString(_result, true));
				__resources.put("IMAGE", new PairObject<String, Long>(_result.getMediaId(), _result.getCreatedAt()));
				_res = __resources.get("IMAGE");
			}
			ImageOutMessage _msg = new ImageOutMessage(event.getFromUserName());
			_msg.setImage(new MediaId(_res.getKey()));
			WeChat.wxMessageSendCustom(_msg);
		} else if (event.getEventKey().equalsIgnoreCase("TEST_MSG_VOICE")) {
			PairObject<String, Long> _res = __resources.get("VOICE");
			if (_res == null || (System.currentTimeMillis() - _res.getValue()) > (1000*60*60*24*2)) {
				WxMediaUploadResult _result = WeChat.wxMediaUploadFile(WxMediaType.VOICE, new File(RuntimeUtils.getRootPath(), "resources/demo.amr"));
				System.out.println(JSON.toJSONString(_result, true));
				__resources.put("VOICE", new PairObject<String, Long>(_result.getMediaId(), _result.getCreatedAt()));
				_res = __resources.get("VOICE");
			}
			VoiceOutMessage _msg = new VoiceOutMessage(event.getFromUserName());
			_msg.setVoice(new MediaId(_res.getKey()));
			WeChat.wxMessageSendCustom(_msg);
		} else if (event.getEventKey().equalsIgnoreCase("TEST_MSG_VIDEO")) {
			PairObject<String, Long> _res = __resources.get("VIDEO");
			if (_res == null || (System.currentTimeMillis() - _res.getValue()) > (1000*60*60*24*2)) {
				WxMediaUploadResult _result = WeChat.wxMediaUploadFile(WxMediaType.VIDEO, new File(RuntimeUtils.getRootPath(), "resources/demo.mp4"));
				System.out.println(JSON.toJSONString(_result, true));
				__resources.put("VIDEO", new PairObject<String, Long>(_result.getMediaId(), _result.getCreatedAt()));
				_res = __resources.get("VIDEO");
			}
			VideoOutMessage _msg = new VideoOutMessage(event.getFromUserName());
			MediaId _v = new MediaId(_res.getKey());
			_v.setTitle("测试视频");
			_v.setDescription("测试视频描述");
			_msg.setVideo(_v);
			WeChat.wxMessageSendCustom(_msg);
		} else if (event.getEventKey().equalsIgnoreCase("TEST_MSG_MUSIC")) {
			PairObject<String, Long> _res = __resources.get("THUMB");
			if (_res == null || (System.currentTimeMillis() - _res.getValue()) > (1000*60*60*24*2)) {
				WxMediaUploadResult _result = WeChat.wxMediaUploadFile(WxMediaType.THUMB, new File(RuntimeUtils.getRootPath(), "resources/image.jpg"));
				System.out.println(JSON.toJSONString(_result, true));
				__resources.put("THUMB", new PairObject<String, Long>(_result.getThubmMediaId(), _result.getCreatedAt()));
				_res = __resources.get("THUMB");
			}
			MusicOutMessage _msg = new MusicOutMessage(event.getFromUserName());
			MediaId _music = new MediaId();
			_music.setMusicUrl("http://localhost/images/RainandTears.mp3");
			_music.setHqMusicUrl(_music.getMusicUrl());
			_music.setTitle("Rain and Tears");
			_music.setDescription("经典老歌...");
			_music.setThumbMediaId(_res.getKey());
			_msg.setMusic(_music);
			WeChat.wxMessageSendCustom(_msg);
		} else if (event.getEventKey().equalsIgnoreCase("TEST_MSG_NEWS")) {
			PairObject<String, Long> _res = __resources.get("IMAGE");
			if (_res == null || (System.currentTimeMillis() - _res.getValue()) > (1000*60*60*24*2)) {
				WxMediaUploadResult _result = WeChat.wxMediaUploadFile(WxMediaType.IMAGE, new File(RuntimeUtils.getRootPath(), "resources/image.jpg"));
				System.out.println(JSON.toJSONString(_result, true));
				__resources.put("IMAGE", new PairObject<String, Long>(_result.getMediaId(), _result.getCreatedAt()));
				_res = __resources.get("IMAGE");
			}
			NewsOutMessage _msg = new NewsOutMessage(event.getFromUserName());
			Article _a = new Article();
			_a.setTitle("\"去哪儿\"很忙~~");
			_a.setPicUrl("http://localhost/images/image.jpg");
			_a.setUrl("https://github.com/suninformation");
			_msg.getArticles().add(_a);
			//
			Article _b = new Article();
			_b.setTitle("爸爸\"去哪儿\"~~");
			_msg.getArticles().add(_b);
			//
			Article _c = new Article();
			_c.setTitle("飞机\"去哪儿\"~~");
			_msg.getArticles().add(_c);
			//
			WeChat.wxMessageSendCustom(_msg);
		} else if (event.getEventKey().equalsIgnoreCase("TEST_API_USERINFO")) {
			WxUser _u = WeChat.wxUserGetInfo(event.getFromUserName(), null);
			NewsOutMessage _msg = new NewsOutMessage(event.getFromUserName());
			Article _a = new Article();
			_a.setTitle("用户基本信息: ");
			_a.setPicUrl(_u.getHeadImgUrl());
			StringBuilder _sb = new StringBuilder();
			_sb.append("昵称:").append(_u.getNickname()).append("\n\r");
			_sb.append("性别:").append(_u.getSex() == 1 ? "男" : "女").append("\n\r");
			_sb.append("城市:").append(_u.getCountry()).append(_u.getProvince()).append(_u.getCity()).append("\n\r");
			_sb.append("关注时间:").append(DateTimeUtils.formatTime(_u.getSubscribeTime() * 1000, null)).append("\n\r");
			_a.setDescription(_sb.toString());
			_msg.getArticles().add(_a);
			//
			WeChat.wxMessageSendCustom(_msg);
		} 
		return null;
	}

	public OutMessage onEventView(IViewEvent event) throws Exception {
		TextOutMessage _msg = new TextOutMessage(event.getFromUserName());
		_msg.setContent("您查看了网页: " + event.getEventKey());
		_msg.setCreateTime(System.currentTimeMillis());
		WeChat.wxMessageSendCustom(_msg);
		return null;
	}

	public OutMessage onEventScan(IScanEvent event) throws Exception {
		TextOutMessage _msg = new TextOutMessage(event.getFromUserName());
		_msg.setContent("您扫描了一张二维码: " + event.getEventKey() + "  " + event.getTicket());
		_msg.setCreateTime(System.currentTimeMillis());
		WeChat.wxMessageSendCustom(_msg);
		return null;
	}

	public OutMessage onEventLocation(ILocationEvent event) throws Exception {
		Logs.debug(event.getFromUserName() + "上报位置: " + event.getLatitude() + "," + event.getLongitude() + "," + event.getPrecision());
		TextOutMessage _msg = new TextOutMessage(event.getFromUserName());
		_msg.setContent("您当前上报的位置: " + event.getLatitude() + "," + event.getLongitude() + "," + event.getPrecision());
		_msg.setCreateTime(System.currentTimeMillis());
		WeChat.wxMessageSendCustom(_msg);
		return null;
	}

}



© 著作权归作者所有

共有 人打赏支持
有理想的鱼

有理想的鱼

粉丝 38
博文 10
码字总数 43696
作品 13
沈阳
高级程序员
私信 提问
node-wechat 微信实践

node-wechat 从去年开始微信开发越来越火了,体现在sdk和h5上(h5如果大家想听,可以回复),这里就简单介绍一下sdk开发 既然是noder,那肯定要用nodejs写,不然会被鄙视的。 node-webot简介...

i5ting
2015/07/10
0
3
微信开放平台服务接入模块--YMP-WeChat

基于YMP框架实现的微信开放平台服务接入模块,有关YMP框架内容点这里。 目前已完成除支付以外的全部接口封装。 2014-03-20 [更新] 优化接口方法,规避了手动获取AccessToken和JSONObject返回...

有理想的鱼
2014/03/19
4.2K
3
Scala实战-通过微信聊天窗口实现应答式点餐 1:连接微信API

当前代码tag: v0.0.1,https://github.com/yangbajing/wechat-meal/tree/v0.0.1 微信公众号提供了详尽的API文档说明,提供了明文和加密两种接入方式。这里,我们选择加密的接入方式微信公众号...

羊八井
2015/08/18
0
0
平台化

基础模块 1.用户权限管理 upms 用户:Admin 角色:Role 权限:Rights 组织机构:Organization 2.附件/图片存储管理 oss 附件:attach 3.支付模块 pay 日志:log 微信支付:wepay 支付宝:ali...

jun2xu
2017/11/07
0
0
微信菜单点击后。服务器返回消息无接收

@夏悸 你好,想跟你请教个问题: 如标题。我在用你的wechat api开发了一个系统。但是能够接收到点击事件发过来的报文,但是直接返回消息,微信收不到。请问如何解决? 代码如下: web action...

龙影
2014/06/29
1K
2

没有更多内容

加载失败,请刷新页面

加载更多

jquery通过id显示隐藏

var $div3 = $('#div3'); 显示 $div3.show(); 隐藏 $div3.hide();

yan_liu
今天
3
0
《乱世佳人》读书笔记及相关感悟3900字

《乱世佳人》读书笔记及相关感悟3900字: 之前一直听「荔枝」,后来不知怎的转向了「喜马拉雅」,一听就是三年。上班的时候听房产,买房了以后听装修,兴之所至时听旅行,分手后听亲密关系,...

原创小博客
今天
3
0
大数据教程(9.6)map端join实现

上一篇文章讲了mapreduce配合实现join,本节博主将讲述在map端的join实现; 一、需求 实现两个“表”的join操作,其中一个表数据量小,一个表很大,这种场景在实际中非常常见,比如“订单日志...

em_aaron
今天
3
0
cookie与session详解

session与cookie是什么? session与cookie属于一种会话控制技术.常用在身份识别,登录验证,数据传输等.举个例子,就像我们去超市买东西结账的时候,我们要拿出我们的会员卡才会获取优惠.这时...

士兵7
今天
3
0
十万个为什么之为什么大家都说dubbo

Dubbo是什么? 使用背景 dubbo为什么这么流行, 为什么大家都这么喜欢用dubbo; 通过了解分布式开发了解到, 为适应访问量暴增,业务拆分后, 子应用部署在多台服务器上,而多台服务器通过可以通过d...

尾生
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部