微信公众平台开发[3]-开发模式-响应消息

来源:互联网 发布:北京医院网络文案招聘 编辑:程序博客网 时间:2024/04/25 12:26

继续上篇文章。

微信服务器已将消息内容POST给我方服务器了,我们要响应其POST请求,并且按照对应的格式回复,即可发送请求。


响应消息格式:(以文本格式为实例,其他格式请参照 微信官方api)

<xml><ToUserName><![CDATA[toUser]]></ToUserName><FromUserName><![CDATA[fromUser]]></FromUserName><CreateTime>12345678</CreateTime><MsgType><![CDATA[text]]></MsgType><Content><![CDATA[你好]]></Content></xml>

响应消息代码:

if("POST".equals(request.getMethod())){//接收输入流 数据String weiXinXML = org.apache.commons.io.IOUtils.toString(request.getReader());System.out.println( weiXinXML );String ToUserName = weiXinXML.substring(weiXinXML.indexOf("<ToUserName>") + "<ToUserName>".length(), weiXinXML.indexOf("</ToUserName>"));String FromUserName = weiXinXML.substring(weiXinXML.indexOf("<FromUserName>") + "<FromUserName>".length(), weiXinXML.indexOf("</FromUserName>"));String reXML = "<xml>";reXML += "<ToUserName>" + FromUserName + "</ToUserName>";reXML += "<FromUserName>" + ToUserName + "</FromUserName>";reXML += "<CreateTime>"+new java.util.Date().getTime()+"</CreateTime>";reXML += "<MsgType><![CDATA[text]]></MsgType>";reXML += "<Content><![CDATA[你好]]></Content>";reXML += "<FuncFlag>0</FuncFlag>";reXML += "</xml>";response.setContentType("text/html;charset=UTF-8");response.getWriter().write(reXML);response.getWriter().flush();response.getWriter().close();}

回复消息需要注意以下几点:

1、文本内容不能过长2048字节,UTF-8一个中文汉字是3个字节,请自己尝试,不做深入说明。

2、响应时间不能超过5秒,就是说,当微信服务器端发来一个request请求时,我方服务器端必须在5秒内做出response响应。

3、响应时的ToUserName FromUserName不要搞反了。

4、有时因微信服务器问题会导致服务器响应了请求,却无法发送到用户方,这种情况在微信公众平台刚开放的时候时常会有,现在已经趋于稳定,遇到这种情况只能等等看(当然在确认自己代码没问题的情况下)。


我已经介绍了“接入、接收消息、响应消息”,以下是完整的一套代码。

<%@ page language="java" pageEncoding="utf-8"%><!--思路:如果是GET请求返回需要验证的参数(这里不讨论自己服务器SHA1加密验证)、如果是POST请求拼装返回数据--><%if("POST".equals(request.getMethod())){//接收输入流 数据String weiXinXML = org.apache.commons.io.IOUtils.toString(request.getReader());System.out.println( weiXinXML );String ToUserName = weiXinXML.substring(weiXinXML.indexOf("<ToUserName>") + "<ToUserName>".length(), weiXinXML.indexOf("</ToUserName>"));String FromUserName = weiXinXML.substring(weiXinXML.indexOf("<FromUserName>") + "<FromUserName>".length(), weiXinXML.indexOf("</FromUserName>"));String reXML = "<xml>";reXML += "<ToUserName>" + FromUserName + "</ToUserName>";reXML += "<FromUserName>" + ToUserName + "</FromUserName>";reXML += "<CreateTime>"+new java.util.Date().getTime()+"</CreateTime>";reXML += "<MsgType><![CDATA[text]]></MsgType>";reXML += "<Content><![CDATA[你好]]></Content>";reXML += "<FuncFlag>0</FuncFlag>";reXML += "</xml>";response.setContentType("text/html;charset=UTF-8");response.getWriter().write(reXML);response.getWriter().flush();response.getWriter().close();}else if("GET".equals(request.getMethod())){//验证链接response.setContentType("text/html;charset=UTF-8");response.getWriter().write(request.getParameter("echostr"));response.getWriter().flush();response.getWriter().close();}else{return;}%>






原创粉丝点击