在成为开发者之后,我们便可以用微信提供的接口实现简单的数据通信了。
要解决的问题有两步:
1.获取微信服务器推送过来的用户信息
2.处理信息并将反馈信息推送到微信服务器
第一步中,微信推送过来的信息是发送过来的post请求,请求地址就是第二步中的地址,只不过方式是post,内容为一个包含用户发送的信息的xml。我们要做的就是获取这个xml,读取出其中每个元素值,代码如下
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setCharacterEncoding("UTF-8"); XmlParser xml = new XmlParser(request.getInputStream());//获取xml输入流并解析 //以下变量的定义根据微信公众平台开发文档中给出的属性进行定义,这个五个属性是每种信息类型都有的基本属性 String ToUserName = xml.getValueByName("ToUserName"); String FromUserName = xml.getValueByName("FromUserName"); String CreateTime = xml.getValueByName("CreateTime"); String MsgType= xml.getValueByName("MsgType"); String MsgId = xml.getValueByName("MsgId"); if(MsgType.equals("text"))//判断获取的信息是文本信息后进行回复,回复格式也是根据微信公众平台开发文档给出的定义 { String Content = xml.getValueByName("Content"); String txtMsg = "<xml>" +"<ToUserName><![CDATA["+FromUserName+"]]></ToUserName>" +"<FromUserName><![CDATA["+ToUserName+"]]></FromUserName> " +"<CreateTime>"+12345678+"</CreateTime>" +"<MsgType><![CDATA[text]]></MsgType>" +"<Content><![CDATA[這是一條文本信息"+Content+"]]></Content>" +"</xml>"; response.getWriter().print(txtMsg); } else if(MsgType.equals("image"))//判断并回复图像信息 { String PicUrl = xml.getValueByName("PicUrl"); String MediaId = xml.getValueByName("MediaId"); String txtMsg = "<xml>" +"<ToUserName><![CDATA["+FromUserName+"]]></ToUserName>" +"<FromUserName><![CDATA["+ToUserName+"]]></FromUserName> " +"<CreateTime>"+12345678+"</CreateTime>" +"<MsgType><![CDATA[text]]></MsgType>" +"<Content><![CDATA[這是一條圖片信息 url="+PicUrl+" mediaId="+MediaId+" "+"]]></Content>" +"</xml>"; response.getWriter().print(txtMsg); } }
以上两步只给出了处理文本信息和图像信息的方法,还有voice,location,video等格式,处理方式基本相同,请自己实践。
其中<![CDATA[内容]]>是xml标记,表示将内容部分进行原样输出,类似于html中的<pre> 标签,里面的内容保持原样。
import java.io.InputStream; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Document; public class XmlParser { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = null; Document doc = null; public XmlParser(InputStream input) { try { builder = factory.newDocumentBuilder(); doc = builder.parse(input); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } public String getValueByName(String name) { return doc.getElementsByTagName(name).item(0).getFirstChild().getNodeValue(); } }
将程序部署后便可以测试了,发送信息给该公共号,便会返回相应的信息。
新手入门,请多关照!