微信開發就是這麼簡單

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章