内容简介:使用最原始的方式做公众号开发是效率很低的。http 请求,报文解析转换,access_token 的维护等都要自已写一遍好在有 jfinal-weixin 的存在,大大的简化了开发,jfinal-weixin 是 jfinal 的一个插件,不过貌似也可以集成的其他的框架里jfinal 就不说了,很好用的一个框架,下面主要是 jfinal-weixin 的使用
使用最原始的方式做公众号开发是效率很低的。http 请求,报文解析转换,access_token 的维护等都要自已写一遍
好在有 jfinal-weixin 的存在,大大的简化了开发,jfinal-weixin 是 jfinal 的一个插件,不过貌似也可以集成的其他的框架里
jfinal 就不说了,很好用的一个框架,下面主要是 jfinal-weixin 的使用
项目最小依赖
-
fastjson-1.2.31.jar
-
jfinal-3.4-bin-with-src
-
jfinal-weixin-2.1.jar
AppConfig
web.xml 的配置,指定 AppConfig 的位置
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1"> <display-name>wx</display-name> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <filter> <filter-name>jfinal</filter-name> <filter-class>com.jfinal.core.JFinalFilter</filter-class> <init-param> <param-name>configClass</param-name> <param-value>net.tmaize.wx.AppConfig</param-value> </init-param> </filter> <filter-mapping> <filter-name>jfinal</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> </web-app>
config.txt
token = ********** appId = ********** appSecret = ********** # 开发 onlineWebRoot = /usr/local/tomcat-7.0.90/webapps/wx onlineTokenUrl = http://wx.tmaize.net/api/wx/api/getToken
AppConfig.java
public class AppConfig extends JFinalConfig { @Override public void configConstant(Constants me) { PropKit.use("config.txt"); me.setViewType(ViewType.JFINAL_TEMPLATE); boolean isOnline = isOnlineEnv(); // 打印请求信息 me.setDevMode(isOnline); // 打印微信API请求交互的 xml与json数据 ApiConfigKit.setDevMode(isOnline); } @Override public void configRoute(Routes me) { me.add("/", IndexController.class); // 微信收发消息及服务器验证地址 me.add("/api/wx/msg", WeixinMsgController.class); me.add("/api/wx/api", WeixinApiController.class); } @Override public void afterJFinalStart() { super.afterJFinalStart(); ApiConfig ac = new ApiConfig(); // 配置微信 API 相关参数 ac.setToken(PropKit.get("token")); ac.setAppId(PropKit.get("appId")); ac.setAppSecret(PropKit.get("appSecret")); // 明文模式,密文要setEncodingAesKey ac.setEncryptMessage(PropKit.getBoolean("encryptMessage", false)); // 多个公众号时,重复调用ApiConfigKit.putApiConfig(ac)依次添加即可,第一个添加的是默认 ApiConfigKit.putApiConfig(ac); // 开发时使用线上AccessToken if (!isOnlineEnv()) { LocalTestTokenCache localTestTokenCache = new LocalTestTokenCache(PropKit.get("onlineTokenUrl")); ApiConfigKit.setAccessTokenCache(localTestTokenCache); } } /** * 环境判断 * @return */ public boolean isOnlineEnv() { return PropKit.get("onlineWebRoot").equals(PathKit.getWebRootPath()); } }
获取 access_token
获取 access_token 就是调用一个接口那简单,上面配置了一个 URL 供开发环境获取线上的 access_token,看下里面是怎么获取的就知道了
WeixinApiController.java
package net.tmaize.wx.controller; import com.jfinal.weixin.sdk.api.AccessToken; import com.jfinal.weixin.sdk.api.AccessTokenApi; import com.jfinal.weixin.sdk.jfinal.ApiController; public class WeixinApiController extends ApiController { /** * 为开发环境提供AccessToken */ public void getToken() { // 一行代码搞定 AccessToken accessToken = AccessTokenApi.getAccessToken(); renderJson(accessToken.getJson()); } }
服务器验证及收发消息
只需要继承 MsgControllerAdapter 就行了,该地址就具备了服务器验证的能力和收发信息的能力
当然了发信息的逻辑要自己实现
/** * 处理接收到的文本消息 * @param inTextMsg 处理接收到的文本消息 */ @Override protected void processInTextMsg(InTextMsg inTextMsg) { OutTextMsg outMsg = new OutTextMsg(inTextMsg); switch (inTextMsg.getContent()) { case "个人信息": // 未认证订阅号,没有这个权限 ApiResult userInfo = UserApi.getUserInfo(inTextMsg.getFromUserName()); outMsg.setContent(userInfo.getJson()); break; case "token": outMsg.setContent(AccessTokenApi.getAccessTokenStr()); break; default: outMsg.setContent(inTextMsg.getContent()); break; } render(outMsg); }
调试
有时候需要本地调用微信接口来调试,但是又不想启动整个 web 项目,也是有办法的
/** * 测试微信API * @author tmaize * */ public class WXTest { public static void init() { PropKit.use("config.txt"); ApiConfig ac = new ApiConfig(); ac.setToken(PropKit.get("token")); ac.setAppId(PropKit.get("appId")); ac.setAppSecret(PropKit.get("appSecret")); ac.setEncryptMessage(PropKit.getBoolean("encryptMessage", false)); ApiConfigKit.putApiConfig(ac); if (!PropKit.get("onlineWebRoot").equals(PathKit.getWebRootPath())) { LocalTestTokenCache localTestTokenCache = new LocalTestTokenCache(PropKit.get("onlineTokenUrl")); ApiConfigKit.setAccessTokenCache(localTestTokenCache); } } public static void main(String[] args) throws Exception { init(); System.out.println(AccessTokenApi.getAccessToken().getJson()); } }
参考
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- ABP开发框架前后端开发系列---(14)基于Winform的ABP快速开发框架
- Java开发人员的Flex开发
- Java开发人员的Flex开发
- 行为驱动开发让开发做正确事
- 让开发者专注于应用开发,OpenCenter 3.0 开发者预览版发布
- 让开发者专注于应用开发,OpenCenter 3.0 开发者预览版发布
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
高效前端:Web高效编程与优化实践
李银城 著 / 机械工业出版社 / 2018-3-15 / 89.00元
这不是一本单纯讲解前端编程技巧的书,而是一本注重思想提升和内功修炼的书。 全书以问题为导向,精选了前端开发中的34个疑难问题,从分析问题的原因入手,逐步给出解决方案,并分析各种方案的优劣,最后针对每个问题总结出高效编程的最佳实践和各种性能优化的方法。 全书共7章,内容从逻辑上大致可以分为两大类: 第一类,偏向实践,围绕HTML、CSS、JavaScript等传统前端技术,以及PW......一起来看看 《高效前端:Web高效编程与优化实践》 这本书的介绍吧!