# wechat **Repository Path**: thomasbo/wechat ## Basic Information - **Project Name**: wechat - **Description**: 微信公众平台开发包 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2015-11-05 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README #WeChat ##Java微信公众平台类库 主要提供以下功能特性: * 提供友好的消息处理,消息回复api * 提供友好的请求发送api * 方便集成现有应用 ##微信消息处理流程 ![blob](http://git.oschina.net/uploads/images/2014/0317/104646_ebf33f89_60491.png) ###主要协作对象说明 * **WeChatMessageDispatcher** 封装微信的请求为WeChatMessage,转发至对应的WeChatMessageHandler; * **WeChatTimestampService** 用于校验,追踪微信请求的随机数与时间戳,防止一些潜在的攻击(如重放攻击);默认验证请求时间戳与服务器时间误差以及时间戳与随机数不能重复存在,如有必要(如集群环境下),可另实现; * **WeChatMessageVerifyService** 用于校验微信请求签名;默认为sha1+hex的实现,可另实现; * **WeChatMessageTracingService** 用于微信请求追踪;根据微信公众平台说明,如果在5s内不能返回响应,微信平台会做请求重试,为了避免造成一些意想不到的结果,必须要做消息去重(如果你能保证你所有的消息处理器都为无副作用,那可以忽略掉这个问题);可另实现; ###关于builtinMessageHandler与defaultMessageHandler * **builtinMessageHandler** WeChatMessageDispatcher的默认实现提供了一个内置的WeChatMessageHandler,用于处理接入微信公众平台后的验证请求,详情请见 [微信公众平台接入指南](http://mp.weixin.qq.com/wiki/index.php?title=%E6%8E%A5%E5%85%A5%E6%8C%87%E5%8D%97); * **defaultMessageHandler** 在WeChatMessageDispatcher的默认实现中,允许提供一个默认的WeChatMessageHandler,在用户定义的消息处理器以及内置的消息处理器不能处理该请求时,会尝试用该处理器处理消息,默认的实现为NOPMessageHandler(返回空字符串,告知请求已接收);在包自动扫描时,可以通过在消息处理器加上@DefaultMessageHandler的注解声明为默认的消息处理器,如有多个消息处理器存在该注解,会抛出异常; ###类型化消息处理器 由于微信消息类型比较多,为便于区分消息与实现,提供了以下的类型化消息处理器: * **TextMessageHandlerSupport** 文本消息处理器 * **ImageMessageHandlerSupport** 图片消息处理器 * **VoiceMessageHandlerSupport** 语音消息处理器 * **VideoMessageHandlerSupport** 视频消息处理器 * **LocationMessageHandlerSupport** 地理位置消息处理器 * **EventMessageHandlerSupport** 事件消息处理器 * **ScanEventMessageHandlerSupport** 扫描事件消息处理器 * **MenuEventMessageHandlerSupport** 菜单点击事件消息处理器(click类型) ###回复消息(被动响应) 鉴于大部分人估计写set,get习惯了,所以目前回复消息的API上是通过内部dsl的方式实现(是的,不用找了没有什么xxxBean);由于存在一些主观跟客观的原因,可能实现得有些不尽人意,凑合着用吧;如果实在是觉得看不下去,那。。。你自己看着办吧; * **回复文本消息** `WeChatMessageBuilder.replyText(message).content("hello world").build();` * **回复图片消息** `WeChatMessageBuilder.replyImage(message).mediaId(mediaId).build();` * **回复图文消息** `WeChatMessageBuilder.replyNews(message) .item().title("title1").descr("descr1").picUrl("picUrl1").url("url1") .item().title("title2").descr("descr2").picUrl("picUrl2").url("url2") .build();` * **......** 更多的信息可以参考WeChatMessageBuilder; ###发送API请求 同回复被动响应消息一样,发送API请求也是通过内部dsl实现,主要提供以下API请求: * 创建分组 ![blob](http://git.oschina.net/uploads/images/2014/0318/162655_5580cf38_60491.png) * 创建菜单 ![blob](http://git.oschina.net/uploads/images/2014/0318/162733_759b25b7_60491.png) * 获取用户信息 ![blob](http://git.oschina.net/uploads/images/2014/0318/162803_d6cae6c0_60491.png) * 发送客服消息 ![blob](http://git.oschina.net/uploads/images/2014/0318/162848_eeafff55_60491.png) ##快速入门 ###基于filter集成 ####web.xml配置 ![blob](http://git.oschina.net/uploads/images/2014/0317/112714_cead81f0_60491.png) ####消息处理器编写 * 处理用户发送的带有‘hello’的文本信息,返回‘hello world’的文本消息 ![blob](http://git.oschina.net/uploads/images/2014/0317/111200_541c6169_60491.png) * 处理用户发送的带有‘最近新闻’的文本信息,返回图文消息 ![blob](http://git.oschina.net/uploads/images/2014/0317/111406_aec67334_60491.png) * 设置该消息处理器为默认消息处理器,回显用户发送的文本消息 ![blob](http://git.oschina.net/uploads/images/2014/0317/111645_9eebd992_60491.png) * 处理用户关注事件,返回‘欢迎关注’的文本消息 ![blob](http://git.oschina.net/uploads/images/2014/0317/111753_9d487f41_60491.png) 更多的内容,请查看[wechat-showcase](http://git.oschina.net/coding4m/wechat/tree/master/wechat-showcase)