当前位置: 首页 > 工具软件 > JFinal-event > 使用案例 >

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

欧阳勇军
2023-12-01

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

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

转载于:https://my.oschina.net/wanily/blog/341588

 类似资料: