文档章节

使用jfinal-weixin实现微信多帐号、多公众号平台

YangTao
 YangTao
发布于 2014/11/06 18:41
字数 572
阅读 1469
收藏 5

看了波总在群里给一个兄弟的回复,刚开始想按波总的思路搞,其实很简单,甚至都没有自己写拦截器 @jfinal

微信的每个touser 和fromuser都是不一样的,就根据传过来的原始ID与系统的用户表匹配,然后查询出相应信息,包括生成菜单、配置的回复消息什么的之类,思路就这样。

  1. 新建一张公众账号的数据库表 ,保存公众号的appid ,appsecret,原始ID等,当然,还有一个字段和系统用户表关联,如user_id

  2. 新建一张系统用户表,如sys_user  ,其中有user_id

  3. Controller如下,BsPublic是我的微信公众账号信息表 ,bsmsg表是配置的关键字表(微信的菜单都有个event_key,即在这个表里配置对应关系,或自动消息回复也可以依此配置)

public class WechatCtrl extends WeixinController   {
/**
     * 获取userid
     * @param oriId 微信的原始ID
     */
    private int getUserId(String oriId){
        int userId = BsPublic.dao.getByOriId(oriId).getInt("user_id");
        return userId;
    }
    
    //
    protected void processInTextMsg(InTextMsg inTextMsg) {

        int userId = getUserId(inTextMsg.getToUserName());

        BsReceivedMsg bsReceivedMsg = new BsReceivedMsg();
        bsReceivedMsg.set("user_id",userId);
        bsReceivedMsg.set("msg_type","text");
        bsReceivedMsg.set("msg_content",inTextMsg.getContent());
        bsReceivedMsg.set("msgid",inTextMsg.getMsgId());
        bsReceivedMsg.set("sender_openid",inTextMsg.getFromUserName());

        bsReceivedMsg.save();

        OutTextMsg outTextMsg = new OutTextMsg(inTextMsg);
        outTextMsg.setContent("您的消息已记录,如果有需要,我们将会在2个工作日内答复您");
        render(outTextMsg);

    }
    
    //关注时回复(这里是从bsmsg表根据key取到的信息,当然也需要用user_id条件)
    protected void processInFollowEvent(InFollowEvent inFollowEvent) {

        int userId = getUserId(inFollowEvent.getToUserName());

        BsMsg bsMsg = BsMsg.dao.getByKey(userId,"follow_msg");

        OutTextMsg outTextMsg = new OutTextMsg(inFollowEvent);
        outTextMsg.setContent(bsMsg.getStr("msg_content"));
        render(outTextMsg);
    }
}

生成菜单的简单代码如下

public class PublicMenuCtrl extends BaseController {

    /**
     * 生成
     */
    public void generate(){


        String userId = getPara("u");

        String str = BsMenu.dao.getJsonMenu(userId);

        Map<String, String> postParams=new HashMap<String,String>();
        postParams.put("body",str);

        BsPublic bsPublic = BsPublic.dao.getByUserId(userId);
        renderJson(WechatUtil.generateMenu(bsPublic.getStr("app_id"), bsPublic.getStr("app_secret"), postParams));
    }
}

基本上就这样,感觉还是挺简单的,并且暂时没有发现什么问题。

© 著作权归作者所有

共有 人打赏支持
YangTao
粉丝 5
博文 43
码字总数 7940
作品 0
长沙
架构师
私信 提问
加载中

评论(6)

YangTao
YangTao

引用来自“j2ee小菜鸟”的评论

楼主能贴全一点吗?新手正在学习中啊!!!
weixin1.2已经支持了。。
J2EE小菜鸟
J2EE小菜鸟
楼主能贴全一点吗?新手正在学习中啊!!!
YangTao
YangTao

引用来自“wuleibeyond”的评论

运行不起来呀
呵呵,因为只是关键代码,如果贴全的话,包括页面文件,会好些个文件。示意而已
wuleibeyond
wuleibeyond
运行不起来呀
YangTao
YangTao

引用来自“夏日滴凉风”的评论

感谢楼主,很有帮助!
谢谢你拍的马屁
夏日滴凉风
夏日滴凉风
感谢楼主,很有帮助!
JFinal Weixin 1.9 发布,微信极速 SDK

JFinal Weixin 1.9 正式发布!离上一次 JFinal weixin 1.8 发布,已经过去 10 个月。在过去的 10 个月时间里 JFinal Weixin 紧随微信公众平台的演化,不断增加了新的 API,同时也在不断完善原...

JFinal
2017/05/22
10.1K
54
JFinal Weixin 1.4 发布,微信极速 SDK

JFinal weixin 是第一个微信公众平台极速SDK,基于 jfinal weixin 开发不仅可以立即拥有简单易用的API,而且将立即拥有JFinal 所有的极速化支持,让开发更加轻松自如,节省更多时间去陪家人、...

JFinal
2015/07/03
5.2K
70
JFinal Weixin 1.3 发布,微信极速 SDK

JFinal Weixin 1.3 主要是将JFinal升级到了2.0版,并对原有代码进行小幅重构,其它添加的功能如下: 1:添加 CustomMsgApi 支持多客服消息 2:添加 QrcodeApi 支持带参数的二维码生成 该版本...

JFinal
2015/06/25
5.5K
47
JFinal Weixin 1.7发布,用 JFinal 开发,就这么定了

JFinal Weixin 1.7 增加了 Wap支付功能,改进jackson,支持用户信息中含有特殊字符时的json转换,并且修复了一个支付模块中的一个 bug,建议升级。 maven 升级坐标: 最新的 jar 包已经在 jf...

JFinal
2016/01/12
8K
35
基于 JFinal 的微信公众号极速开发 SDK - weixin_guide

weixinguide 是基于 JFinal 的微信公众号极速开发 SDK,只需浏览 Demo 代码即可进行极速开发,自 JFinal Weixin 1.2 版本开始已添加对多公众号支持。 10分钟搭建属于自己的ngork服务器,实现...

Javen-IJPay
2017/04/28
0
5

没有更多内容

加载失败,请刷新页面

加载更多

查询改写参数配置

参数配置有哪些选项:

Java搬砖工程师
29分钟前
2
0
elasticsearch知识点

elasticsearch基础知识: 基础知识: 1 集群: 主节点不涉及文档级别的变更或搜索 只负责索引的变更 删除 和 集群节点的加入和删除 技术上来说,一个主分片最大能够存储 Integer.MAX_VALUE - 12...

geek土拨鼠
32分钟前
2
0
ECS(Entity-Component-System)

ECS是一种思想 TODO

梦想游戏人
33分钟前
1
0
Navicat使用教程:使用Navicat Premium 12自动执行数据库复制(一)

下载Navicat Premium最新版本 Navicat Premium是一个可连接多种数据库的管理工具,它可以让你以单一程序同时连接到MySQL、Oracle及PostgreSQL数据库,让管理不同类型的数据库更加的方便。 与...

电池盒
34分钟前
4
0
docker 新手向 - 防止容器自动退出的解决方案

本文主要简单介绍 docker 容器与前置进程的关系,以及如何编写 Dockerfile/docker-compose.yml 优雅的让容器可以常驻运行。 docker 容器的生命周期是同容器中的前置进程相关在一起的,这也是...

big_cat
37分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部