微信公众平台深度开发JAVA版第一季 14.响应被动消息2

094402_hq29_3206447.png

094336_1ALK_3206447.png

好的程序是重构出来的.要recode7次.

package net.wxinterface;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.security.MessageDigest;
import java.util.Arrays;
import java.util.Date;
import java.util.Map;

import javax.servlet.ServletException;
import javax.servlet.ServletInputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.dom4j.DocumentException;

import wx.in.In_Image;
import wx.in.In_Text;
import wx.in.In_Util;
import wx.out.Out_Text;

import com.imooc.po.TextMessage;
import com.imooc.util.MessageUtil;
public class WX_Interface extends HttpServlet {

	/**
	 * Constructor of the object.
	 */
	public WX_Interface() {
		super();
	}

	/**
	 * Destruction of the servlet. <br>
	 */
	public void destroy() {
		super.destroy(); // Just puts "destroy" string in log
		// Put your code here
	}

	/**
	 * The doGet method of the servlet. <br>
	 *
	 * This method is called when a form has its tag value method equals to get.
	 * 
	 * @param request the request send by the client to the server
	 * @param response the response send by the server to the client
	 * @throws ServletException if an error occurred
	 * @throws IOException if an error occurred
	 */
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		//΢�ż���ǩ��,signature����˿�������д��tocken����������е�timestamp����nonce����
		String signature = request.getParameter("signature");
		//ʱ���
		String timestamp = request.getParameter("timestamp");
		//����� 
		String nonce = request.getParameter("nonce");
		
		String echostr = request.getParameter("echostr");
		
		String tocken = "test";
		try{
			if(null != signature){
			String[] ArrTmp = {tocken,timestamp,nonce};	
			Arrays.sort(ArrTmp);
			StringBuffer sb = new StringBuffer();
			for(int i=0;i<ArrTmp.length;i++){
				sb.append(ArrTmp[i]);
			}
			MessageDigest md = MessageDigest.getInstance("SHA-1");
			byte[] bytes = md.digest(new String(sb).getBytes());
			StringBuffer buf = new StringBuffer();
			for(int i=0;i<bytes.length;i++){
				if(((int)bytes[i] & 0xff)<0x10){
					buf.append("0");
				}
				buf.append(Long.toString((int) bytes[i] & 0xff,16));
				
			}
			if(signature.equals(buf.toString())){
				response.getOutputStream().println(echostr);
			}
		}
	}catch(Exception e){
			e.printStackTrace();
		}
		
		System.out.println("test0");

		
		System.out.println("doGet");
		System.out.println("signature     "+signature);
		System.out.println("timstamp      "+timestamp);
		System.out.println("nonce         "+nonce);
		System.out.println("echostr         "+echostr);
		
		
		System.out.println("doGet");
	
	}

	/**
	 * The doPost method of the servlet. <br>
	 *
	 * This method is called when a form has its tag value method equals to post.
	 * 
	 * @param request the request send by the client to the server
	 * @param response the response send by the server to the client
	 * @throws ServletException if an error occurred
	 * @throws IOException if an error occurred
	 */
	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		/*request.setCharacterEncoding("UTF-8");
		response.setCharacterEncoding("UTF-8");
PrintWriter out = response.getWriter();
try {
	Map<String,String> map = MessageUtil.xmlToMap(request);
	String fromUserName = map.get("FromUserName");
			String toUserName = map.get("ToUserName");
					String msgType = map.get("MsgType");
					String content = map.get("Content");//
					String message = null;
					
					//if("text".equals(msgType)){
					if(MessageUtil.MESSAGE_TEXT.equals(msgType)){
					if("1".equals(content)){
						message = MessageUtil.initText(toUserName,fromUserName,MessageUtil.firstMenu());				
					}else if("3".equals(content)){
						//message = MessageUtil.initText(toUserName,fromUserName,content);				
					//�Ϳ��������ﰴ3����ͼƬ��Ϣ,���ͼƬ��Ϣ�Ĵ����Լ��ظ��Ѿ�д����
						message = MessageUtil.initImageMessage(toUserName,fromUserName);
					}else if("4".equals(content)){//��servlet����һ���ж�,������4��ʱ��ظ�һ�����ָ���  
						message = MessageUtil.initMusicMessage(toUserName,fromUserName);
					}else if("2".equals(content)){
						//message = MessageUtil.initText(toUserName,fromUserName,MessageUtil.secondMenu());			
                        //�����ͼ����Ϣ�Ĵ����Լ��ظ��Ѿ�д���� 
						message= MessageUtil.initNewsMessage(toUserName,fromUserName);
					}else if("?".equals(content)||" ? ".equals(content)){
						message = MessageUtil.initText(toUserName,fromUserName,MessageUtil.menuText());
					}
						TextMessage text = new TextMessage();
					text.setFromUserName(toUserName);//˭������,��ͷ���˭
					text.setToUserName(fromUserName);
					text.setMsgType("text");
					text.setCreateTime(new Date().getTime());
					text.setContent("���͵���Ϣ��:"+content);
					 message = MessageUtil.textMessageToXml(text);
					
					System.out.println(message);
					}else if(MessageUtil.MESSAGE_EVENT.equals(msgType)){//�����Ϣ���͵��߼�
						String eventType = map.get("Event");
						if(MessageUtil.MESSAGE_SUBSCRIBE.equals(eventType)){//��Ϣ�����¼�������
							message = MessageUtil.initText(toUserName, fromUserName, content);//��ע΢�Ź��ں�֮��΢�ź�̨����
						}//�������Servlet�������һ���߼����ж�
						else if(MessageUtil.MESSAGE_CLICK.equals(eventType)){//�����������Click�˵���һ���¼�����
							//Click���͵���Ϣ����,���Event��Click���͵Ļ�,��ô����ظ�һ�����˵�
							message = MessageUtil.initText(toUserName, fromUserName, MessageUtil.menuText());
						}else if(MessageUtil.MESSAGE_VIEW.equals(eventType)){//�����View���Ͳ˵�,�ͻظ�һ�������õ�Url
							String url  = map.get("EventKey");//�����View���Ͳ˵��Ļ�,���EventKey�������Url��ֵ
							if("11".equals(url)){//���Keyֵ��11
							message = MessageUtil.initText(toUserName, fromUserName, url);
							}
						}else if(MessageUtil.MESSAGE_SCANCODE.equals(eventType)){//�ظ�һ�����ɨ���¼�
							String key  = map.get("EventKey");//�����Click���Ͳ˵��Ļ�,EventKey���������õ�Keyֵ
							message = MessageUtil.initText(toUserName, fromUserName, key);
						}
						
					}
					out .print(message);
} catch (DocumentException e) {
	// TODO Auto-generated catch block
	e.printStackTrace();
}finally{
	out.close();
}

System.out.println("doPost");*/
		//response.setContentType("text/html");
		//PrintWriter out = response.getWriter();
		
/*		StringBuffer strb = new StringBuffer();
		ServletInputStream in = request.getInputStream();
          BufferedReader     breader=       new BufferedReader( new InputStreamReader(in,"UTF-8"));
		
          String str = null;
          while(null!=(str=breader.readLine())){
        	  strb.append(str);
          }
          //out.println(str);
          System.out.println(strb);*/
        //out.flush();
		//out.close();
/*response.setContentType("text/html");
PrintWriter out = response.getWriter();

StringBuffer strb = new StringBuffer();
//strb要存储一下request获取过来的东西
ServletInputStream in =  request.getInputStream();

BufferedReader breader =  new BufferedReader( new InputStreamReader(in,"UTF-8"));//接收是对的,已经进行转码了.
String str = null;
//+-*\/\是运算符,赋值运算符=也是运算符
	/*
while(null!=(str = breader.readLine())){
	 strb.append(str);
}
out.println(strb);
System.out.println(strb);
out.flush();
out.close();*/
		response.setContentType("text/html;charset=utf-8");
		String requestStr = In_Util.getStringFromRequest(request);
		System.out.println(requestStr);
		System.out.println("北风网");
		In_Text in_Text = new In_Text(requestStr);
		System.out.println(in_Text);
		in_Text.setContent(in_Text.getContent()+ "  吃屎啦");
	 /*    In_Image in_Image = new In_Image(requestStr);
         System.out.println(in_Image);*/
		//Out_Text out_Text = new Out_Text(in_Text);
		//Out_Text out_Text = new Out_Text(in_Text,in_Text.getContent()+ "  吃屎啦");
		Out_Text out_Text = new Out_Text(in_Text);
		out_Text.setContent(in_Text.getContent());
		//System.out.println(out_Text.getStr("这是北风网。。。。。。。"));
		//response.getOutputStream().print(out_Text.getStr(in_Text.getContent()+ "  吃屎啦"));
		//response.getWriter().print(out_Text.getStr(in_Text.getContent()+ "  吃屎啦"));
		response.getWriter().print(out_Text.getStr());
		//new BufferedWriter(new OutputStreamWriter(response.getOutputStream(),"UTF-8")).write(out_Text.getStr(in_Text.getContent()+ "  chishila"));
		//response.getOutputStream().print(out_Text.getStr("这是北风网。。。。。。。"));
		//System.out.println(out_Text.getStr(in_Text.getContent()+ "  吃屎啦"));
		System.out.println(out_Text.getStr());
	}

	/**
	 * Initialization of the servlet. <br>
	 *
	 * @throws ServletException if an error occurs
	 */
	public void init() throws ServletException {
		// Put your code here
	}

}
package wx.out;

import java.util.Date;

import wx.in.In;

public class Out_Image {
	private String ToUserName = null;//	是	接收方帐号(收到的OpenID)
	private String FromUserName = null;//	是	开发者微信号
	private String CreateTime =null;//	是	消息创建时间 (整型)
	private String MsgType  =null;//	是	image
	private String MediaId  =null;//	是	通过素材管理中的接口上传多媒体文件,得到的id。
	StringBuffer strb = new StringBuffer();
	StringBuffer strb_ = new StringBuffer();
	
	public Out_Image(In in) {
		super();
		Date date = new Date();

		strb.append("             <ToUserName><![CDATA["+in.getFromUserName()+"]]></ToUserName>                   ");
		strb.append("         <FromUserName><![CDATA["+in.getToUserName()+"]]></FromUserName>                       ");
		strb.append("         <CreateTime>"+date.getTime()+"</CreateTime>                       ");
		strb.append("          <MsgType><![CDATA[Image]]></MsgType>   ");
	}
	public String getStr(String str){

		strb_.append("           <xml>                     ");    
		strb_.append(strb);
		strb_.append("           <Image>                   ");
		strb_.append("         <MediaId><![CDATA["+this.getMediaId()+"]]></MediaId>                  ");
	
		strb_.append("         </Image>                 ");
		return strb_.toString();

		
	}
	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 getMediaId() {
		return MediaId;
	}
	public void setMediaId(String mediaId) {
		MediaId = mediaId;
	}
	
}
package wx.out;

public class Out_Music {
	private String ToUserName = null;//	是	接收方帐号(收到的OpenID)
	private String FromUserName = null;//	是	开发者微信号
	private String CreateTime = null;//	是	消息创建时间 (整型)
	private String MsgType =null;//	是	music
	private String Title = null;//	否	音乐标题
	private String Description = null;//	否	音乐描述
	private String MusicURL = null;//	否	音乐链接
	private String HQMusicUrl = null;//	否	高质量音乐链接,WIFI环境优先使用该链接播放音乐
	private String ThumbMediaId = null;//	是	缩略图的媒体id,通过素材管理中的接口上传多媒体文件,得到的id
	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 getTitle() {
		return Title;
	}
	public void setTitle(String title) {
		Title = title;
	}
	public String getDescription() {
		return Description;
	}
	public void setDescription(String description) {
		Description = description;
	}
	public String getMusicURL() {
		return MusicURL;
	}
	public void setMusicURL(String musicURL) {
		MusicURL = musicURL;
	}
	public String getHQMusicUrl() {
		return HQMusicUrl;
	}
	public void setHQMusicUrl(String hQMusicUrl) {
		HQMusicUrl = hQMusicUrl;
	}
	public String getThumbMediaId() {
		return ThumbMediaId;
	}
	public void setThumbMediaId(String thumbMediaId) {
		ThumbMediaId = thumbMediaId;
	}

}
package wx.out;

public class Out_News {

}
package wx.out;

import java.util.Date;

import wx.in.In;

