JFinal Weixin 正在参加 2020 年度 OSC 中国开源项目评选,请投票支持!
JFinal Weixin 在 2020 年度 OSC 中国开源项目评选 中已获得 {{ projectVoteCount }} 票,请投票支持!
投票让它出道
已投票
JFinal Weixin 获得 2020 年度 OSC 中国开源项目评选「最佳人气项目」 !
JFinal Weixin 获得 2020 年度 OSC 中国开源项目评选「最佳人气项目」「最积极运营项目」 !
JFinal Weixin 获得 2020 年度 OSC 中国开源项目评选「最积极运营项目」 !

软件简介

JFinal Weixin 是基于 JFinal 的微信公众号极速 SDK,只需参考 Demo 代码即可进行极速开发。自 JFinal Weixin 1.2 版本开始已添加对多公众号支持

0、Maven 坐标

<dependency>
    <groupId>com.jfinal</groupId>
    <artifactId>jfinal-weixin</artifactId>
    <version>3.2</version>
</dependency>

1、WeixinConfig

public class WeixinConfig extends JFinalConfig {
  public void configConstant(Constants me) {
    loadPropertyFile("a_little_config.txt");
    me.setDevMode(getPropertyToBoolean("devMode", false));
		
    // ApiConfigKit 设为开发模式可以在开发阶段输出请求交互的 xml 与 json 数据
    ApiConfigKit.setDevMode(me.getDevMode());
  }
	
  public void configRoute(Routes me) {
    // 从 jfinal 3.6 版本开始,需设置 setMappingSuperClass(true) 才能支持 jfinal weixin
    me.setMappingSuperClass(true);
    me.add("/msg", WeixinMsgController.class);
    me.add("/api", WeixinApiController.class, "/api");
  }
	
  public void configPlugin(Plugins me) {}
  public void configInterceptor(Interceptors me) {}
  public void configHandler(Handlers me) {}
}

以上通过 configRoute 方法配置了访问路由 "/msg" 与 "/api"。项目启动后,在微信服以务器上配置 url:http://域名/msg

重要:后续新版本的配置方式有所改进,详情见官方文档:https://gitee.com/jfinal/jfinal-weixin/wikis/JFinal-weixin%E4%B8%AD%E7%9A%84WeixinConfig%E9%85%8D%E7%BD%AE

2、WeixinMsgController

public class WeixinMsgController extends MsgController {
  protected void processInTextMsg(InTextMsg inTextMsg) {
   String msgContent = inTextMsg.getContent().trim();
   // 帮助提示
   if ("help".equalsIgnoreCase(msgContent)) {
     OutTextMsg outMsg = new OutTextMsg(inTextMsg);
     outMsg.setContent(helpStr);
     render(outMsg);
   }	
   else if ("美女".equalsIgnoreCase(msgContent)) {
     OutNewsMsg outMsg = new OutNewsMsg(inTextMsg);
     outMsg.addNews("秀色可餐", "JFinal Weixin 极速开发就是这么爽,有木有 ^_^", "http://mmbiz.qpic.cn/mmbiz/zz3Q6WSrzq2GJLC60ECD7rE7n1cvKWRNFvOyib4KGdic3N5APUWf4ia3LLPxJrtyIYRx93aPNkDtib3ADvdaBXmZJg/0", "http://mp.weixin.qq.com/s?__biz=MjM5ODAwOTU3Mg==&mid=200987822&idx=1&sn=7eb2918275fb0fa7b520768854fb7b80#rd");
     render(outMsg);
   }
   // 其它文本消息直接返回原值 + 帮助提示
   else {
     OutTextMsg outMsg = new OutTextMsg(inTextMsg);
     outMsg.setContent("\t文本消息已成功接收,内容为: " + inTextMsg.getContent() + "\n\n" + helpStr);
     render(outMsg);
   }
  }

  protected void processInImageMsg(InImageMsg inImageMsg) {
    OutImageMsg outMsg = new OutImageMsg(inImageMsg);
    // 将刚发过来的图片再发回去
    outMsg.setMediaId(inImageMsg.getMediaId());
    render(outMsg);
  }
  

  /**
   * 如果要支持多公众账号,只需要在此返回各个公众号对应的  ApiConfig 对象即可
   * 可以通过在请求 url 中挂参数来动态从数据库中获取 ApiConfig 属性值
   *
   * 注意:后续新版本改进了配置方式,下面的配置不再需要,详情见下面的官方文档:
   *      https://gitee.com/jfinal/jfinal-weixin/wikis/Home
   */
  public ApiConfig getApiConfig() {
    return new ApiConfig(...);
  }

  // 其她自动接收并解析消息的便利方法省略
}

WeixinMsgController 通过继承自 MsgController 便拥有了接收消息和发送消息的便利方法。

