使用jfinal-weixin实现微信多帐号、多公众号平台
博客专区 > YangTao 的博客 > 博客详情
使用jfinal-weixin实现微信多帐号、多公众号平台
YangTao 发表于3年前
使用jfinal-weixin实现微信多帐号、多公众号平台
  • 发表于 3年前
  • 阅读 1415
  • 收藏 5
  • 点赞 0
  • 评论 6

新睿云服务器60天免费使用,快来体验!>>>   

摘要: 看了波总在群里给一个兄弟的回复,刚开始想按波总的思路搞,其实很简单,甚至都没有自己写拦截器 @jfinal 微信的每个touser 和fromuser都是不一样的,就根据传过来的原始ID与系统的用户表匹配,然后查询出相应信息,包括生成菜单、配置的回复消息什么的之类,思路就这样。

看了波总在群里给一个兄弟的回复,刚开始想按波总的思路搞,其实很简单,甚至都没有自己写拦截器 @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));
    }
}

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

  • 打赏
  • 点赞
  • 收藏
  • 分享
共有 人打赏支持
粉丝 4
博文 36
码字总数 6730
评论 (6)
夏日滴凉风
感谢楼主,很有帮助!
YangTao

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

感谢楼主,很有帮助!
谢谢你拍的马屁
wuleibeyond
运行不起来呀
YangTao

引用来自“wuleibeyond”的评论

运行不起来呀
呵呵,因为只是关键代码,如果贴全的话,包括页面文件,会好些个文件。示意而已
J2EE小菜鸟
楼主能贴全一点吗?新手正在学习中啊!!!
YangTao

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

楼主能贴全一点吗?新手正在学习中啊!!!
weixin1.2已经支持了。。
×
YangTao
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: