教你3分钟快速开发微信公众号[订阅号][服务号]

article/2025/10/16 19:19:34

Wx-tools是基于微信公众平台API的轻量级框架。 基于Wx-tools你可以开速开发一个订阅号/服务号的web应用后台。
博主最近终于有空!!已经更新到2.0.0啦!!
GitHub仓库
下载wx-tools-2.0.0.jar
wx-tools开发文档

大三做过几个基于微信公众平台API的项目,感觉操作太繁琐,有时微信官方开发文档还有错!!

所以!wx-tools诞生了!

看过很多优秀的开源代码,特别是chanjarster的代码,优秀的设计思想让我醍醐灌顶。

不多说,让我带你快速有效可拓展的开发一个订阅号/服务号的后台。


到底有多简单?只需要3步即可~
1. 创建web工程,添加jar包及依赖
2. 配置wx.properties
3. 调用WxService来实现业务逻辑即可

如果有过开发过基于微信公众平台API项目的小伙伴们,应该很容易上手哦!没有也没关系,戳这里看看官方文档入门


开始

一、创建web工程,添加jar包及依赖

我这里使用的是maven构建项目,可以在eclipse创建web项目。

maven创建项目指令

mvn archetype:generate -DgroupId=wxtools.demo -DartifactId=demo -DarchetypeArtifactId=maven-archetype-webapp -DarchetypeCatalog=local
  • 1
  • 注意:此指令创建的web工程版本是2.3的,比较低。可以修改web.xml,变成3.0
<?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"><display-name>demo</display-name>
</web-app>
  • 1
  • 2
  • 3
  • 4

创建完毕后,导入wx-tools-1.0.1.jar

  • 注意,导入后记得修改jar包的编码。window下默认读GBK,而框架本身是UTF-8。如果需要看源代码的务必手动修改编码。
  • 修改方式:在eclipse的工程下,对着jar包右键 –> Properties –> Encoding –> UTF-8

建立基本的package,如图。

package

添加wx-tools依赖的jar包。

  • 如果使用maven构建项目,可以直接添加如下坐标下载依赖jar。

maven pom.xml

<!-- 补全依赖 --><!-- 1:日志; java日志:slf4j,log4j,logback,common-loggingslf4j接口/规范log4j,logback,common-logging,实现此处使用slf4j+logback --><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>1.7.6</version></dependency><!-- 实现slf4j日志 --><dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId><version>1.1.1</version></dependency> <!-- HttpClient --><dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId><version>4.3.6</version></dependency><!-- http://mvnrepository.com/artifact/org.apache.httpcomponents/httpmime --><dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpmime</artifactId><version>4.3.6</version></dependency><!-- JSON --><dependency><groupId>org.codehaus.jackson</groupId><artifactId>jackson-mapper-asl</artifactId><version>1.9.13</version></dependency><!-- XML --><!-- http://mvnrepository.com/artifact/com.thoughtworks.xstream/xstream --><dependency><groupId>com.thoughtworks.xstream</groupId><artifactId>xstream</artifactId><version>1.4.7</version></dependency><!-- IO --><!-- http://mvnrepository.com/artifact/commons-io/commons-io --><dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.4</version></dependency>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51

如果不是maven构建的项目,可以自行下载相应的jar包,放在WEB-INF/lib文件夹下

如果与项目中的jar包冲突或重复,只留一个就可以了~


二、配置wx.properties

搭好项目基本框架后,在src/main/resources或者src/main/java下新建wx.properties,如上图

#配置如下
wx.appId=wxb1bff1627d37417b
wx.appSecret=dd037d9b9b4eea00fba14167a9f3c75d
wx.token=antgan
wx.aesKey=f82PVzQsKG5d8en3DwnZ8VVEoGInkmsWz3X3HsreEqe
wx.mchId=
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

不要填错了哦!注意大小写。


三、实现业务逻辑

  • 我们模拟一个业务场景:某公众平台进行一项活动,有奖竞猜一个单词,只有关注本公众号大于3天的用户才能参与。回答正确的用户会接收到平台回复“恭喜你中奖了”。正确答案是:smart

这里有必要介绍一下wx-tools的四大组件。

  • WxMessageRouter 消息路由器
  • WxMessageMatcher(接口) 消息匹配器
  • WxMessageInterceptor (接口) 消息拦截器
  • WxMessageHandler (接口) 消息处理器

