微信公众号回复关键字图文文本

这里回复文本消息需要用到的是 TextMessage ,我们把回复文本消息在【文本消息】类型中给出回复!在我们做消息回复的时候需要设置消息的接收人 ToUserName openid )、消息的发送方  FromUserName 、消息类型  MsgType 、创建时间  CreateTime 以及消息体  Content ,由于我们我们的消息回复格式是需要为  xml ,所以最终我们需要将其装换成  xml  再做返回输出!
工具类MessageUtil :

public class MessageUtil {

/**
* 返回消息类型:文本
*/
public static final String RESP_MESSAGE_TYPE_TEXT = "text";


/**
* 返回消息类型:音乐
*/
public static final String RESP_MESSAGE_TYPE_MUSIC = "music";


/**
* 返回消息类型:图文
*/
public static final String RESP_MESSAGE_TYPE_NEWS = "news";


/**
* 返回消息类型:图片
*/
public static final String RESP_MESSAGE_TYPE_Image = "image";


/**
* 返回消息类型:语音
*/
public static final String RESP_MESSAGE_TYPE_Voice = "voice";


/**
* 返回消息类型:视频
*/
public static final String RESP_MESSAGE_TYPE_Video = "video";


/**
* 请求消息类型:文本
*/
public static final String REQ_MESSAGE_TYPE_TEXT = "text";


/**
* 请求消息类型:图片
*/
public static final String REQ_MESSAGE_TYPE_IMAGE = "image";


/**
* 请求消息类型:链接
*/
public static final String REQ_MESSAGE_TYPE_LINK = "link";


/**
* 请求消息类型:地理位置
*/
public static final String REQ_MESSAGE_TYPE_LOCATION = "location";


/**
* 请求消息类型:音频
*/
public static final String REQ_MESSAGE_TYPE_VOICE = "voice";


/**
* 请求消息类型:视频
*/
public static final String REQ_MESSAGE_TYPE_VIDEO = "video";


/**
* 请求消息类型:推送
*/
public static final String REQ_MESSAGE_TYPE_EVENT = "event";


/**
* 事件类型:subscribe(订阅)
*/
public static final String EVENT_TYPE_SUBSCRIBE = "subscribe";


/**
* 事件类型:unsubscribe(取消订阅)
*/
public static final String EVENT_TYPE_UNSUBSCRIBE = "unsubscribe";


/**
* 事件类型:CLICK(自定义菜单点击事件)
*/
public static final String EVENT_TYPE_CLICK = "CLICK";


/**
* 事件类型:VIEW(自定义菜单URl视图)
*/
public static final String EVENT_TYPE_VIEW = "VIEW";


/**
* 事件类型:LOCATION(上报地理位置事件)
*/
public static final String EVENT_TYPE_LOCATION = "LOCATION";


/**
* 事件类型:LOCATION(上报地理位置事件)
*/
public static final String EVENT_TYPE_SCAN = "SCAN";



@SuppressWarnings("unchecked")
public static Map parseXml(HttpServletRequest request)
throws Exception {
// 将解析结果存储在HashMap中
Map map = new HashMap();
// 从request中取得输入流
InputStream inputStream = request.getInputStream();
// 读取输入流
SAXReader reader = new SAXReader();
Document document = reader.read(inputStream);
// 得到xml根元素
Element root = document.getRootElement();
// 得到根元素的所有子节点
List elementList = root.elements();


// 遍历所有子节点
for (Element e : elementList)
map.put(e.getName(), e.getText());


// 释放资源
inputStream.close();
inputStream = null;


return map;
}



public static String textMessageToXml(TextMessage textMessage) {
xstream.alias("xml", textMessage.getClass());
return xstream.toXML(textMessage);
}



public static String newsMessageToXml(NewsMessage newsMessage) {
xstream.alias("xml", newsMessage.getClass());
xstream.alias("item", new Article().getClass());
return xstream.toXML(newsMessage);
}



public static String imageMessageToXml(ImageMessage imageMessage) {
xstream.alias("xml", imageMessage.getClass());
return xstream.toXML(imageMessage);
}


/**
* @Description: 语音消息对象转换成xml
* @param @param voiceMessage
* @param @return
* @author dapengniao
* @date 2016年3月9日 上午9:27:26
*/
public static String voiceMessageToXml(VoiceMessage voiceMessage) {
xstream.alias("xml", voiceMessage.getClass());
return xstream.toXML(voiceMessage);
}


/**
* @Description: 视频消息对象转换成xml
* @param @param videoMessage
* @param @return
* @author dapengniao
* @date 2016年3月9日 上午9:31:09
*/
public static String videoMessageToXml(VideoMessage videoMessage) {
xstream.alias("xml", videoMessage.getClass());
return xstream.toXML(videoMessage);
}


/**
* @Description: 音乐消息对象转换成xml
* @param @param musicMessage
* @param @return
* @author dapengniao
* @date 2016年3月8日 下午4:13:36
*/
public static String musicMessageToXml(MusicMessage musicMessage) {
xstream.alias("xml", musicMessage.getClass());
return xstream.toXML(musicMessage);
}


/**
* 对象到xml的处理
*/
private static XStream xstream = new XStream(new XppDriver() {
public HierarchicalStreamWriter createWriter(Writer out) {
return new PrettyPrintWriter(out) {
// 对所有xml节点的转换都增加CDATA标记
boolean cdata = true;


@SuppressWarnings("rawtypes")
public void startNode(String name, Class clazz) {
super.startNode(name, clazz);
}


protected void writeText(QuickWriter writer, String text) {
if (cdata) {
writer.write("");
} else {
writer.write(text);
}
}
};
}
});
}