3、WeixinApiController

public class WeixinApiController extends ApiController {
  public void index() {
    render("/api/index.html");
  }
	
  /**
  * 获取公众号菜单
  */
  public void getMenu() {
    ApiResult apiResult = MenuApi.getMenu();
    if (apiResult.isSucceed())
      renderText(apiResult.getJson());
    else
      renderText(apiResult.getErrorMsg());
    }
	
    /**
    * 获取公众号关注用户
    */
    public void getFollowers() {
      ApiResult apiResult = UserApi.getFollows();
      renderText(apiResult.getJson());
    }

  /**
   * 如果要支持多公众账号,只需要在此返回各个公众号对应的  ApiConfig 对象即可
   * 可以通过在请求 url 中挂参数来动态从数据库中获取 ApiConfig 属性值
   * 
   * 注意:后续新版本改进了配置方式,下面的配置不再需要,详情见下面的官方文档:
   *      https://gitee.com/jfinal/jfinal-weixin/wikis/Home
   */
  public ApiConfig getApiConfig() {
    return new ApiConfig(...);
  }
}

通过调用 MenuApi、UserApi 等 Api 的相关方法即可获取封装成 ApiResult 对象的结果,使用 render 系列方法即可快捷输出结果。

4、更多支持

JFinal Weixin 官方文档: https://gitee.com/jfinal/jfinal-weixin/wikis/Home

关注官方微信号马上体验 demo 功能:

展开阅读全文

代码

的 Gitee 指数为
超过 的项目

评论 (54)

加载中
JFinal软件作者

引用来自“科技范麒麟才子”的评论

支持 开发小程序吗?
支持微信小程序开发,挺好用
2019/01/31 15:44
回复
举报
maven打包报错ase加密失败怎么办
2018/09/22 16:16
回复
举报
支持 开发小程序吗?
2018/09/06 14:20
回复
举报
杜福忠西安识时知务教育科技有限公司
打分: 力荐
该评论暂时无法显示,详情咨询 QQ 群:912889742
该评论暂时无法显示,详情咨询 QQ 群:912889742
打分: 力荐
jfinal好几个项目是否会导致投票分散啊,但这个的确很好用
2017/11/28 19:58
回复
举报
已经投票
2017/11/28 11:38
回复
举报
打分: 力荐
该评论暂时无法显示,详情咨询 QQ 群:912889742
该评论暂时无法显示,详情咨询 QQ 群:912889742
该评论暂时无法显示,详情咨询 QQ 群:912889742
更多评论
没有更多内容
加载失败,请刷新页面
点击加载更多
加载中
下一页
发表了博客
2014/11/22 02:09

Jfinal_weixin demo的使用分析

如何开发微信,这个东西大家可以去参考tencent的那个微信开发文档,今天主要讲的都是Jfinal_weixin这个东西,也就是官网的那个demo。首先大家可以去官网上去找那个微信的demo。如果不知道官网地址,去群里问吧,那帮“皮划艇”不把你整个天翻地覆的,他是不会放过你们的!!! 好了进入正文: 当我们的demo已经下载完毕以后,并且已经成功的导入到了我们的IDE之后,我们就可以运行起来了。很多人可能和我一样,就是在运行的过程...

49
36
2015/04/11 15:04

JFinal之JFinal学习日记

环境说明: JFinal版本:jfinal-1.9.jar Maven:apache-maven-3.1.1 Tomcat:apache-tomcat-6.0.41(有时也会用Jetty) (不定期更新) (2015/04/10-javagoboy) 1、报错 Exception in thread "main" java.lang.NoClassDefFoundError: org/eclipse/jetty/webapp/WebAppContextat com.jfinal.server.JettyServer.doStart(JettyServer.java:87) at com.jfinal.server.JettyServer.start(JettyServer.java:64) at com.jfi...

2
1
发表了博客
2015/05/14 18:03

jfinal_weixin_1.2版本本地调试