这四大组件构成了对微信服务器发送过来的消息进行拓展性的处理。
其中,以上三个是接口,开发者可实现并构建自己的匹配器,拦截器,处理器。

此外,还有几个类需要注意一下

  • WxConsts 类
    封装所有微信公众平台API的常量类型,包括接口请求路径,事件等。
  • WxConfig 类
    基本配置库。里面包含了AppId,AppSecret等信息。wx-tools已经提供了个基于内存管理的配置库。暂不支持自行拓展,如有需要持久化到数据库,需要自己实现。注意:配置库对于整个程序是单例的。
  • WxService 类
    微信统一的API Service入口,继承IService接口,所有接口都从这里调用。
  • WxErrorException 类
    微信异常
  • WxErrorExceptionHandler 接口
    开发者可自行实现该接口,处理微信异常。

理清了关系后,开始创建自定义匹配器Matcher

1. 创建DemoMatcher.java 实现 WxMessageMatcher接口
任务:识别是是否是smart的消息,如果是,接收;否则,不接受。

/**
* Demo 简单的匹配器,可以用于更加复杂的消息验证操作
* @author antgan
*/
public class DemoMatcher implements WxMessageMatcher{//答案是smart,如果匹配smart返回true;反之,false。public boolean match(WxXmlMessage message) {if(message.getContent().equals("smart")){return true;}return false;}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

2. 创建DemoInterceptor.java 实现 WxMessageInterceptor接口
任务:拦截消息,验证用户条件,需要满足关注3天以上。

/*** Demo 拦截器,可以做身份验证,权限验证等操作。* @author antgan*/
public class DemoInterceptor implements WxMessageInterceptor{public boolean intercept(WxXmlMessage wxMessage, Map<String, Object> context, IService wxService)throws WxErrorException {//可以使用wxService的微信API方法//可以在Handler和Interceptor传递消息,使用context上下文//可以实现自己的业务逻辑//这里就不编写验证关注三天以上的用户了if(/*用户关注时长大于3天*/){return true;}return false;}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

3. 创建类DemoHandler.java 实现 WxMessageHandler接口
任务:如果满足以上条件的用户消息,返回字符串“恭喜你中奖了”

/*** Demo 处理微信消息Handler* @author antgan*/
public class DemoHandler implements WxMessageHandler {//wxMessage 消息 | context 上下文 | WxService API对象public WxXmlOutMessage handle(WxXmlMessage wxMessage, Map<String, Object> context, IServicewxService) throws WxErrorException {WxXmlOutMessage xmlOutMsg = null;//必须以build()作为结尾,否则不生效。if(wxMessage.getMsgType().equals(WxConsts.XML_MSG_TEXT)){xmlOutMsg = WxXmlOutMessage.TEXT().content("恭喜你中奖了").toUser(wxMessage.getFromUserName()).fromUser(wxMessage.getToUserName()).build();}return xmlOutMsg;}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

4. 创建servlet,名为DemoServlet.java
任务:接收微信服务器发来的消息,并传入路由器中。

/*** <pre>* Demo Servlet* 如果使用的是SpringMVC,也是类似这样的写法~* * 注意:WxConfig请调用getInstance()* 因为对于全局是唯一的。采用单例模式。* </pre>* * @author antgan* @date 2016/12/15**/
@WebServlet("/wx")
public class DemoServlet extends HttpServlet {private static final long serialVersionUID = 1L;// 实例化 统一业务API入口private IService iService = new WxService();protected void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {// 验证服务器的有效性PrintWriter out = response.getWriter();String signature = request.getParameter("signature");String timestamp = request.getParameter("timestamp");String nonce = request.getParameter("nonce");String echostr = request.getParameter("echostr");if (iService.checkSignature(signature, timestamp, nonce, echostr)) {out.print(echostr);}}protected void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {request.setCharacterEncoding("UTF-8");response.setCharacterEncoding("UTF-8");// 返回消息给微信服务器PrintWriter out = response.getWriter();// 创建一个路由器WxMessageRouter router = new WxMessageRouter(iService);try {// 微信服务器推送过来的是XML格式。WxXmlMessage wx = XStreamTransformer.fromXml(WxXmlMessage.class, request.getInputStream());System.out.println("消息:\n " + wx.toString());// 添加规则;这里的规则是所有消息都交给DemoMatcher处理,交给DemoInterceptor处理,交给DemoHandler处理// 注意!!每一个规则,必须由end()或者next()结束。不然不会生效。// end()是指消息进入该规则后不再进入其他规则。 而next()是指消息进入了一个规则后,如果满足其他规则也能进入,处理。router.rule().matcher(new DemoMatcher()).interceptor(new DemoInterceptor()).handler(new DemoHandler()).end();// 把消息传递给路由器进行处理WxXmlOutMessage xmlOutMsg = router.route(wx);if (xmlOutMsg != null)out.print(xmlOutMsg.toXml());// 因为是明文,所以不用加密,直接返回给用户。} catch (Exception e) {e.printStackTrace();} finally {out.close();}}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62

就是这么简单。
完成了这个活动的业务。


这里实例讲得很粗糙,可以看wx-tools的开发文档。有详细的实例和使用讲解。

GitHub持续更新!喜欢的点个star哦~

