简易的微信公众号管理平台使用指南

前言

1、微信功能实现与管理后台目前是独立的。
2、微信功能实现是基于Jfianl-weixin SDK开发的。
3、管理后台使用的Eova开源框架,如果你不喜欢eova框架可以自行处理后台
4、使用时注意公众号接口的权限【公众号接口权限说明】

如果你对微信开发不是很熟悉可以参考我之前写的博客【微信开发专栏】

如果你对微信支付以及支付宝支付感兴趣可以看看我的开源项目

【Android 微信、支付App支付SDK】【IJPay 让支付触手可及,实现微信、支付宝系列支付】

下载项目并导入Eclipse

环境搭建参考资料【搭建maven环境】 【JDK开发环境搭建及环境变量配置】【安装Mysql5.7并修改初始密码】【微信公众号-Maven开源导入IDE】

微信功能实现源码http://git.oschina.net/javen205/weixin_pro
管理后台实现源码dev分支http://git.oschina.net/javen205/weixin_guide

建议使用Eclipse 、MySQL数据库在doc中

搭建环境、启动项目如果出现问题可以在博客中留言

多环境配置

如果clone下来的项目没有做任何修改直接启动项目将会出现以下异常

为什么会出现这个异常呢? 因为项目pom.xml中设置了多环境,而默认启用的是dev(开发环境) 。所以这里需要在src/main/resources中新建一个dev目录并将production下的配置文件复制到dev目录中。如下图

成为开发者模式

参考wx_config表具体字段描述可以看备注,其中rmid是一个唯一的随机数成为开发者模式中会携带此参数来查询公众号的参数。

注意:测试号不支持加密否则会出现NullPointerException,encrypt 需要设置为0此字段默认也是0。

成为开发URL为:http://域名/[项目名称]/msg?rmid=123456

特别说明:

1、测试号不支持加密、不支持加密、不支持加密
2、正式的公众号需要设置ip白名单,不然会出现invalid ip xxxxx,no in whitelist xxxx
3、授权需要配置授权域名(不会设置点击这里)。如果是正式的公众号还需要上传验证文件来验证域名,直接上传到项目的根目录即可(webapp中)

例子:

多账号管理实现原理

成为开发者模式的路由为msgWeiXinMsgController 上的拦截器ConfigInterceptor 主要是通过URL中的rmid查询数据库中公众号的配置并ApiConfigKit.putApiConfig(ApiConfig)中。在接口需要使用的地方就从Map中取。具体代码参考com.jfinal.weixin.sdk.api.ApiConfigKit以及com.javen.weixin.Interceptor.ConfigInterceptor

部分代码如下:

/*** Copyright (c) 2015-2017, Javen Zhou  (javen205@126.com).** Licensed under the Apache License, Version 2.0 (the "License");*/package com.javen.weixin.Interceptor;import com.javen.weixin.common.model.Config;
import com.javen.weixin.service.ConfigService;
import com.jfinal.aop.Interceptor;
import com.jfinal.aop.Invocation;
import com.jfinal.core.Controller;
import com.jfinal.kit.StrKit;/*** @author Javen* 2017年6月11日*/
public class ConfigInterceptor implements Interceptor {static ConfigService srv = ConfigService.me;@Overridepublic void intercept(Invocation inv) {Controller controller = inv.getController();String rmid = controller.getPara("rmid");if (StrKit.isBlank(rmid)) {throw new IllegalArgumentException("rmid 值不能为空"); }Config config = srv.getConfigByRmid(rmid);controller.setSessionAttr("config", config);if (null == config) {throw new IllegalArgumentException("rmid:"+rmid+" 值不能用,请联系管理员"); }srv.getApiConfig(config);inv.invoke();}}

关键字回复

微信公众号交互实现都在WeiXinMsgController中,关键字回复主要实现代码如下:

