3.1消息接口的实现方案 目前常用的实现方案有基于PHP、J2EE、 .NET和其他的网络编程的技术,常用的WEB 服务器有 apache,tomcat,nginx,iis 等。微 信官方提供了基于PHP的接口实现方案,熟练 的程序员可以实现基于其它网络编程技术的消 息接口代码。基于JAVA的消息接口实现如图 3所示,是结合昆明理工大学微信平台的一种 实现,主要需要实现的方法包括用于接收消息 参数的doGet()和doPost()方法,用于验证接 口合法性的valid()方法,实现消息接收、处理 和响应的 responseMsg()和 replyMessage()方 法,以及保证消息传输安全的checkSignature() 和SHA1Encode()等身份验证和加解密方法。 图3基于JAVA的消息接口实现 3.2消息推送的格式和消息解析的实现方法 3.2.1消息推送的格式消息推送是指微信用户向公众账号发送消 息。微信服务器将POST该消息到第三方服务 器配置的URL上。通常来说微信用户可以推送 文本、图片、地理位置、链接和事件5种消息 格式,推送XML结构的消息格式请参看文献[7]。 3.2.2 消息解析实现方法当第三方消息接口服务器收到用户推送的 信息后,就需要将消息进行解析。以文本消息 和JAVA实现的解析方法为例,其实现关键代码如下: Element root = document.getRoot Ele- ment(); //获取XML文档根节点String fromUsername = root.elementText (TromUserName”); // 获取发送方String toUsername = root.elementText ('ToUserName”); //获取接收方String msgType = root, ele me nt Text Trim ("MsgType”); //获取消息类型String content = root. element Text Trim ("Content”); //获取消息内容主要是解析开发者微信号,微信用户发送 账号,信息类型和信息内容等关键信息。 3.3消息回复的格式和消息封装方法 3.3.1消息回复的格式消息回复是指第三方消息接口自动给微信 用户回复消息。对于每一个POST请求,开发 者在响应包中返回特定XML结构,对该用户 的消息进行响应,目前支持文本、音乐和图文 三种消息结构,回复XML结构的详细消息格 式和含义请参看文献[7]。 <XML>//XML结构的回复消息封装方式示例, 字段含义<ToUserName><! [CDATA [toUser]]> < /ToUserName> <FromUserName><! [CDATA [fromUser]] > </FromUserName> <Cre ateTime>12345678</Cre ateTime> <MsgType>< ! [CDATA [news ]]></Msg Type> < Article Count>2</Article Count> <Articles> <item> <Title><! [CDATA[title 1]]></Title> <Description><![CDATA[description1]] 93 ></Description> <PicUrl><! [CDATA[picurl] ]></PicUrl> <Url><! [CDATA[url] ]></Url> </item> <item> ...//当回复消息数>1条时,以<item> ...</item>形式封装消息 </item> </Articles> <FuncFlag>1</FuncFlag> </XML> 3.3.2消息的封装 当微信第三方服务器对用户的消息进行智 能处理后,就需要将回复内容根据回复类型进 行对应格式的封装,以图文消息和JAVA实现 为例,其封装的关键代码如下: String responseStr = "<XML>"; // 封装 XML结构的回复消息的JAVA核心代码 //字段含义请参看文献[7] respons e Str+= "<ToUs erName><! [CDATA ["+ fromUsername+ '] ]></ToUserName>"; responseStr+="<FromUserName><! [CD- ATA[ "+toUsername+'] ]></FromUser- Name>";responseStr+="<CreateTime>" + System. currentTimeMillis()+ "</CreateTime>"; responseStr+="< MsgType>< ! [CDATA [news]]></MsgType>";responseStr+="<Content>< ! [CDATA[]] ></Content>";re spons e Str+="<Article Count> 1 </Arti- cleCount>";responseStr+="<Articles>"; responseStr+="<item>"; responseStr+="<TMe><![CDATA[图书馆 自修座位信息实时统计]]></Title>";responseStr += "<Discription><![CDATA[" +contentStr+ '] ]></Discription>";responseStr+="<PicUrl><! [CDATA [http: //222.197.202.36/images/seat.jpg]]></PicUrl>"; responseStr+="<Url><! [CDATA [http :// 222.197.202.36/NoAuthAction.do] ]></Url>"; responseStr+= "</item>"; res pons eStr+= "</Articles>"; re spons e Str+=<FuncFlag> 1 </FuncFlag>; responseStr+= "</XML>"; |