        <link rel="stylesheet" href="https://csdnimg.cn/release/phoenix/template/css/markdown_views-ea0013b516.css"></div>

http://chatgpt.dhexx.cn/article/3beJCIB1.shtml

相关文章

微信公众号开发之配置开发服务器

微信公众号开发详细教程 微信公众号开发文档 需不需要开发服务器应该根据自己的业务需求来决定。如果你只是简单使用微信公众号&#xff0c;发送推文等简单需求&#xff0c;你就不需要的配置自己的开发服务器&#xff0c;微信公众号平台功能十分强大&#xff0c;不懂技术的用…

微信服务号的开发-服务器配置

微信服务号开发-服务器配置 本期是将微信开发第一步&#xff0c;也就是服务器配置&#xff0c;以及校验。 话不多说&#xff0c;我们主要讲重点。既然是微信服务号开发&#xff0c;首先我们需要一个测试号&#xff0c;大家可以自己去微信公众平台申请一个。 申请完后&#xff…

微信公众号开发:服务器配置(Java)

由于项目需要微信公众号的开发&#xff0c;弄了老半天&#xff0c;发现也不是那么难弄。 对于微信公众号开发&#xff0c;首先要有开发者权限然后进行基本的配置。 登录进微信公众号平台&#xff0c;首页最下面有个基本配置&#xff1a; 进入基本配置后&#xff0c;会看到两个…

微信公众号开发——服务器配置

一、前提 1、购买一台云服务器 域名解析 这里用的宝塔服务 创建域名 绑定到指定的目录 wx.php 代码如下 <?php /** * wechat php test */ //define your token define("TOKEN", "weixin"); $wechatObj new wechatCallbackap…

微信公众号开发--服务号

前言 因公司需要开发一款手机打卡程序&#xff0c;本人没有安卓APP开发经验&#xff0c;所以决定将写个服务号的公众号&#xff0c;集外出打卡&#xff0c;打卡查询等功能; 一&#xff0c;开发前测试帐号申请 以下是官方给出的建议&#xff0c;大家可以多参考参考 1&#xf…

如何使用开发者服务器运维微信公众号

文章目录 1 如何把微信公众号授权给开发者服务器2 如何使用代码把开发者服务器与微信服务器进行关联 很多人都有自己的服务器&#xff0c;特别是对于大学生而言&#xff0c;很多服务器公司都对学生有优惠&#xff0c;例如腾讯云只要1元每月&#xff1a;http://blog.csdn.net/ti…

python 微信公众号开发[1] 后台服务器端配置与公众号开发配置

更新时间&#xff1a;2020年3月7日 微信公众号开发的硬件必备条件&#xff1a;&#xff08;1&#xff09;申请一个公众号 &#xff08;2&#xff09;有公网ip的服务器&#xff08;最好是阿里云&#xff0c;腾讯云等的云服务器&#xff09;&#xff08;3&#xff09;解析到&…

微信小程序微信服务号开发微信公众平台开发前端开发框架

1、Frozen UI 手Q出品&#xff0c;组件更丰富&#xff0c;视觉舒适度也不错&#xff0c;适合我这种前端较生疏&#xff0c;需要开箱即用的程序员。 推荐度&#xff1a;5星 演示地址&#xff1a;FrozenUI Demo 2、WeUI 官方出品&#xff0c;情怀满满&#xff0c;但是组件不够用。…

微信公众号开发流程指南

微信公众号开发流程指南 一.物料准备二.开发须知0.接入验证1.消息类型概括(MsgType)2.申请服务号的原因为账号类型所支持功能不同,职能不同3.当开启服务器配置后,公众号的原始菜单将会失效, 会以自定义菜单为准4.如下文介绍Api中出现Token字样, 则统一为通过AppId和AppSecret获…

微信公众号开发

文章目录 一、微信公众号简介二、注册/登录微信公众号三、功能介绍1、编辑模式&#xff08;个人开发者&#xff0c;无需服务器&#xff09;2、开发模式 四、实战开发1、配置服务器2、模块化 五、获取 access_token1、access_token 是什么&#xff1f;2、获取 access_token 功能…

公众号开发配置,服务号对接第三方服务器配置方法

很多公司企业在注册服务号后&#xff0c;通常需要对接第三方的开发平台&#xff0c;进行一些功能的完善补充。 市面上第三方平台非常之多&#xff0c;但是因微信官方限制&#xff0c;所需要的配置总结下来就这么几点&#xff0c;下面给大家讲解下配置的要点&#xff1a; 一、…

公众号开发

1.本地调试:打开微信开发者工具——》微信开发者工具选项——》更换开发模式——》公众号网页调试 2.使用 http://127.0.0.1:8080 本地调试会 the permission value is offline verifying 解决方法:先在输入框输入 http://demo.open.weixin.qq.com/jssdk&#xff0c;再输入你之…

微信公众号开发(一)服务器及接口的配置

微信公众号开发&#xff08;一&#xff09;服务器及接口的配置 关于微信公众号中的订阅号和服务的区别这里不多加讨论&#xff0c;网上有很多资源可以搜到&#xff0c;这里直接进入正题&#xff0c;如果是个人开发者&#xff0c;这里建议使用测试号进行开发学习&#xff0c;测…

微信公众号开发相关流程及功能介绍

1. 开发前准备 1.1 注册微信公众平台账号 进入的网址&#xff1a;https://mp.weixin.qq.com。 测试号&#xff08;网址&#xff1a;https://mp.weixin.qq.com/debug/cgi-bin/sandbox?tsandbox/login&#xff09;&#xff0c;用户在开发之前可以通过测试号快速测试开发&#…

微信小程序开发 公众号/服务号 方法

微信小程序嵌入公众号/服务号方法 1.公众号开发方法 先去微信公众平台开启公众号选项 然后在页面中加入组件 <official-account bindload"bindload" class"official-account"></official-account> 组件细节 可查 官网文档 文档地址 本地调试…

微信服务号开发说明:测试号申请、自定义菜单添加第三方连接

微信服务号开发方式多种多样&#xff0c;本文对接触过的一种微信服务号开发模式进行记录&#xff0c;作为今后参考的依据。 1.开发模式 本文描述的开发模式如下&#xff1a; 客户或者市场部等申请服务号。开发部开发并发布移动端服务的测试版本至互联网上。使用测试号进行微…

微信公众平台-微信服务号开发

文章目录 背景:一、微信各个平台介绍二、公众平台介绍三、开发前准备四、服务器配置五、服务器验证六、消息接收七、客服消息八、获取素材九、相关工具十、最终效果展示总结 背景: 近期接到了涉及微信开放平台和微信公众平台相关的开发需求&#xff0c;开发过程中踩了许多坑&a…

启动Tomcat闪退的问题

之前启动一直没有问题&#xff0c;今天配置conf/server.xml文件&#xff0c;把我要打开的文件更改了一下就发现它要闪退了&#xff01;然后我去百度搜它闪退的原因&#xff0c;都说是环境变量没有配置好&#xff0c;可是我的是好的啊 然后其实&#xff01;&#xff01;&#x…

windows本地启动tomcat闪退

da开cmd&#xff0c; 进入tomcat所在目录的bin目录&#xff1a; 执行startup.bat 查看设置的环境变量是否正确&#xff1b;如果不正确则在windows中设置正确的相关环境变量即可&#xff1b; 转载于:https://www.cnblogs.com/YuyuanNo1/p/10341340.html