java微信开发发送消息

来源:互联网 发布:linux 压缩文件夹 命令 编辑:程序博客网 时间:2024/05/15 15:44

WeinxinCtroller.java

package com.caiyl.zmd.weixin;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStream;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;@Controller@RequestMapping("/weixin")public class WeixinController extends HttpServlet {/** *  */private static final long serialVersionUID = 1L;@RequestMapping("")protected void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {request.setCharacterEncoding("UTF-8");response.setCharacterEncoding("UTF-8");/** 读取接收到的xml消息 */StringBuffer sb = new StringBuffer();InputStream is = request.getInputStream();InputStreamReader isr = new InputStreamReader(is, "UTF-8");BufferedReader br = new BufferedReader(isr);String s = "";while ((s = br.readLine()) != null) {sb.append(s);}String xml = sb.toString(); // 次即为接收到微信端发送过来的xml数据String result = "";/** 判断是否是微信接入激活验证,只有首次接入验证时才会收到echostr参数,此时需要把它直接返回 */String echostr = request.getParameter("echostr");if (echostr != null && echostr.length() > 1) {result = echostr;} else {// 正常的微信处理流程result = new WechatProcess().processWechatMag(xml);}try {OutputStream os = response.getOutputStream();os.write(result.getBytes("UTF-8"));os.flush();os.close();} catch (Exception e) {e.printStackTrace();}}}

处理方法:

/** *  */package com.caiyl.zmd.weixin;public class WechatProcess {/** * 解析处理xml *  * @param xml *            接收到的微信数据 * @return 最终的解析结果(xml格式数据) */public String processWechatMag(String xml) {System.out.println("*****************传入值*****************");System.out.println(xml);/** 解析xml数据 */ReceiveXmlEntity xmlEntity = new ReceiveXmlProcess().getMsgEntity(xml);/** 以文本消息为例,调用图灵机器人api接口,获取回复内容 */String result = "";if ("text".endsWith(xmlEntity.getMsgType())) {result = "服务器返回数据";}result = new FormatXmlProcess().formatXmlAnswer(xmlEntity.getFromUserName(), xmlEntity.getToUserName(), result);return result;}}

/** *  */package com.caiyl.zmd.weixin;import java.lang.reflect.Field;import java.lang.reflect.Method;import java.util.Iterator;import org.dom4j.Document;import org.dom4j.DocumentHelper;import org.dom4j.Element;public class ReceiveXmlProcess {/** * 解析微信xml消息 *  * @param strXml * @return */public ReceiveXmlEntity getMsgEntity(String strXml) {ReceiveXmlEntity msg = null;try {if (strXml.length() <= 0 || strXml == null)return null;// 将字符串转化为XML文档对象Document document = DocumentHelper.parseText(strXml);// 获得文档的根节点Element root = document.getRootElement();// 遍历根节点下所有子节点Iterator<?> iter = root.elementIterator();// 遍历所有结点msg = new ReceiveXmlEntity();// 利用反射机制,调用set方法// 获取该实体的元类型Class<?> c = Class.forName("com.caiyl.zmd.weixin.ReceiveXmlEntity");msg = (ReceiveXmlEntity) c.newInstance();// 创建这个实体的对象while (iter.hasNext()) {Element ele = (Element) iter.next();// 获取set方法中的参数字段(实体类的属性)Field field = c.getDeclaredField(ele.getName());// 获取set方法,field.getType())获取它的参数数据类型Method method = c.getDeclaredMethod("set" + ele.getName(),field.getType());// 调用set方法method.invoke(msg, ele.getText());}} catch (Exception e) {// TODO: handle exceptionSystem.out.println("xml 格式异常: " + strXml);e.printStackTrace();}return msg;}}

/** *  */package com.caiyl.zmd.weixin;public class ReceiveXmlEntity {private String ToUserName="";      private String FromUserName="";      private String CreateTime="";      private String MsgType="";      private String MsgId="";      private String Event="";      private String EventKey="";      private String Ticket="";      private String Latitude="";      private String Longitude="";      private String Precision="";      private String PicUrl="";      private String MediaId="";      private String Title="";      private String Description="";      private String Url="";      private String Location_X="";      private String Location_Y="";      private String Scale="";      private String Label="";      private String Content="";      private String Format="";      private String Recognition="";    public String getToUserName() {return ToUserName;}public void setToUserName(String toUserName) {ToUserName = toUserName;}public String getFromUserName() {return FromUserName;}public void setFromUserName(String fromUserName) {FromUserName = fromUserName;}public String getCreateTime() {return CreateTime;}public void setCreateTime(String createTime) {CreateTime = createTime;}public String getMsgType() {return MsgType;}public void setMsgType(String msgType) {MsgType = msgType;}public String getMsgId() {return MsgId;}public void setMsgId(String msgId) {MsgId = msgId;}public String getEvent() {return Event;}public void setEvent(String event) {Event = event;}public String getEventKey() {return EventKey;}public void setEventKey(String eventKey) {EventKey = eventKey;}public String getTicket() {return Ticket;}public void setTicket(String ticket) {Ticket = ticket;}public String getLatitude() {return Latitude;}public void setLatitude(String latitude) {Latitude = latitude;}public String getLongitude() {return Longitude;}public void setLongitude(String longitude) {Longitude = longitude;}public String getPrecision() {return Precision;}public void setPrecision(String precision) {Precision = precision;}public String getPicUrl() {return PicUrl;}public void setPicUrl(String picUrl) {PicUrl = picUrl;}public String getMediaId() {return MediaId;}public void setMediaId(String mediaId) {MediaId = mediaId;}public String getTitle() {return Title;}public void setTitle(String title) {Title = title;}public String getDescription() {return Description;}public void setDescription(String description) {Description = description;}public String getUrl() {return Url;}public void setUrl(String url) {Url = url;}public String getLocation_X() {return Location_X;}public void setLocation_X(String location_X) {Location_X = location_X;}public String getLocation_Y() {return Location_Y;}public void setLocation_Y(String location_Y) {Location_Y = location_Y;}public String getScale() {return Scale;}public void setScale(String scale) {Scale = scale;}public String getLabel() {return Label;}public void setLabel(String label) {Label = label;}public String getContent() {return Content;}public void setContent(String content) {Content = content;}public String getFormat() {return Format;}public void setFormat(String format) {Format = format;}public String getRecognition() {return Recognition;}public void setRecognition(String recognition) {Recognition = recognition;}  }


/** *  */package com.caiyl.zmd.weixin;import java.util.Date;public class FormatXmlProcess {/** * 封装文字类的返回消息 *  * @param to * @param from * @param content * @return */public String formatXmlAnswer(String to, String from, String content) {StringBuffer sb = new StringBuffer();Date date = new Date();sb.append("<xml><ToUserName><![CDATA[");sb.append(to);sb.append("]]></ToUserName><FromUserName><![CDATA[");sb.append(from);sb.append("]]></FromUserName><CreateTime>");sb.append(date.getTime());sb.append("</CreateTime><MsgType><![CDATA[text]]></MsgType><Content><![CDATA[");sb.append(content);sb.append("]]></Content><FuncFlag>0</FuncFlag></xml>");System.out.println("*****************返回值*****************");System.out.println(sb.toString());return sb.toString();}}



0 0
原创粉丝点击