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

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

2013-08-16 13:56 281 查看
继续上篇文章。

微信服务器已将消息内容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;
}
%>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