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

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

前言

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;
    @Override
    public 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中,关键字回复主要实现代码如下:

/**
     * 接收文本消息事件
     */
    @Override
    protected void processInTextMsg(InTextMsg inTextMsg) {
        String msgContent = inTextMsg.getContent().trim();
        final String openId = inTextMsg.getFromUserName();
        // String rmid = getPara("rmid");//再通过rmid 查询APPId,这里为了方便直接将其存入session
        final 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

Amango 芒果微信公众管理框架是基于 Onethink 开源框架进行的二次开发,它继承Onethink的基本CMS管理理念,丰富了对微信公众管理的更好得支持。 因此,它既可以兼容Onethink的插件也支持微信插件。本系统专注于单个微信公众号的管理,但它又不同于其他微信公众管理系统。对于微信公众管理 而言,无论你是使用者,还是插件开发者,它对于大家而言都是“新鲜”的。注重单公众管理的个性化的实训,因此,它的部分理念是独树一帜的。如果你是匠心独运你的微信公众号,不妨来体验它,它将带给你新的微信公众管理视角对于使用者来说对于信息调用:微信回复支持全站调用任意cms内容对于资源调用:微信素材统一管理机制对于关键词:微信关键词高级自定义(在芒果这,关键词=用户请求 自定义响应),您可以自定义关键词激活时间,分组,权限,主题等等...,此外,为了资源重复利用,我们的可以通过请求和响应的拖拽式绑定组装任意你想要的关键词对于关注者:自定义关注者所在分组,积分体制,用户分组所拥有的权限对于运营方面:微信支持任意位置植入任意内容,无论你是图文消息,文本消息,语音消息,地理消息等等,我们可以自行定义任意时间段植入任意内容对于前端页面:我们统一了插件与资讯界面风格,增强了用户中心以及自动登录对于开发者来说(仅仅针对微信插件)对于插件/资讯前台:采用自动响应的Amaze UI作为我们的Css框架,开发者可以采用模板渲染统一风格,为了更好地结合微信浏览器,我们内置了分享以及相关js控制显示对于微信端出来开发:我采用简洁的插件文件夹布局,更加简洁明了,针对微信控制器处理的开发,我们将更多的方法独立封装自定调用 【creat_url自动创建插件URL,lock上下文模块锁定,error/success快捷回复...等等】,在这里,无需手写繁杂的代码,只需 配置rules就可以进行关键词自动匹配,自动截取,自动定位到你的操作,让你的精力更多投入到功能开发而不是枯燥的关键词逻辑判断 标签:Amango
相关推荐
微信公众管理系统【概括介绍】 微翼微信公众管理系统是一个基于php mysql的多用户微信营销源码程序,由深圳掌云互联信息技术有限公司开发,是国内使用最多、功能最强大、性能最稳定的多用户微信营销系统平台源码。微翼强大的功能和优质的服务,用户遍布全国各地以及港澳台、加拿大、美国、新西兰、意大利等国家和地区,并且绝大多数平台运营者因此获得了很好的利润回报。 微翼一流的技术团队会一如既往、源源不断的的为各商业平台提供新的功能和技术支持与保障。   【基本介绍】 微翼微信开源管理系统是目前内容最丰富,功能最强大的微信营销系统,同时也是中国开发最早营销力最强的多用户微信公众系统,自系统面世以来一直保持着微信营销软件使用率第一。微翼是国内最著名的多用户微信营销系统,您使用微翼可以搭建自己的微信营销平台,平台用于给您的客户搭建微网站、微商城、微活动、微会员卡等一系列微信营销功能。   【软件特点】 微翼拥有近百项功能,既包含常见的各类智能自动回复(图文、音频等形式)功能、营销活动推广模块、微网站和强大的会员卡系统,又涵盖了针对各个行业(餐饮、房产、汽车、婚庆、医疗、旅游等)的微信营销应用,另外系统还自带完善的粉丝管理和详细的数据统计分析功能,让用户可以方便的管理粉丝信息,并直观的看到各模块的数据统计、粉丝的行为分析结果、粉丝喜好和周期关注趋势对比等信息。这些功能为微信营销平台运营者提供了有力的市场竞争力。       相关阅读 同类推荐:站长常用源码
最新微信公众号第三方管理平台系统是一款免费开源公众号,微信小程序,支付宝小程序,熊掌号,pc建站管理系统,基于目前最流行的WEB2.0的架构(php+mysql),拥有成熟、稳定的的技术解决方案。源码透明、开放,一切的数据及资源都架设在自己的服务上,保证独立性、安全性及可控性。活跃的第三方开发者及开发团队,依托微擎的整个开放的生态系统之上,更丰富的扩展功能。良好的开发框架、文档,轻松扩展、定制私有功能。优质的在线更新系统、客服人员、技术工程师解决使用或是开发上的各种疑难问题。 源码简介 该框架支持一键安装,并集成了完整的数据库。它基本上是最纯的版本。 该框架已完全本地化,无需担心被官方勒索以确保稳定使用。 您可以随意安装crack模块,在本地安装任何模块插件,并完美屏蔽官方验证。 附件提供了完整的数据库结构。升级后,建议比较结构。 新安装的学生无需比较结构,一键安装后即可正常使用。 此版本是一键安装版本。先前打包版本中的许多学生报告说,他们无法直接安装该模块。他们重新打包了一键安装版本并直接使用它。 我相信,在今天发布之后,各种“资源站”都将在明天甚至一个小时后成为他的独家版本。框架中有一些网站标记,因此我无需在发布前重新安排重印模式的建议。 已知问题:首次安装后,白屏将刷新页面。强迫症患者可以自我修复。 特别说明:框架文件的一部分来自PHP技术组优化。 测试环境(环境需要自己的意愿微微调整) 网站环境:Nginx 1.15 + MySQL 5.6 + PHP-7.0 /-5.6 PHP插件:ionCube -fileinfo -redis – Swoole -sg11 (根据程序来看) 更多详情解说链接:https://www.bsr.sx.cn/830.html
©️2020 CSDN 皮肤主题: 成长之路 设计师:Amelia_0503 返回首页