View on GitHub

mpsdk4j v2 - a simple SDK for wechat develop.

JAVA微信公平台开发SDK,没有复杂的功能,一切源于微信API,愿你会喜欢使用。

Download this project as a .zip file Download this project as a tar.gz file

MPSDK4J v2

Build Status Maven Central License

"MPSDK4J"

目录

1.引言

"十一"黄金周假期已悄然逝去,MPSDK4J在不知不觉中也经历过一个年头啦,非常感谢这段时间里网友们的支持.有了小伙伴们的支持MPSDK4J成长更加的迅速,当前版本也确实存在问题诸多的问题.如: 交互中单,多例问题,多公众号混淆问题,微信公众号API更新等等问题.所以趁最近空闲时间把MPSDK4J重构,需要注意此次升级是全新的改造不往下兼容.新版本的MPSDK4J结构上更加清晰,使用同样的简单,依然不忘追求速度与简单的初心.

2.介绍

MPSDK4J,非常直观的阐述了此项目的意义所在.没错,它就是JAVA语言环境下的微信公众平台开发SDK.其中MP代表的是微信公众平台的域名前缀,SDK表示开发工具包,4同音英文"for",J代表了JAVA.虽然现网络上已经有不少JAVA版本的SDK现身,但是[MPSDK4J]的出现也并非只是造轮子的重复工作.它遵循单一设计模式规则,所有的设计与功能都是源于微信公众平台API,一切都是为了追求简单与速度.

a.设计简单:整体设计非常的简单,仅有9个大包11个接口,3个枚举,55类,1个配置文件(其中API交互实体对象占据一半之多),核心功能部分就4类(WechatKeneral,MessageHandler,WechatHandler,WechatAPI);

b.解析速度:基本SAX驱动式XML处理,能够快速的解析收到用户发送的微信消息,放弃JAVA反射功能,采用直接编码生成VO对象,加快解释速度;

c.敏捷开发:微信交互信息全都统一封装VO对象,所有VO的属性都是微信公众平台API原生状态.但开发者无须再关心它来源是XML还JSON格式,只需掌握其中消息的收发对应VO对象即可;

d.支持力度:API功能分类与微信公众平台保持一致,分类信息详见下表(后续会不断更新升级),微信基本消息的交互,高级接口(Token,自定义菜单,模板消息,群发消息等等).

API名称 描述
CredentialAPI 微信服务器IP列表,access_token,jssdk_ticket,短链接生成
GroupsAPI 用户分组接口: 创建,查询,移动用户等
MediaAPI 多媒体文件接口: 上传多媒体素材(临时/永久),下载,删除
MenuAPI 自定义菜单接口: 查询,创建,删除
MessageAPI 高级消息接口: 发送模板消息,客服消息,群发消息
QRCodeAPI 二维码接口: 创建,获取
UserAPI 用户管理接口: 用户信息,订阅列表等
WechatAPIImpl 上述接口统一实现

2.1.整体结构设计

"MPSDK4J-V2"

2.2.交互时序图

"MPSDK4J-seq"

2.3.测试覆盖

"MPSDK4J-test"

3.项目

3.1最新源码

3.2Maven库引用

<dependency>
    <groupId>io.github.elkan1788</groupId>
    <artifactId>mpsdk4j</artifactId>
    <version>2.b.1</version>
</dependency>

或者自己编译jar包.


mvn clean package

4.示例代码

MPSDK4JWeb环境中暂时提供了以下环境支持,欢迎提交其它环境扩展.在实际的使用过程中只需要继承相应环境的WechatWebSupport父类,重写init初始化方法修改其中的公众号信息及微信消息处理器(实现WechatHandler接口或是继承WechatDefHandler基类),添加环境的入口(Servlet环境无需此步骤),调用interact方法,最后发布上线即可.

4.1.HttpServlet环境:

@WebServlet(name = "wechatCoreServlet", urlPatterns = "/servlet/wechatcore.ser")
public class WechatCoreServlet extends HttpServletSupport {

    private static final long serialVersionUID = 4370883777170946295L;

    private static final Logger log = LoggerFactory.getLogger(WechatCoreServlet.class);

    private static final ConfigReader _cr = new ConfigReader("/mp.properties");

    @Override
    public void init() throws ServletException {
        log.info("====== Servlet环境 =======");
        MPAccount mpact = new MPAccount();
         // 修改为实际的公众号信息,可以在开发者栏目中查看
        mpAct.setAppId("wx****");
        mpAct.setAppSecert("***");
        mpAct.setToken("***");
        mpAct.setAESKey("******");
        _wk.setMpAct(mpact);        
        _wk.setWechatHandler(new WechatDefHandler());
    }

}

4.2.SpringMVC环境:

/**
 * SpringMVC环境接入
 * 
 * @author 凡梦星尘(elkan1788@gmail.com)
 * @since 2.0
 */
@RequestMapping("/springmvc")
@Controller
public class WechatCoreController extends WechatWebSupport {

    private static final Logger log = LoggerFactory.getLogger(WechatCoreController.class);

    private static final ConfigReader _cr = new ConfigReader("/mp.properties");

    @Override
    public void init() {
        log.info("====== SpringMVC环境 =======");
        MPAccount mpact = new MPAccount();
        // 修改为实际的公众号信息,可以在开发者栏目中查看
        mpAct.setAppId("wx****");
        mpAct.setAppSecert("***");
        mpAct.setToken("***");
        mpAct.setAESKey("******");
        _wk.setMpAct(mpact);
        _wk.setWechatHandler(new WechatDefHandler());
    }

    @RequestMapping("/wechatcore")
    public void wechatCore(HttpServletRequest req, HttpServletResponse resp) throws Exception {
        this.interact(req, resp);
    }

}

4.3.Nutz环境:

/**
 * Nutz环境接入
 * 
 * @author 凡梦星尘(elkan1788@gmail.com)
 * @since 2.0
 */
@At("/nutz")
@IocBean
public class WechatCoreModule extends WechatWebSupport {

    private static final Log log = Logs.get();

    private static final ConfigReader _cr = new ConfigReader("/mp.properties");

    @Override
    public void init() {
        log.info("====== Nutz环境 =======");
       // 修改为实际的公众号信息,可以在开发者栏目中查看
        mpAct.setAppId("wx****");
        mpAct.setAppSecert("***");
        mpAct.setToken("***");
        mpAct.setAESKey("******");
        _wk.setMpAct(mpact);
        _wk.setWechatHandler(new WechatDefHandler());
    }

    @At("/wechatcore")
    public void wechatCore(HttpServletRequest req, HttpServletResponse resp) {
        try {
            this.interact(req, resp);
        }
        catch (IOException e) {
            throw Lang.wrapThrow(e);
        }
    }
}

4.4.示例项目源码

5.Issue

BUG提交:https://git.oschina.net/lisenhui/mpsdk4j/issues

6.联系

特别希望看到该项目对您哪怕一点点的帮助。你有任何的想法和建议,除以上Issue提交外,也随时欢迎与我沟通,联系方式:

"MPSDK4J-qq"

7.其它: JCE 使用说明

文件名称 JDK版本
jce_policy-6.zip 1.6
UnlimitedJCEPolicyJDK7.zip 1.7
jce_policy-8.zip 1.8

选择相应的J2EE版本下载后解压,可以看到local_policy.jarUS_export_policy.jar以及readme.txt