当前位置: 首页 > 工具软件 > JFinal Weixin > 使用案例 >

JFinal Weixin 极速开发 SDK

孙德宇
2023-12-01

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

1、WeixinConfig配置

详情请见:JFinal weixin中的WeixinConfig配置

2、WeixinMsgController

  1. public class WeixinMsgController extends MsgController {
  2.   protected void processInTextMsg(InTextMsg inTextMsg) {
  3.     String msgContent = inTextMsg.getContent().trim();
  4.     // 帮助提示
  5.     if ("help".equalsIgnoreCase(msgContent)) {
  6.       OutTextMsg outMsg = new OutTextMsg(inTextMsg);
  7.       outMsg.setContent(helpStr);
  8.       render(outMsg);
  9.     }
  10.     // 图文消息测试
  11.     else if ("news".equalsIgnoreCase(msgContent)) {
  12.       OutNewsMsg outMsg = new OutNewsMsg(inTextMsg);
  13.       outMsg.addNews("图文消息title", "图文消息description", "图文消息片 url", "图文消息 url");
  14.       render(outMsg);
  15.     }
  16.     // 音乐消息测试
  17.     else if ("music".equalsIgnoreCase(msgContent)) {
  18.       OutMusicMsg outMsg = new OutMusicMsg(inTextMsg);
  19.       outMsg.setTitle("Day By Day");
  20.       outMsg.setDescription("建议在 WIFI 环境下流畅欣赏此音乐");
  21.       outMsg.setMusicUrl("http://www.jfinal.com/DayByDay-T-ara.mp3");
  22.       outMsg.setHqMusicUrl("http://www.jfinal.com/DayByDay-T-ara.mp3");
  23.       outMsg.setFuncFlag(true);
  24.       render(outMsg);
  25.     }
  26.     else if ("美女".equalsIgnoreCase(msgContent)) {
  27.       OutNewsMsg outMsg = new OutNewsMsg(inTextMsg);
  28.       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");
  29.       render(outMsg);
  30.     }
  31.     // 其它文本消息直接返回原值 + 帮助提示
  32.     else {
  33.       OutTextMsg outMsg = new OutTextMsg(inTextMsg);
  34.       outMsg.setContent("\t文本消息已成功接收,内容为: " + inTextMsg.getContent() + "\n\n" + helpStr);
  35.       render(outMsg);
  36.     }
  37.   }
  38.  
  39.   protected void processInImageMsg(InImageMsg inImageMsg) {
  40.     OutImageMsg outMsg = new OutImageMsg(inImageMsg);
  41.     // 将刚发过来的图片再发回去
  42.     outMsg.setMediaId(inImageMsg.getMediaId());
  43.     render(outMsg);
  44.   }
  45.  
  46.   protected void processInVoiceMsg(InVoiceMsg inVoiceMsg) {
  47.     OutVoiceMsg outMsg = new OutVoiceMsg(inVoiceMsg);
  48.     // 将刚发过来的语音再发回去
  49.     outMsg.setMediaId(inVoiceMsg.getMediaId());
  50.     render(outMsg);
  51.   }
  52.  
  53.   protected void processInVideoMsg(InVideoMsg inVideoMsg) {
  54.     /* 腾讯 api 有 bug,无法回复视频消息,暂时回复文本消息代码测试
  55.     OutVideoMsg outMsg = new OutVideoMsg(inVideoMsg);
  56.     outMsg.setTitle("OutVideoMsg 发送");
  57.     outMsg.setDescription("刚刚发来的视频再发回去");
  58.     // 将刚发过来的视频再发回去,经测试证明是腾讯官方的 api 有 bug,待 api bug 却除后再试
  59.     outMsg.setMediaId(inVideoMsg.getMediaId());
  60.     render(outMsg);
  61.     */
  62.     OutTextMsg outMsg = new OutTextMsg(inVideoMsg);
  63.     outMsg.setContent("\t视频消息已成功接收,该视频的 mediaId 为: " + inVideoMsg.getMediaId());
  64.     render(outMsg);
  65.   }
  66.  
  67.   protected void processInLocationMsg(InLocationMsg inLocationMsg) {
  68.     OutTextMsg outMsg = new OutTextMsg(inLocationMsg);
  69.     outMsg.setContent("已收到地理位置消息:" +
  70.       "\nlocation_X = " + inLocationMsg.getLocation_X() +
  71.       "\nlocation_Y = " + inLocationMsg.getLocation_Y() + 
  72.       "\nscale = " + inLocationMsg.getScale() +
  73.       "\nlabel = " + inLocationMsg.getLabel());
  74.     render(outMsg);
  75.   }
  76.  
  77.   protected void processInLinkMsg(InLinkMsg inLinkMsg) {
  78.     OutNewsMsg outMsg = new OutNewsMsg(inLinkMsg);
  79.     outMsg.addNews("链接消息已成功接收", "链接使用图文消息的方式发回给你,还可以使用文本方式发回。点击图文消息可跳转到链接地址页面,是不是很好玩 :)" , "http://mmbiz.qpic.cn/mmbiz/zz3Q6WSrzq1ibBkhSA1BibMuMxLuHIvUfiaGsK7CC4kIzeh178IYSHbYQ5eg9tVxgEcbegAu22Qhwgl5IhZFWWXUw/0", inLinkMsg.getUrl());
  80.     render(outMsg);
  81.   }
  82.  
  83.   protected void processInFollowEvent(InFollowEvent inFollowEvent) {
  84.     OutTextMsg outMsg = new OutTextMsg(inFollowEvent);
  85.     outMsg.setContent("感谢关注 JFinal Weixin 极速开发,为您节约更多时间,去陪恋人、家人和朋友 :) \n\n\n " + helpStr);
  86.     // 如果为取消关注事件,将无法接收到传回的信息
  87.     render(outMsg);
  88.   }
  89.  
  90.   protected void processInQrCodeEvent(InQrCodeEvent inQrCodeEvent) {
  91.     OutTextMsg outMsg = new OutTextMsg(inQrCodeEvent);
  92.     outMsg.setContent("processInQrCodeEvent() 方法测试成功");
  93.     render(outMsg);
  94.   }
  95.  
  96.   protected void processInLocationEvent(InLocationEvent inLocationEvent) {
  97.     OutTextMsg outMsg = new OutTextMsg(inLocationEvent);
  98.     outMsg.setContent("processInLocationEvent() 方法测试成功");
  99.     render(outMsg);
  100.   }
  101.  
  102.   protected void processInMenuEvent(InMenuEvent inMenuEvent) {
  103.     OutTextMsg outMsg = new OutTextMsg(inMenuEvent);
  104.     outMsg.setContent("processInMenuEvent() 方法测试成功");
  105.     render(outMsg);
  106.   }
  107.  
  108.   protected void processInSpeechRecognitionResults(InSpeechRecognitionResults inSpeechRecognitionResults) {
  109.     OutTextMsg outMsg = new OutTextMsg(inSpeechRecognitionResults);
  110.     outMsg.setContent("processInSpeechRecognitionResults() 方法测试成功");
  111.     render(outMsg);
  112.   }
  113.  
  114.   /**
  115.    * 如果要支持多公众账号,只需要在此返回各个公众号对应的  ApiConfig 对象即可
  116.    * 可以通过在请求 url 中挂参数来动态从数据库中获取 ApiConfig 属性值
  117.    */
  118.   public ApiConfig getApiConfig() {
  119.     ApiConfig ac = new ApiConfig();
  120.  
  121.     // 配置微信 API 相关常量
  122.     ac.setToken(PropKit.get("token"));
  123.     ac.setAppId(PropKit.get("appId"));
  124.     ac.setAppSecret(PropKit.get("appSecret"));
  125.  
  126.     /**
  127.      *  是否对消息进行加密,对应于微信平台的消息加解密方式:
  128.      *  1:true进行加密且必须配置 encodingAesKey
  129.      *  2:false采用明文模式,同时也支持混合模式
  130.      */
  131.     ac.setEncryptMessage(PropKit.getBoolean("encryptMessage", false));
  132.     ac.setEncodingAesKey(PropKit.get("encodingAesKey", "setting it in config file"));
  133.     return ac;
  134.   }
  135. }

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