public class Out_Text {
	private String ToUserName = null;//	是	接收方帐号(收到的OpenID)
	private String FromUserName = null;//	是	开发者微信号
	private String CreateTime = null;//	是	消息创建时间 (整型)
	private String MsgType =null;//	 是	text
	private String Content = null;//	是	回复的消息内容(换行:在content中能够换行,微信客户端就支持换行显示)
	StringBuffer strb = new StringBuffer();
	StringBuffer strb_ = new StringBuffer();
	public Out_Text(In in) {
	//public Out_Text(In in,String str) {
		super();
		// TODO Auto-generated constructor stub
		Date date = new Date();

		strb.append("             <ToUserName><![CDATA["+in.getFromUserName()+"]]></ToUserName>                   ");
		strb.append("         <FromUserName><![CDATA["+in.getToUserName()+"]]></FromUserName>                       ");
		strb.append("         <CreateTime>"+date.getTime()+"</CreateTime>                       ");
		strb.append("          <MsgType><![CDATA[text]]></MsgType>   ");
	    //this.setContent(str);
	}

	//public String getStr(String str){
	public String getStr(){

		strb_.append("           <xml>                     ");    
		strb_.append(strb);
		//strb_.append("            <Content><![CDATA["+str+"]]></Content>                    ");
		strb_.append("            <Content><![CDATA["+this.getContent()+"]]></Content>                    ");
		strb_.append("            </xml>                    ");
		return strb_.toString();

		
	}
	
	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 getContent() {
		return Content;
	}
	public void setContent(String content) {
		Content = content;
	}
	
	
	
}
package wx.out;

public class Out_Video {
	private String ToUserName = null;//	是	接收方帐号(收到的OpenID)
	private String FromUserName =null;//	是	开发者微信号
	private String CreateTime = null;//	是	消息创建时间 (整型)
	private String MsgType =null;//	是	video
	private String MediaId	 = null;//是	通过素材管理中的接口上传多媒体文件,得到的id
	private String Title =null;//	否	视频消息的标题
	private String Description =null;//	否	视频消息的描述
	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 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;
	}

}
package wx.out;

public class Out_Voice {
	private String ToUserName =null;//	是	接收方帐号(收到的OpenID)
	private String FromUserName	= null;//是	开发者微信号
	private String CreateTime = null;//	是	消息创建时间戳 (整型)
	private String MsgType = null;//	是	语音,voice
	private String MediaId = null;//	是	通过素材管理中的接口上传多媒体文件,得到的id
	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 getMediaId() {
		return MediaId;
	}
	public void setMediaId(String mediaId) {
		MediaId = mediaId;
	}

}
package wx.in;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

import javax.servlet.ServletInputStream;
import javax.servlet.http.HttpServletRequest;

public class In_Util {
   
    /**
     * 通过request得到请求流中的微信报文str
     * @param request
     * @return
     */

	 
	 
       
	public static String getStringFromRequest(HttpServletRequest request){
		StringBuffer strb = new StringBuffer();
		//strb要存储一下request获取过来的东西
		BufferedReader breader = null;
		//ServletInputStream in;
		try {
			//in = request.getInputStream();
	

		 //breader =  new BufferedReader( new InputStreamReader(in,"UTF-8"));//接收是对的,已经进行转码了.
		 breader =  new BufferedReader( new InputStreamReader(request.getInputStream(),"UTF-8"));//接收是对的,已经进行转码了.
		String str = null;
		//+-*/是运算符,赋值运算符=也是运算符
		while(null!=(str = breader.readLine())){
			 strb.append(str);
		}
		breader.close();
	}catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		return strb.toString();
	}
	/**
	 * 得到微信的相关文字
	 * @param str
	 * @return
	 */
	public static String getStrByXML(String str,String tagName){
		//解析XML,使用dom4j或者是SAX,JDOM这类框架.
		//使用最基本的字符串处理它
		//可以使用解析XML的第三方框架或者是工具包,dom4j之类的.
		String begin = "<"+tagName+"><![CDATA[";
		String end = "]]></"+tagName+">";
		boolean flag = false;
		if("CreateTime".equals(tagName)){
			flag = true;
		}else if("MsgId".equals(tagName)){
			flag = true;
		}else if("Location_X".equals(tagName)){
			flag = true;
		}else if("Location_Y".equals(tagName)){
			flag = true;
		}else if("Scale".equals(tagName)){
			flag = true;
		}
		if(flag ){
			 begin = "<"+tagName+">";
			 end = "</"+tagName+">";
		}
		System.out.println(begin);
		System.out.println(end);
		int beginIndex = str.indexOf(begin) + begin.length();//
		int endIndex = str.indexOf(end);
		
		return str.substring(beginIndex,endIndex);
		
	}
}

 

转载于:https://my.oschina.net/u/3206447/blog/900168

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值