微信开发就是这么简单

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值