文档章节

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

YangTao
 YangTao
发布于 2014/11/06 18:41
字数 572
阅读 1432
收藏 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
粉丝 4
博文 39
码字总数 7014
作品 0
长沙
架构师
加载中

评论(6)

YangTao
YangTao

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

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

引用来自“wuleibeyond”的评论

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

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

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

JFinal Weixin 发布四年多以来,以其简单性、稳定性,获得了大量用户的喜爱,这四年多以来 JFinal Weixin 紧跟微信官方动态,不断增加、完善功能,例如跟随本次微信官方发布的 XXE 漏洞,第一...

JFinal
07/10
0
0
WordPress 的 Java 代替版 - JPress

JPress,一个wordpress的java代替版本,使用JFinal开发。支持类似wordpress的几乎所有功能,比如:模板,插件等。同时在模板上,JPress提出了“模板即模型”的概念,方便模板制作人灵活制作业...

理工男海哥
2016/06/09
0
51
Jfinal微信项目运行机理分析

微信时代的来临!!! 最近今天,越来越多的人都来问我,什么是微信?这里的微信我默认指我们的公众账号或者服务号之类的,所以下文如果不明确指出,就是指这个! 话回主题,什么是微信?他和...

天蓬小猪
2014/12/16
0
32
记一次外包项目微信接口开发流程-spring-boot

近期帮朋友做了几个用到微信公众号接口的活,所以总结下。 一、微信公众号后台配置 公众号分订阅号,服务号,企业号,可以调用的接口权限各不相同,这里就不赘述,参考官方说明。 登陆公众号...

北风刮的不认真了
2017/10/20
0
5
jfinal框架增加微信jsapi支持

部分手机在图片上传的时候,调取不到sd卡相册或其他图片,为了解决这个兼容性问题,同一个页面使用了两种图片上传方案。 html5 :图片编码成base64 ,发送到后台,解码存储。这种方法用于解决...

YangTao
2015/05/29
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

es6

在实际开发中,我们有时需要知道对象的所有属性,原生js给我们提供了一个很好的方法:Object.keys(),该方法返回一个数组 传入对象,返回属性名 var obj = {'a':'123','b':'345'};console.l...

不负好时光
9分钟前
0
0
叮!您收到一份超值Java基础入门资料!

摘要:Java语言有什么特点?如何最大效率的学习?深浅拷贝到底有何区别?阿里巴巴高级开发工程师为大家带来Java系统解读,带你掌握Java技术要领,突破重点难点,入门面向对象编程,以详细示例...

全部原谅
10分钟前
0
0
web.xml容器加载顺序

容器对于web.xml的加载过程是context-param >> listener >> fileter >> servlet

Aeroever
13分钟前
1
0
Docker容器日志查看与清理

1. 问题 docker容器日志导致主机磁盘空间满了。docker logs -f container_name噼里啪啦一大堆,很占用空间,不用的日志可以清理掉了。 2. 解决方法 2.1 找出Docker容器日志 在linux上,容器日...

muzi1994
14分钟前
0
0
J2Cache 和普通缓存框架有何不同,它解决了什么问题?

不少人看到 J2Cache 第一眼时,会认为这就是一个普普通通的缓存框架,和例如 Ehcache、Caffeine 、Spring Cache 之类的项目没什么区别,无非是造了一个新的轮子而已。事实上完全不是一回事!...

红薯
16分钟前
414
9

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部