好的程序是重构出来的.要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);
}
}