public function replytext(){
		if (IS_GET) {
			$this->display();
		}else{
		   $content =I('post.content');
		   $keyword=I('post.keyword');
		   $model=M('mp_reply_text');
		   $data['content']=$content;

		   $reply_id =$model->add($data);

		   if (isset($reply_id)) {
		   	   $mp =getCurrentMp();
		   	   $data['mp_id']=$mp['id'];
		       $data['type']='text';
		       $data['keyword']=$keyword;
		       $data['reply_id']=$reply_id;
		       M('mp_rule')->add($data);
		   }

		}
	}
图文消息的回复和文本消息的实现模式是一样的,只不过对应消息体的字段有所区别,这里为了和文本消息能有所区分我在【图片消息】实现图文消息的回复,修改 MsgDispatcher
public function replynews(){
		if (IS_GET) {
			$this->display();
		}else{
			//以I函数获取post中的所有数据
			$keyword = I('post.keyword');
			 //dump($keyword);
		     //exit;
			$title = I('post.title');
			$description = I('post.content');
			$picurl = I('post.url');
			$url = I('post.url');

			if(empty($keyword) || empty($url)){
			$this->ajaxReturn(array('status'=>0,'msg'=>'必须输入关键字和选择图片'));
			 exit;
		}
		//赋值
		$data['media_id']=$media_id;
		$data['title']=$title;
		$data['description']=$description;
		$data['picurl']=$picurl;
		$data['url']=$url;
		//写进数据库
		$reply_id=M('mp_reply_news')->add($data);
		//获取当前公众号
		$mp=$this->mp;
		//获取当前公众号ID
		$arr['mp_id']=$mp['id'];

		$arr['type']='news';
		$arr['keyword']=$keyword;
		$arr['reply_id']=$reply_id;
		$ret=M('mp_rule')->add($arr);
		if ($ret) {
			$this->ajaxReturn(array('status'=>1,'msg'=>'添加成功','url'=>U('Autoreply/replynews',['type'=>'image'])));
		}else{
			$this->ajaxReturn(array('status'=>1,'msg'=>'添加失败'));
		}

	}
}


你可能感兴趣的:(微信公众号回复关键字图文文本)