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

继续上篇文章。

微信服务器已将消息内容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;
	}
%>






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值