/*** 接收文本消息事件*/@Overrideprotected void processInTextMsg(InTextMsg inTextMsg) {String msgContent = inTextMsg.getContent().trim();final String openId = inTextMsg.getFromUserName();// String rmid = getPara("rmid");//再通过rmid 查询APPId,这里为了方便直接将其存入sessionfinal Config config = (Config) getSession().getAttribute("config");String appId = config.getAppId();int appType = config.getAppType();logger.info(config.toJson());List<Keyword> keywords = kws.getKeyWord(config.getAppId(), msgContent);logger.info("keywords>" + JsonKit.toJson(keywords));if (null != keywords && keywords.size() > 0) {int size = keywords.size();Keyword keyword = keywords.get(0);//异步发送其他的消息if (size >= 1 && (appType == 1 || appType == 3 || appType == 5)) {for (int i = 1; i < size; i++) {Keyword asyncKeyword = keywords.get(i);Integer async = asyncKeyword.getAsync();if (async == 1) {replyMessage(1, true, appId, openId, asyncKeyword);}}}// 被动回复消息replyMessage(1,false, appId,openId, keyword);}if (msgContent.equals("红包")) {new Thread(new Runnable() {public void run() {logger.info("是发红包的时候了...");RedPackUtil.sendRedPack(config, 1, openId, IpKit.getRealIp(getRequest()));}}).start();renderNull();return;}renderOutTextMsg(msgContent);}

部分说明:
1、从请求中获取rmid (此参数在上文有提到)。
2、再通过rmid查询wx_confg表中配置公众号的相关参数。开源项目中是为了方便直接从session中取了。有人要问何时存入到session的呢? 使用的是拦截器(ConfigInterceptor)上文有提到哦。

3、OK,现在有了appId相关的参数。那么我们就可以通过appId来查wx_keyword表(微信关键字配置表)根据消息的类型作对应的回复即可。
4、20170701支持多消息回复(使用客服接口)

关注回复

在weixin_pro 项目中目前关注回复做了两件事。

1、获取用户信息

2、回复文本、图文、图文以及异步发送红包(20170701支持多消息回复)

关注回复配置表wx_submsg,如果redpack_id 不为空表示需要发红包。type为回复消息的类型,回复消息上面有做说明这里就不介绍了。

获取到用户信息保存在wx_user表中,用户昵称(nick_name)中包含表情怎么处理? 这里使用最简单的处理方法(UrlEncode编码/UrlDecode解码 ),也可以将mysql表字段定义为utf8mb4同时mysql数据库连接字符串去掉编码方式,不再是utf8,主要是支持的字节数不同。

MySQL在5.5.3版本之后增加了这个utf8mb4的编码,mb4就是most bytes 4的意思,专门用来兼容四字节的unicode。其实,utf8mb4是utf8的超集,理论上原来使用utf8,然后将字符集修改为utf8mb4,也会不会对已有的utf8编码读取产生任何问题。当然,为了节省空间,一般情况下使用utf8也就够了。
想要了解的更多,请参照浅谈MySQL中utf8和utf8mb4的区别

自定义菜单

自定义菜单【官方接口】

特别注意:
1、自定义菜单最多包括3个一级菜单,每个一级菜单最多包含5个二级菜单。
2、一级菜单最多4个汉字,二级菜单最多7个汉字,多出来的部分将会以“…”代替。
3、创建自定义菜单后,菜单的刷新策略是,在用户进入公众号会话页或公众号profile页时,如果发现上一次拉取菜单的请求在5分钟以前,就会拉取一下菜单,如果菜单有更新,就会刷新客户端的菜单。测试时可以尝试取消关注公众账号后再次关注,则可以看到创建后的效果。

在weixin_pro 中与菜单相关的有三张表:
1、wx_menutype 菜单类型表
2、wx_custommenu 自定义菜单表
3、wx_matchrulemenu 个性化菜单表

1、在wx_custommenupid为0 表示是主菜单,其他为子菜单。二级菜单的pid为主菜单的idtype_id为菜单类型关联表为wx_menutype ,其值如果为11 表示为主菜单并没有子菜单。

2、个性化菜单wx_matchrulemenu可设置项如下

1、用户标签(开发者的业务需求可以借助用户标签来完成)
2、性别
3、手机操作系统
4、地区(用户在微信客户端设置的地区)
5、语言(用户在微信客户端设置的语言)

wx_matchrulemenu中使用menu_group 关联到wx_custommenu;普通菜单的menu_group为0,其他跟第1点描述一样。

部分截图:

具体实现代可以查看源码

/weixin_pro/src/main/java/com/javen/weixin/controller/CustomMenuController.java

生成菜单的URL为:
http://域名/[项目名称]/menu/create?rmid=123456

添加个性化菜单的URL为:
http://域名/[项目名称]/menu/addConditional?rmid=123456

授权获取用户信息

如果你对授权获取用户信息不熟悉可以参考这篇文章

在weixin_pro 中只是把授权参数提出到了数据库wx_authorize,数据库字段都有备注描述这里就不过多的介绍。

使用授权获取用户信息必要的配置(上传文件验证域名之类的)这里就不多说了可以参考上文。

授权URL:

http://域名/[项目名称]/oauth/toOauth?rmid=123456

回调授权获取用户信息将会保存在wx_user表中并存入session setSessionAttr("wxuser", user); 授权之后页面转发是根据数据库配置转发的。

核心实现代码都在这里

/weixin_pro/src/main/java/com/javen/weixin/controller/WeiXinOauthController.java

JSSDK的使用

微信公众号开发之如何使用

在weixin_pro 中只是先关的参数从数据库中读取而已。具体实现代码/weixin_pro/src/main/java/com/javen/weixin/Interceptor/JSSDKInterceptor.java

页面中使用可以参考/weixin_pro/src/main/webapp/WEB-INF/_view/jssdk.html

简易的微信公众号管理平台使用指南相关推荐

  1. 搭建企业级微信公众号管理平台(二)----WxJava框架快速开发微信公众号

    1.WxJava  微信公众号框架初体验 WxJava  微信公众号框架  https://github.com/Wechat-Group/WxJava //下载xwjava全量的SDK代码 git ...

  2. 搭建企业级微信公众号管理平台(三)----注册码实现与校验,Redis存储

    1.统一接口返回结果集格式 接口应用 /*** 功能说明: 获取微信服务接口*/@ApiOperation(value = "微信应用服务接口")@GetMapping(" ...

  3. 微信公众号官网平台与微信公众号第三方平台的区别

    微信公众号官网平台 普通的微信公众账号只能开启编辑模式,编辑模式缺点: 1)功能有限,无法开发API丶地理位置回复等信息: 2) 文字回复有300字限制,关键字回复上限为200条; 3)关键字回复较多 ...

  4. 微信公众号管理欧宁泰php,EasySwoole搭建高效微信管理后台

    Swoole协程已经发展到了4.0现在已经支持所有PHP函数.可以在生产环境直接使用.Swoole协程是通过减少IO阻塞来提速的一个项技术,统计协程调度减少IO阻塞,让你的程序飞起.微信公众号管理,小 ...

  5. 公众平台模板消息所在行业_如何使用微信公众号第三方平台群发模板消息助手?...

    对于微信公众号群发模板消息助手的实现,公众号后台提供了接口编程实现,微号帮平台提供了模板消息群发功能实现,均可以让微信公众号群发模板消息,模板消息即按固定格式的文本模块消息,没有图文形式,纯固定格式的 ...

  6. Python微信公众号开发平台

    上大学的时候,对微信公众号开发浅尝辄止的玩了一下,感觉还是挺有意思的. //www.jb51.net/article/133677.htm后来服务器到期了,也就搁置了.由于发布web程序,使用PHP很 ...

  7. 微信公众号三方平台开发【代微信公众号接收消息事件并响应】

    今天要讲的是代微信公众号接收消息并进行回复,这里要用到的就是咱们之前在微信公众号三方平台开发[帐号注册.平台创建]里写到的"公众号消息与事件接收URL",在接收的目标方法里,我们首 ...

  8. 微信公众号 接口测试平台 获取自定义菜单教程

    微信公众号 接口测试平台 https://mp.weixin.qq.com/debug?token=1686908657&lang=zh_CN 微信公众号 测试号登陆地址 http://mp. ...

  9. 中科院JCR期刊分区微信公众号查询平台升级

    赶在猴年第一天,我们升级了分区表微信公众号的查询平台,也是期望分区表能够在2016年有一个非常好的开始. 分区表微信公众号查询平台(以下称查询平台)是专为个人用户研发的,查询期刊分区的官方免费平台.关 ...

  10. 微赞config.修改php,微信公众号第三方平台 微赞WZ_V100.0版20170612整合包 整合人人商城V2新版+一键升级...

    php+mysql php版本5.3或者以上,OPENSSL必需开启,这是本程序与微信公众号通讯的需求. 我们建议您用云主机!Windows或者Linux皆可,windows主机不推荐用IIS环境,可 ...

最新文章

  1. 2018年Spring Cloud中国社区技术沙龙-成都站
  2. 使用域用户权限|安装软件
  3. 网络游戏服务器端架构设计(转载)
  4. Android学习笔记-Service
  5. C#中调用Windows系统服务exe程序的工具类与重启服务的流程
  6. 二值图像连通 C语言,二值图像统计连通区域C语言版
  7. Linux有趣指令(一)
  8. 北京IT白领的真实生活!
  9. python第五章课后答案5.8_Python语言程序设计(美-梁勇)第5章习题解答
  10. python turtle库下载_turtle库安装
  11. matlab中各种线型-颜色-标记点
  12. STM32单片机学习教程
  13. Springboot集成SMS发送短信
  14. emmx文件用什么软件打开电脑_我告诉你emmx文件怎么打开
  15. MinGW-w64安装教程
  16. 【luogu CF1009F】Dominant Indices(长链剖分优化DP)
  17. Opencv-图像ROI与ROI操作
  18. 基于51的单片机GPS定位系统设计
  19. unity 烘焙参数 设置_Unity干货知识:加速Lightmap烘焙速度的一些小技巧
  20. pip速度慢,更换清华镜像源试试?

热门文章

  1. ESP8266开启热点和TCP Server
  2. 使用GridView的auto_fit遇到的坑
  3. ligerui之控件列表初始化设置
  4. java动作游戏教程_格斗游戏的动作设计和制作
  5. 论文笔记| 后门攻击|Composite Backdoor Attack for Deep Neural Network byMixing Existing Benign Features
  6. 腾讯IT男转行数据后感慨:没用过这个工具,别说自己懂报表,这么做领导才满意
  7. 百度云平台BAE空间申请
  8. FTP软件的安装及上传/下载方法
  9. IETester的使用(针对VB.NET视频)
  10. Word文档保护怎么取消