您的位置:首页 > 移动开发 > 微信开发

JAVA实现微信公众账号自定义消息回复

2013-06-25 23:38 861 查看
最近有没有在玩微信公众账号?很多公众账号有自动回复功能,比如爱范儿的appsolution发送Android或者IOS,它就会想你推荐好玩的app.

微信对公众账号提供了api接口来自定义回复介绍到的消息,并且提供了PHP的demo.这里我使用JAVA来实现接口的调用。


能够实现本demo中描述的功能,你需要满足的下面的条件:

有一个微信公众账号

有能够运行在公网上的服务器(推荐使用新浪的SAE)

了解最基本的JAVA EE编程(会编写servlet)


(一)注册微信公众账号

微信公众账号注册地址:http://mp.weixin.qq.com

公众账号需要与你的QQ号进行绑定。并且该QQ没有与其它的微信号绑定过(当然你可以先解除与其它微信的绑定)


(二)设置公众平台接口信息

注册成功后,进入微信公众账号管理界面,点击设置->自定义回复->前往设置。填写相关信息,其中需要注意的是URL和Token. 如果你随便填写URL的话,会提示下面的信息:你的服务器没有正确响应Token验证,请阅读消息接口使用指南。如图所示:



这也是为什么要求“有能够运行在公网上的服务器”。本文以新浪的SAE作为服务器环境(好消息,SAE已经开放JAVA应用,不需要满世界找邀请码了),在SAE上创建一个JAVA应用,并上传已经写好的JAVA WEB应用war包,该应用中只有一个Servlet.

其中doGet方法如图所示



这里只是简单的把接收到的echostr字符串原样的返回回去了。这样写是为了能够先通过微信服务器的验证。在SAE上部署好应用后,在回到微信公众账号设置界面,URL添加该servlet的访问地址,token随便填写一个字符串,点击提交。

出现“提交成功”提示,说明接口配置成功了。如图所示




(三)实现自定义消息回复

微信服务器会在公众账号收到用户消息的时候,把消息通过post方法发送到你的服务器,也就是servlet的doPost方法,如图所示:



doPost方法中主要实现3个功能:1、从输入流中获取到消息xml。2、通过业务逻辑得到回复的消息xml(具体逻辑后面会讲解)。3、把回复xml写给服务器服务器。


(四)消息xml的格式

消息分为文本消息、图文消息、位置消息。

文本消息xml格式

<xml>

 <ToUserName><![CDATA[toUser]]></ToUserName>

 <FromUserName><![CDATA[fromUser]]></FromUserName>

 <CreateTime>1348831860</CreateTime>

 <MsgType><![CDATA[text]]></MsgType>

 <Content><![CDATA[this is a test]]></Content>

 </xml>

 ToUserName 消息接收方微信号,一般为公众平台账号微信号

 FromUserName 消息发送方微信号

 CreateTime 消息创建时间

 MsgType 文本消息为text

 Content 消息内容



地理位置消息xml格式

 <xml>

 <ToUserName><![CDATA[toUser]]></ToUserName>

 <FromUserName><![CDATA[fromUser]]></FromUserName>

 <CreateTime>1351776360</CreateTime>

 <MsgType><![CDATA[location]]></MsgType>

 <Location_X>23.134521</Location_X>

 <Location_Y>113.358803</Location_Y>

 <Scale>20</Scale>

 <Label><![CDATA[位置信息]]></Label>

 </xml>

 ToUserName 消息接收方微信号,一般为公众平台账号微信号

 FromUserName 消息发送方微信号

 CreateTime 消息创建时间

 MsgType 消息类型,地理位置为location

 Location_X 地理位置纬度

 Location_Y 地理位置经度

 Scale 地图缩放大小

 Label 地理位置信息



图片消息结构

 <xml>

 <ToUserName><![CDATA[toUser]]></ToUserName>

 <FromUserName><![CDATA[fromUser]]></FromUserName>

 <CreateTime>1348831860</CreateTime>

 <MsgType><![CDATA[image]]></MsgType>

 <PicUrl><![CDATA[this is a url]></PicUrl>

 </xml>

 ToUserName 消息接收方微信号,一般为公众平台账号微信号

 FromUserName 消息发送方微信号

 CreateTime 消息创建时间

 MsgType 消息类型image

 PicUrl 图片链接,开发者可以用HTTP GET获取


 

 


(五) 回复消息xml的格式

对于每一个POST请求,开发者在响应包中返回特定xml结构,对该消息进行相应操作(现支持回复文本消息 、 回复图文消息和星标操作)。xml结构如下:


回复文本消息格式

 <xml>

 <ToUserName><![CDATA[toUser]]></ToUserName>

 <FromUserName><![CDATA[fromUser]]></FromUserName>

 <CreateTime>12345678</CreateTime>

 <MsgType><![CDATA[text]]></MsgType>

 <Content><![CDATA[content]]></Content>

 <FuncFlag>0</FuncFlag>

 </xml>

 FromUserName 消息发送方

 ToUserName 消息接收方

 CreateTime 消息创建时间

 MsgType 消息类型,文本消息必须填写text

 Content 消息内容,大小限制在2048字节,字段为空为不合法请求



回复图文消息格式

 <xml>

 <ToUserName><![CDATA[toUser]]></ToUserName>

 <FromUserName><![CDATA[fromUser]]></FromUserName>

 <CreateTime>12345678</CreateTime>

 <MsgType><![CDATA[news]]></MsgType>

 <Content><![CDATA[]]></Content>

 <ArticleCount>2</ArticleCount>

 <Articles>

 <item>

 <Title><![CDATA[title1]]></Title>

 <Description><![CDATA[description1]]></Description>

 <PicUrl><![CDATA[picurl]]></PicUrl>

 <Url><![CDATA]></Url>

 </item>

 <item>

 <Title><![CDATA[title]]></Title>

 <Description><![CDATA[description]]></Description>

 <PicUrl><![CDATA[picurl]]></PicUrl>

 <Url><![CDATA[url]]></Url>

 </item>

 </Articles>

 <FuncFlag>1</FuncFlag>

 </xml>[/code]
 FromUserName 消息发送方

 ToUserName 消息接收方

 CreateTime 消息创建时间

 MsgType 消息类型,图文消息必须填写news

 Content 消息内容,图文消息可填空

 ArticleCount 图文消息个数,限制为10条以内

 Articles 多条图文消息信息,默认第一个item为大图

 Title 图文消息标题

 Description 图文消息描述

 PicUrl 图片链接,支持JPG、PNG格式,较好的效果为大图640*320,小图80*80,限制图片链接的域名需要与开发者填写的基本资料中的Url一致

 Url 点击图文消息跳转链接



星标消息

在xml结构中,有一个FuncFlag字段,开发者可以通过填写FuncFlag字段为1来对消息进行星标,你可以在实时消息的[url=http://mp.weixin.qq.com/cgi-bin/getmessage?t=wxm-message&lang=zh_CN&count=50&star=1]星标消息分类
中找到该消息


(六)自定义消息回复

在doPost方法中的第二步,我们要处理请求的xml得到回复的xml,具体的逻辑是: 1. 解析xml。 2. 保存消息到数据库(便于分析数据,你也可以不保存)。 3. 处理消息。如图所示:



解析xml,把解析到的数据保存到HashMap中



保存数据到数据库,如果你不想保存到数据库,这一步可以省略

处理消息,不同类型的消息可以通过MsgType来识别



处理文本消息,这里演示回应一个文本消息,实际的处理是你的具体业务决定的



生成xml文件



结束语:解析与生成xml使用的是dom4j,如果你也使用它,需要添加相关jar包。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  JAVA XML 微信