微信开发之消息接收--图片消息(六)

前言:

  由于在上篇文章中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>

测试结果如下图:

原文地址:https://www.cnblogs.com/codejackanapes/p/5470950.html