之前使用的都是jfianl_weixin_1.1版本,在本地调试的时候只需要注释掉@Before(WeixinInterceptor.class)拦截器就可以了。ps:(该方法一开始是看@天蓬小猪 的博客http://my.oschina.net/u/257950/blog/347392) 。今天需要开发新的微信项目,发现sdk已经更新到1.2版本了,于是熟练的注释掉了@Before(MsgInterceptor.class)这一行,然后运行微信开发调试小工具后就报了一个错误 java.lang.IllegalStateException: 需要事先使用 ...

5
4
发表了博客
2020/10/03 10:05

jfinal(1)—jfinal-undertow 下开发 jfinal项目

1、创建标准的 maven web项目 没装maven和没创建maven web项目的可以看这三篇! maven安装 Eclipse和maven工具的集成 Eclipse使用maven创建web项目 2、添加 jfinal-undertow 与 jfinal 依赖 <dependency> <groupId>com.jfinal</groupId> <artifactId>jfinal-undertow</artifactId> <version>2.1</version> </dependency> <dependency> <groupId>com.jfinal</groupId> <artifactId>jfinal</artifactId> ...

0
0
发表了博客
2015/11/20 22:02

微信开发之jfinal-weixin项目以jar包运行

参考文章Jfinal极速开发微信系列教程(一)--------------Jfinal_weixin demo的使用分析。 将http://git.oschina.net/jfinal/jfinal-weixin源码下下来,发现竟然发现以jar包的形式和war的形式都不能够正常让WeixinConfigDemo运行起来。 进过跟着发现是PathKit的问题。在DetectWebrootpath的时候总会出现空指针错误。 经过分析对jfinal2.0源码进行了部分修改: public static String getRootClassPath() {     if (rootClassP...

0
1
没有更多内容
加载失败,请刷新页面
点击加载更多
加载中
下一页
发表于开发技能专区
2019/06/27 10:27

jfinal-weixin 项目我打包成功,放入Tomcat运行,访问不到。怎么回事?

1
0
发表了问答
2016/04/20 16:35

jfinal_weixin开发问题

@JFinal 你好,想跟你请教个问题: jfinal_weixin开发怎么在启动之后,访问http://localhost/msg报500错误,本人是新手,希望能得到你的帮助! ------------------------------------------------------------------------------------------------ 接收消息: [Fatal Error] :1:1: 文件提前结束。 四月 20, 2016 3:21:56 下午 com.jfinal.core.ActionHandler error SEVERE: /msg java.lang.RuntimeException: org.xml.sax.SAXPa...

4
0
2019/02/26 17:34

jfinal-weixin 启动报错-找不到或无法加载主类 com.jfinal.weixin.demo.WeixinConfig

今天想学习一下jfinal-weixin框架,下载后启动发现报错,本人的开发工具是IDEA 2018,具体错误为: 错误: 找不到或无法加载主类 com.jfinal.weixin.demo.WeixinConfig 如下图。 尝试了创建一个新类User再运行,却又是正常的。 此时如果让User类继承JfinalConfig再运行,又会报错。 不知道为什么会这样。请问有谁遇到这个问题吗?

1
0
发表于开发技能专区
2019/01/10 15:02

jfinal使用druidPlugin插件,绑定表,实体中@TableBind注入,使用dao,find/findFrist查询报空指针,该怎么解决呢?

1.configPlugin DruidPlugin druidPlugin = new DruidPlugin(getProperty("jdbcUrl"), getProperty("user"), getProperty("password")); druidPlugin.setFilters("stat,log4j"); me.add(druidPlugin); me.add(new EhCachePlugin()); // 配置ActiveRecord插件 AutoTableBindPlugin arp = new AutoTableBindPlugin(druidPlugin,TableNameStyle.LOWER);//table是实体的小写 ...

1
0
发表了问答
2016/01/16 18:20

JFinal Weixin怎么添加自定义菜单?

添加了出不来啊,在哪里调用那个接口 /** * 查询菜单 */ MenuApi.getMenu(); /** * 创建菜单 */ MenuApi.createMenu(String jsonStr); 看网上写的下面这样不好用啊 me.add("/msg", WeixinMsgController.class,"/msg"); me.add("/api", WeixinApiController.class, "/api"); me.add("/menu",MenuController.class);...

5
0
发表了问答
2015/01/30 19:18

JFinal Weixin怎么创建自定义菜单啊,没看懂

@JFinal 你好,想跟你请教个问题:JFinal Weixin怎么创建自定义菜单啊,没看懂

4
3
2018/09/23 20:06

Jfinal Weixin调用接口报错

在处理菜单点击事件的方法里 WeixinMsgController.processInMenuEvent ,调用CustomServiceApi.sendMpNews,发送图文消息报下面的错误,信息能正常接收到,什么原因   SEVERE: /jwx/msg?signature=d8e707c605aa05633ae508908527749f2e65e180×tamp=1537689035&nonce=1093934862&openid=o6fbwt0kWHoj4qYaq8I8YsP5ACI8 java.lang.RuntimeException: File not found : /var/www/ryj/tomcat7/webapps/ROOT/jwx/msg/index.html ...

3
0
发表了问答
2015/07/07 16:39

在微信公众号开发中,当完成某个任务后如何推送一条消息,让用户知晓?

在微信公众号开发中,当完成某个任务后如何在聊天界面推送一条消息,让用户知晓?并在消息中嵌入某个h5页面的链接。新手求指点。。。。

3
1
发表了问答
2014/12/18 00:36

【JFinal-Weixin】自定义菜单问题

JFinal 微信所处理的消息类型是不是还不包括以下几种: scancode_push:扫码推事件 scancode_waitmsg:扫码推事件且弹出“消息接收中”提示框 pic_sysphoto:弹出系统拍照发图 pic_photo_or_album:弹出拍照或者相册发图 pic_weixin:弹出微信相册发图器 location_select:弹出地理位置选择器 如果需要扩展以上几种事件类型的话需要在InMsgParaser 类中进行扩展?...

5
0
发表了问答
2015/09/28 10:23

jfinal-weixin获取OPENID问题

@JFINAL 波总您好,想请教你一个问题,我参考jfinal-weixin里面的WeixinMsgController的MsgController的MsgInterceptor写了个拦截器,主要是用来判断是否能获取到参数code的,如果没有这个参数,我就调用微信那边的授权接口,现在code是能获取得到,但是用两个微信号访问时,获取OPENID时都获取了第一个微信号访问的OPENID,就是只能获取第一个微信号的OPENID,请问这个是什么情况呢? 下面是拦截器代码 public class BindInter...

3
0
发表了问答
2016/08/18 11:19

微信退款抛javax.crypto.BadPaddingException: Given final block not properly padded

@JFinal 你好,想跟你请教个问题: 使用退款refund API时, 报这个错误,证书是从微信上下载的。 Caused by: java.io.IOException: failed to decrypt safe contents entry: javax.crypto.BadPaddingException: Given final block not properly padded at sun.security.pkcs12.PKCS12KeyStore.engineLoad(PKCS12KeyStore.java:1317) at java.security.KeyStore.load(KeyStore.java:1226) at com.jfinal.weixin.sdk.utils.HttpUt...

10
0
发表了问答
2016/02/02 21:26

JFinal weixin是否还没支持企业号?近期有支持企业号的开发计划吗?

JFinal weixin是否还没支持企业号?近期有支持企业号的开发计划吗? 谢谢!

6
1
发表了问答
2017/02/28 23:40

有没有不用官方API开发微信的朋友? 直接用http模拟登录的朋友?

需求:因为客服信息接口需要认证后才有权限调用,而认证又需要300大洋。我只需要普通公众号加客服信息接口,因为有时候用户发了命令后,后台处理业务的时候5秒内处理不完,可能会30秒才有结果。 场景:免费的普通个人订阅号可以直接登录网页版后,和48小时内有互动的人主动发送信息,并且每天可以群发一条信息。然后微信并没有开放API,所以我今天做了程序模拟微信的http网页登录。 问题:程序模拟最后一步的时候 https://mp.weixi...

10
1
发表了问答
2015/03/03 20:57

jfinal_weixin 配置测试用号总是显示配置失败,感觉后台打印结果是正常的

@JFinal 你好,想跟你请教个问题:jfinal_weixin 配置测试用号总是显示配置失败,后台打印结果,求告知

9
0
发表了问答
2017/01/12 10:04

服务器tomcat重启后,微信网页反应慢的问题

我们做了一个网页,pc可以登,然后微信公众号有个链接也可以登。但是现在有个问题,每次Linux服务器tomcat重启过后,直接用微信登录网页的话 数据一直不显示,但是呢,先登录pc端,再登录微信,他就会正常显示,这是什么原因呢?

1
0
发表了问答
2015/04/22 17:01

点击自定义菜单中二级菜单时怎么获取微信用户的信息?

用jFinal weixin demo 项目,用微信公众平台测试号,创建自定义菜单后,点击二级菜单时如何获取微信用户信息? 二级菜单跳转的路径如图:

10
1
发表了问答
2016/11/20 17:57

jfinal-weixin写图文消息

我想问一下jfinal-weixin写一个图文消息,就像官方自带的那种,该写哪个类中,怎么写啊?

2
0
发表了问答
2015/01/22 15:08

JFinal Weixin Maven 生成一直出错

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-gpg-plugin:1.1:sign (sign-artifacts) on project jfinal-weixin: Cannot obtain passphrase in batch mode -> [Help 1] [ERROR] [ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch. [ERROR] Re-run Maven using the -X switch to enable full debug logging. [ERROR] [ERROR] For more information about the errors and ...

3
1
发表了问答
2016/11/09 13:46

出入JFinal,该如何爬坑

@JFinal 你好,想跟你请教个问题:osc上的那个jfinal-weixin 的sdk,我clone了下来,里面有个 AccessTokenApiTest 我每次执行下面main方法的时候,总是会报错: public static void main(String[] args) throws IOException { init(); useRedis(); test(); } 查了好久都没有解决的办法。...

5
0
没有更多内容
加载失败,请刷新页面
点击加载更多
加载中
下一页
54 评论
741 收藏
分享
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部