LiteWeixin介紹
LiteWeixin是一個開源的小型框架,與其說是框架倒不如說是將一些微信開發的常用的操作包裝了起來,讓開發者不再面對着xml的解析與生成,而能夠有更多的精力來面對業務邏輯
LiteWeixin接入步驟
- 使用LiteWeixin接入微信開發非常簡單,首先先引入LiteWeixin的jar包和xstream的jar包,將他們放入WEB-INF下面的lib文件夾下面,目錄如下:
- 在web.xml文件裏面加入如下所示的監聽器:
<listener>
<listener-class>cn.karent.listener.ContextListener</listener-class>
</listener>
- 創建一個類繼承自LiteWeixin,並重寫裏面響應的方法,如下所示:
package com.chxxi614.servlet;
import cn.karent.bean.common.BaseMessage;
import cn.karent.bean.common.TextMessage;
import cn.karent.bean.req.EventMessage;
import cn.karent.bean.req.ImageMessage;
import cn.karent.bean.req.LinkMessage;
import cn.karent.bean.req.LocationMessage;
import cn.karent.bean.req.VideoMessage;
import cn.karent.bean.req.VoiceMessage;
import cn.karent.servlet.LiteWeixin;
public class Main extends LiteWeixin{
/**
* 處理文本消息
*/
@Override
public BaseMessage textMessage(TextMessage text) {
return super.textMessage(text);
}
/**
* 處理圖片消息
*/
@Override
public BaseMessage imageMessage(ImageMessage image) {
// TODO Auto-generated method stub
return super.imageMessage(image);
}
/**
* 處理聲音消息
*/
@Override
public BaseMessage voiceMessage(VoiceMessage voice) {
// TODO Auto-generated method stub
return super.voiceMessage(voice);
}
/**
* 處理鏈接消息
*/
@Override
public BaseMessage linkMessage(LinkMessage link) {
// TODO Auto-generated method stub
return super.linkMessage(link);
}
/**
* 處理地理位置消息
*/
@Override
public BaseMessage locationMessage(LocationMessage location) {
// TODO Auto-generated method stub
return super.locationMessage(location);
}
/**
* 處理視頻消息
*/
@Override
public BaseMessage videoMessage(VideoMessage video) {
// TODO Auto-generated method stub
return super.videoMessage(video);
}
/**
* 處理事件消息
*/
@Override
public BaseMessage eventMessage(EventMessage event) {
// TODO Auto-generated method stub
return super.eventMessage(event);
}
}
裏面的參數是相應的bean,例如文本消息對應的xml文件如下:
<xml>
<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[fromUser]]></FromUserName>
<CreateTime>1348831860</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[this is a test]]></Content>
<MsgId>1234567890123456</MsgId>
</xml>
它對應的bean是TextMessage,看下TextMessage裏面的定義:
package cn.karent.bean.common;
/**
* 文本消息
* @author wan
*/
public class TextMessage extends BaseMessage{
public TextMessage() {
setMsgType("text");
}
private String Content;
public String getContent() {
return Content;
}
public void setContent(String content) {
Content = content;
}
}
package cn.karent.bean.common;
/**
* model基類
* @author wan
*/
public class BaseMessage {
private String ToUserName;
private String FromUserName;
private long CreateTime;
private String MsgType;
private int FuncFlag;
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 long getCreateTime() {
return CreateTime;
}
public void setCreateTime(long createTime) {
CreateTime = createTime;
}
public String getMsgType() {
return MsgType;
}
public void setMsgType(String msgType) {
MsgType = msgType;
}
public int getFuncFlag() {
return FuncFlag;
}
public void setFuncFlag(int funcFlag) {
FuncFlag = funcFlag;
}
}
同理ImageMessage也是一樣:
<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>
它對應的bean ImageMessage如下:
package cn.karent.bean.req;
import cn.karent.bean.common.BaseMessage;
/**
* 請求之圖片消息
* @author wan
*/
public class ImageMessage extends BaseMessage {
private String PicUrl;
private String MediaId;
public String getPicUrl() {
return PicUrl;
}
public void setPicUrl(String picUrl) {
PicUrl = picUrl;
}
public String getMediaId() {
return MediaId;
}
public void setMediaId(String mediaId) {
MediaId = mediaId;
}
}
- 在src目錄下面創建一個weixin.xml文件,在裏面填入如下內容:
<?xml version="1.0" encoding="UTF-8"?>
<weixin>
<token>chxxi614</token>
<core>com.chxxi614.servlet.Main</core>
</weixin>
其中token標籤是接入微信開發所需要的token, <core></core>
標籤裏面的內容是指定我們剛剛創建的那個繼承自LiteWeixin的類
注意事項
前面說過在我們指定的Main類的裏面每個請求對應着一個方法,每個請求的數據對應着方法參數裏面的java bean,我們向微信服務迴應消息也對應着一個java bean,例如迴應圖片消息對應的xml:
<xml>
<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[fromUser]]></FromUserName>
<CreateTime>12345678</CreateTime>
<MsgType><![CDATA[image]]></MsgType>
<Image>
<MediaId><![CDATA[media_id]]></MediaId>
</Image>
</xml>
這個xml對應的java bean如下:
package cn.karent.bean.resp;
import cn.karent.bean.common.BaseMessage;
/**
* 回覆圖片消息
* @author wan
*/
public class ImageMessage extends BaseMessage{
public ImageMessage() {
setMsgType("image");
}
private Image Image;
public Image getImage() {
return Image;
}
public void setImage(Image image) {
Image = image;
}
}
package cn.karent.bean.resp;
public class Image {
private String MediaId;
public String getMediaId() {
return MediaId;
}
public void setMediaId(String mediaId) {
MediaId = mediaId;
}
}
我們不要管xml怎麼響應的,我們只要return 相應的bean即可(注意,這些bean都是在LiteWeixin裏面定義好了的),更多的細節可以參考LiteWeixin裏面的源碼。
使用LiteWeixin回覆文本和圖片消息
先引入LiteWeixin.jar和xstream-1.3.1.jar到lib文件夾下面(LiteWeixin.jar的下載地址),然後使用剛剛創建的Main類,在對應的textMessage和imageMessage中加入如下代碼:
public BaseMessage textMessage(TextMessage text) {
System.out.println("I'm text message, content:" + text.getContent());
TextMessage resp = new TextMessage();
initResponseData(text, resp);
resp.setContent("hello, I'm liteWeixin text message");
return resp;
}
/**
* 處理圖片消息
*/
@Override
public BaseMessage imageMessage(ImageMessage image) {
// TODO Auto-generated method stub
System.out.println("image Message:" + image.getFromUserName() + "\t" + image.getMediaId());
TextMessage text = new TextMessage();
initResponseData(image, text);
text.setContent("hello, I'm LiteWeixin image Message");
return text;
}
然後使用剛剛創建的weixin.xml文件,目錄結構如下:
最後別忘了在web.xml裏面註冊一個監聽器:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<listener>
<listener-class>cn.karent.listener.ContextListener</listener-class>
</listener>
</web-app>
微信上面的配置
因爲所以的接入都是LiteWeixin幫我們配置好了,LiteWeixin默認的入口是叫做entry,例如我們創建的項目名叫做testweixin,那麼完整的項目配置路徑應該是
http://域名/testweixin/entry
這個就是我們的URL,至於token,那就是我們在weixin.xml文件<token></token>
當中配置的內容
看效果
結尾
LiteWeixin應該不算是一個框架吧,只是將一些微信開發公共的部分抽取了出來,最後祝大家元旦快樂!
LiteWeixin的項目地址:https://github.com/karentwan/LiteWeixin