3、WeixinApiController

  1. public class WeixinApiController extends ApiController {
  2.   public void index() {
  3.     render("/api/index.html");
  4.   }
  5.  
  6.   /**
  7.    * 获取公众号菜单
  8.    */
  9.   public void getMenu() {
  10.     ApiResult apiResult = MenuApi.getMenu();
  11.     if (apiResult.isSucceed())
  12.       renderText(apiResult.getJson());
  13.     else
  14.       renderText(apiResult.getErrorMsg());
  15.   }
  16.  
  17.   /**
  18.    * 获取公众号关注用户
  19.    */
  20.   public void getFollowers() {
  21.     ApiResult apiResult = UserApi.getFollows();
  22.     renderText(apiResult.getJson());
  23.   }
  24.  
  25.   /**
  26.    * 如果要支持多公众账号,只需要在此返回各个公众号对应的  ApiConfig 对象即可
  27.    * 可以通过在请求 url 中挂参数来动态从数据库中获取 ApiConfig 属性值
  28.    */
  29.   public ApiConfig getApiConfig() {
  30.     ApiConfig ac = new ApiConfig();
  31.  
  32.     // 配置微信 API 相关常量
  33.     ac.setToken(PropKit.get("token"));
  34.     ac.setAppId(PropKit.get("appId"));
  35.     ac.setAppSecret(PropKit.get("appSecret"));
  36.  
  37.     /**
  38.      *  是否对消息进行加密,对应于微信平台的消息加解密方式:
  39.      *  1:true进行加密且必须配置 encodingAesKey
  40.      *  2:false采用明文模式,同时也支持混合模式
  41.      */
  42.     ac.setEncryptMessage(PropKit.getBoolean("encryptMessage", false));
  43.     ac.setEncodingAesKey(PropKit.get("encodingAesKey", "setting it in config file"));
  44.     return ac;
  45.   }
  46. }

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

4、非Maven用户得到所有依赖 jar 包两种方法

将项目导入eclipse jee中,使用 export 功能导出 war包,其中的 WEB-INF/lib 下面会自动生成 jar 包 让使用 maven 的朋友使用 mvn package 打出 war包,其中的 WEB-INF/lib 下面会自动生成 jar 包 以上两种方法注意要先将pom.xml中的导出类型设置为 war,添加 war 内容进去即可 依赖jackson或fastjson

5、jar包依赖详细说明

详见请见:JFinal weixin 1.8 Jar依赖

6、WIKI持续更新中

WIKI:http://git.oschina.net/jfinal/jfinal-weixin/wikis/home 欢迎更多同学来帮助完善!

5:最新下载

JFinal weixin 1.8



转自:http://www.jfinal.com/project/2

 类似资料: