zoukankan      html  css  js  c++  java
  • 微信开发之消息接收--图片消息(六)

    前言:

      由于在上篇文章中Servelt的Post方法中处理太多的逻辑,会让代码很难看,所以我们在这里进行补充,修改Servlet中的Post方法。

    /**
    	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
    	 */
    	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		
    		
    		request.setCharacterEncoding("UTF-8");
    		response.setCharacterEncoding("UTF-8");
    		
    		String xmlString=WeixinService.doService(request);
    		
    		PrintWriter out=response.getWriter();
    		out.print(xmlString);
    		out.close();
    		
    	}
    

      创建WeixinService.java  代码如下:

    package com.weixin.Service;
    import java.io.IOException;
    import java.io.PrintWriter;
    import java.util.Date;
    import java.util.Map;
    
    import javax.servlet.http.HttpServletRequest;
    import com.weixin.message.TextMessage;
    import com.weixin.util.MessageUtil;
    
    /**
     * 消息处理类
     * 
     * @author Code猿猿
     * 
     */
    public class WeixinService {
    
    	public static String doService(HttpServletRequest request) {
    
    		Map<String, String> message = MessageUtil.parseXml(request);
    
    		String messageType = message.get("MsgType");
    
    		// 要返回的xml信息
    		String xml = "";
    
    		//文本消息
    		if (messageType.equals(MessageUtil.REQ_MESSAGE_TYPE_TEXT)) {
    			// 接收的是文本消息
    
    			// 打印接收所有参数
    			System.out.println("ToUserName:" + message.get("ToUserName"));
    			System.out.println("FromUserName:" + message.get("FromUserName"));
    			System.out.println("CreateTime:" + message.get("CreateTime"));
    			System.out.println("MsgType:" + message.get("MsgType"));
    			System.out.println("Content:" + message.get("Content"));
    			System.out.println("MsgId:" + message.get("MsgId"));
    
    			String req_content = message.get("Content");
    
    			String res_content = "";
    
    			// 组装回复消息
    			// 我们做个小实验
    			// 接收内容:你好 回复:你好
    			// 接收内容:大家好 回复:大家好
    			// 接收内容:同志们好 回复:为人民服务
    			if ("你好".equals(req_content)) {
    				res_content = "你好";
    			} else if ("大家好".equals(req_content)) {
    				res_content = "大家好";
    			} else if ("同志们好".equals(req_content)) {
    				res_content = "为人民服务";
    			} else {
    				// 否则原样输出输入内容
    				res_content = req_content;
    			}
    
    			TextMessage textMessage = new TextMessage();
    			textMessage.setToUserName(message.get("FromUserName"));
    			textMessage.setFromUserName(message.get("ToUserName"));
    			textMessage.setCreateTime(new Date().getTime());
    			textMessage.setContent(res_content);
    			textMessage.setMsgType(messageType);
    			xml = MessageUtil.textMessageToXml(textMessage);
    		}
    
    		return xml;
    
    	}
    
    }
    

      

    一、消息格式

    <xml>
     <ToUserName><![CDATA[toUser]]></ToUserName>
     <FromUserName><![CDATA[fromUser]]></FromUserName>
     <CreateTime>1348831860</CreateTime>
     <MsgType><![CDATA[image]]></MsgType>
     <PicUrl><![CDATA[this is a url]]></PicUrl>
     <MediaId><![CDATA[media_id]]></MediaId>
     <MsgId>1234567890123456</MsgId>
     </xml>
    

      

    参数描述
    ToUserName 开发者微信号
    FromUserName 发送方帐号(一个OpenID)
    CreateTime 消息创建时间 (整型)
    MsgType image
    PicUrl 图片链接(由系统生成)
    MediaId 图片消息媒体id,可以调用多媒体文件下载接口拉取数据。
    MsgId 消息id,64位整型

    二、添加图片消息的实体类  PicMessage.java   代码如下:

    package com.weixin.message;
    
    public class PicMessage extends BaseMessage {
    
    	public String PicUrl ;
    	public long MediaId ;
    	public long MsgId;
    	public String getPicUrl() {
    		return PicUrl;
    	}
    	public void setPicUrl(String picUrl) {
    		PicUrl = picUrl;
    	}
    	public long getMediaId() {
    		return MediaId;
    	}
    	public void setMediaId(long mediaId) {
    		MediaId = mediaId;
    	}
    	public long getMsgId() {
    		return MsgId;
    	}
    	public void setMsgId(long msgId) {
    		MsgId = msgId;
    	}
    	 
    }
    

      

    三、接收图片消息,返回"图片消息"   在WeixinService.java中添加 image消息的判断 ,代码如下:

    //图片消息
    		if (messageType.equals(MessageUtil.REQ_MESSAGE_TYPE_IMAGE)) {
    		
    			// 打印接收所有参数
    			System.out.println("ToUserName:" + message.get("ToUserName"));
    			System.out.println("FromUserName:" + message.get("FromUserName"));
    			System.out.println("CreateTime:" + message.get("CreateTime"));
    			System.out.println("MsgType:" + message.get("MsgType"));
    			System.out.println("PicUrl:" + message.get("PicUrl"));
    			System.out.println("MediaId:" + message.get("MediaId"));
    			System.out.println("MsgId:" + message.get("MsgId"));
    			
    			TextMessage textMessage = new TextMessage();
    			textMessage.setToUserName(message.get("FromUserName"));
    			textMessage.setFromUserName(message.get("ToUserName"));
    			textMessage.setCreateTime(new Date().getTime());
    			textMessage.setContent("这是图片消息");
    			textMessage.setMsgType("text"); //文本消息
    			xml = MessageUtil.textMessageToXml(textMessage);
    			System.out.println("xml:"+xml);
    			
    		}
    

      公众号接收到的参数和提交的xml如下:

    ToUserName:gh_525b860fccf8
    FromUserName:oXWYmsyz4fv17mCihzDFzk_ecLFU
    CreateTime:1462702256
    MsgType:image
    PicUrl:http://mmbiz.qpic.cn/mmbiz/ShBfPMFvXqibLR34lgoWRojdyTtzMR5LbdL8FuntiaEiawZFSdjJHuibm5RlLpS3nBOq9IblZr8ia19h2UgnlIrn1SQ/0
    MediaId:tgC85iSOqZN8kG7hxnHzxRPvWlkIHk8fTTfge-CqrwtuyNKEBJ_uKWaE4f4IrqRo
    MsgId:6282258353751424316
    
    回复xml信息:
    
    <xml>
      <ToUserName><![CDATA[oXWYmsyz4fv17mCihzDFzk_ecLFU]]></ToUserName>
      <FromUserName><![CDATA[gh_525b860fccf8]]></FromUserName>
      <CreateTime>1462702260068</CreateTime>
      <MsgType><![CDATA[text]]></MsgType>
      <Content><![CDATA[这是图片消息]]></Content>
      <MsgId>0</MsgId>
    </xml>
    

    测试结果如下图:

  • 相关阅读:
    Ruby单例方法和实例方法
    Silverlight本地化和全球化
    多线程 or 多进程 (转强力推荐)
    循环pthread_create导致虚拟内存上涨
    int在linux上的保存情况
    查看数据流的流程
    查看linux系统版本,内核,CPU,MEM,位数的相关命令(转)
    0/1背包问题
    linux下计算程序运行时间
    夸平台夸字符编码问题
  • 原文地址:https://www.cnblogs.com/codejackanapes/p/5470950.html
Copyright © 2011-2022 走看看