祝大家新年快乐,有任何问题可与我联系:

一般的项目中只使用到一个公众号,这个按照开发文档就可以实现了。但是很多平台型的项目,需要同时支持多个公众号。我也参与过几个平台型的项目,但是总觉得这些项目中多公众号的实现方式用着不顺手,总结了一下各个项目中的优缺点,便有了下面的实现方式。代码简单,直接上代码。

package cn.yyjjssnn.wxmp;

import java.util.Hashtable;

import java.util.Map;

import org.springframework.util.Assert;

/**

* 支持多企业多公众号的使用

*

* @author LiuYang

* @date 2018年2月10日 上午10:11:40

* @version V1.0

*/

public class WxMpUtil {

/**

* 缓存MultiWxMpService,方便下次使用。

* 这里为演示采用MAP,可以根据业务的需要使用其他单机缓存或分布式缓存。

*/

private static Map multiWxMpServiceCache = new Hashtable();

private WxMpUtil() {

}

/**

* 根据ID获取对应的MultiWxMpService

* @param companyId 企业ID

* @return

*/

public static synchronized MultiWxMpService get(String companyId) {

Assert.hasText(companyId, "企业ID不能为空");

MultiWxMpService wxMpService = multiWxMpServiceCache.get(companyId);

if (wxMpService == null) {

wxMpService = new MultiWxMpService(companyId);

multiWxMpServiceCache.put(companyId, wxMpService);

}

return wxMpService;

}

}

package cn.yyjjssnn.wxmp;

import me.chanjar.weixin.mp.api.WxMpInMemoryConfigStorage;

import me.chanjar.weixin.mp.api.WxMpMessageRouter;

import me.chanjar.weixin.mp.api.impl.WxMpServiceImpl;

/**

* 微信公众号支持多帐号版本的实现

*

* @author LiuYang

* @date 2018年2月10日 下午4:39:25

* @version V1.0

*/

public class MultiWxMpService extends WxMpServiceImpl {

/**

* 区分微信公众号多帐号的唯一ID,我这里用的企业ID

*/

private String companyId = null;

private WxMpMessageRouter router = null;

public MultiWxMpService(String companyId) {

this(companyId, null);

}

public MultiWxMpService(String companyId, WxMpMessageRouter router) {

this.companyId = companyId;

setWxMpConfigStorage();

if (router == null) {

setWxMpMessageRouterRule();

} else {

this.router = router;

}

}

public String getCompanyId() {

return companyId;

}

public WxMpMessageRouter getMessageRouter() {

return router;

}

private void setWxMpConfigStorage() {

//TODO 根据companyId读取公众号参数配置 这里可以从配置文件、数据库、缓存任意一个源读取

String appId = "";

String secret = "";

String token = "";

String aesKey = "";

// 设置公众号参数

WxMpInMemoryConfigStorage config = new WxMpInMemoryConfigStorage();

config.setAppId(appId); // 设置微信公众号的appid

config.setSecret(secret); // 设置微信公众号的app corpSecret

config.setToken(token); // 设置微信公众号的token

config.setAesKey(aesKey); // 设置微信公众号的EncodingAESKey

this.setWxMpConfigStorage(config);

}

private void setWxMpMessageRouterRule() {

router = new WxMpMessageRouter(this);

// 记录所有事件的日志

router.rule().handler(new LogHandler()).next();

}

}

package cn.yyjjssnn.wxmp;

import java.util.Map;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

import me.chanjar.weixin.common.exception.WxErrorException;

import me.chanjar.weixin.common.session.WxSessionManager;

import me.chanjar.weixin.mp.api.WxMpMessageHandler;

import me.chanjar.weixin.mp.api.WxMpService;

import me.chanjar.weixin.mp.bean.message.WxMpXmlMessage;

import me.chanjar.weixin.mp.bean.message.WxMpXmlOutMessage;

/**

* 消息路由基类 这里主要重载了一下handle方法,将参数WxMpService转换成MultiWxMpService方便其他路由使用

*

* @author LiuYang

* @date 2018年2月10日 上午11:38:46

* @version V1.0

*/

public abstract class BaseHandler implements WxMpMessageHandler {

protected Logger logger = LoggerFactory.getLogger(getClass());

@Override

public WxMpXmlOutMessage handle(WxMpXmlMessage wxMessage, Map context,

WxMpService wxMpService, WxSessionManager sessionManager) throws WxErrorException {

MultiWxMpService mpService = (MultiWxMpService) wxMpService;

return handle(wxMessage, context, mpService, sessionManager);

}

public abstract WxMpXmlOutMessage handle(WxMpXmlMessage wxMessage, Map context,

MultiWxMpService mpService, WxSessionManager sessionManager) throws WxErrorException;

}

package cn.yyjjssnn.wxmp;

import java.util.Map;

import me.chanjar.weixin.common.session.WxSessionManager;

import me.chanjar.weixin.mp.bean.message.WxMpXmlMessage;

import me.chanjar.weixin.mp.bean.message.WxMpXmlOutMessage;

/**

* 记录所有事件的日志

*

* @author LiuYang

* @date 2018年2月10日 下午4:12:30

* @version V1.0

*/

public class LogHandler extends BaseHandler {

@Override

public WxMpXmlOutMessage handle(WxMpXmlMessage wxMessage, Map context,

MultiWxMpService mpService, WxSessionManager sessionManager) {

logger.info("\n接收到 {} 请求消息,内容:{}", mpService.getCompanyId(), wxMessage);

return null;

}

}

~谢谢打赏~手机请长按图片~

赞 赏

java 微信多公众号管理_微信公众号开发:支持对多个公众号的管理相关推荐

  1. 公众号 关注_微信公众号关注图文跳转网页如何操作实现?

    对于微信公众号关注图文跳转网页的场景实现,微号帮平台提供了粉丝关注定时推送功能实现,公众平台提供了开发接口编程实现功能效果,都能实现微信公众号关注图文跳转网页,只要网页能正常在个人微信上打开浏览都能设 ...

  2. 微信有电脑客户端吗_微信公众号文章下载、打印、精确搜索定位与交流方式分享...

    点"考研竞赛数学"↑可每天"涨姿势"哦! 封面图来源:pexels.com [注]以下操作适用于所有公众号 一.电子文档下载打印 咱号一直不赞成积累电子文档,而 ...

  3. java 微信 摇一摇红包_微信春节放大招:摇一摇送5亿现金红包

    腾讯科技讯(相欣)2月9日消息,2015春节期间,微信将联合各类商家推出春节"摇红包"活动,将送出金额超过5亿的现金红包(单个最大红包为4999元),以及超过30亿卡券红包. 微信 ...

  4. 微信有电脑客户端吗_微信电脑版有多难用,你们真的没感觉吗

    航通社首发原创文章,未经授权禁止转载.航通社微信:lifeissohappy 微博:@航通社 书航 12 月 23 日发于北京 微信 7.0.10 正式版,可以用表情回复朋友圈了. 社长的朋友圈瞬间被 ...

  5. 超市微信小程序怎么做_微信小程序便利店怎么开?便利店和百货超市怎么开发小程序?...

    微信小程序便利店怎么开?便利店和百货超市怎么开发小程序?下面跟随小编一起来看看吧! 现在很多商家还在小程序是什么,流行的说法是开店到微信,创建一个互联网离线模式,将近五公里的小程序显示出来,只要别人用 ...

  6. 微信多订单合并付款_微信小商店订单合并打单,操作分享请收藏!

    同一个同件人和收货地址的多个订单如何合并打单发货呢?如果有多个这种用户下单怎么处理订单打印和发货?目前微信小商店是没有这个合并订单打快递单功能的.这种情况就需要借助第三方打单软件来实现.下面分享微信小 ...

  7. 微信撤回软件安卓版_微信拍一拍撤回软件下载

    微信拍一拍撤回软件带给大家,微信拍一拍是微信上线的一个通过双击好友头像来拍一拍对方的趣味功能,专注于提高和好友之间的趣味交流. 微信拍一拍怎么撤回 8-12日,应广大用户的要求,微信终于更新了全新版本 ...

  8. 微信小程序制作课程表_微信小程序实现课程表实例

    前言 感谢! 承蒙关照~微信小程序实现课程表实例 效果图: 小程序代码如下 wxml: {{bj}} {{name}} 8:00 语文 语文 数学 数学 语文 9:00 语文 语文 数学 数学 语文 ...

  9. 微信开挂怎么防止封号_微信大规模封号,这个外挂别再用了

    这两天微信营销圈可以说是一片哀嚎,有大量用户反馈微信号被封,很多用户一觉醒来,微信已被关小黑屋. 被封的微信大都显示「因使用了微信外挂.非官方客户端或模拟器,被临时限制登录」,用户需等待 24 小时之 ...

  10. 微信服务通知消息找回_微信好友删除了怎么找回?掌握小妙招,恢复好友不是梦?_...

    2020年11月03日 14:05作者:黄页编辑:黄页 ​微信好友删除了怎么找回?随着现在微信使用的越来越频繁,导致手机通讯录的功能已经退化,可以说现在一个人可能会没有对方的手机号,但是一定不会没有对 ...

最新文章

  1. 语义分割网络经典:unet
  2. 我在互联网大厂,和同事谈恋爱
  3. Java学习之路-4_集合知识总结
  4. Aaron Stannard谈Akka.NET 1.1
  5. vcpkg安装_微软牌包管理器vcpkg更新及路线图计划
  6. java adt is保存快捷键_ADT - Eclipse 常用快捷键
  7. aliyun maven 添加jar_Maven介绍及安装
  8. 无限复活服务器,绝地求生无限复活模式怎么玩 无限复活玩法说明介绍
  9. 支付宝澄清使用华为方舟编译器;三星苹果遭遇集体诉讼;PHP 7.4.0 beta4 发布 | 极客头条...
  10. CoreAnimation-CATransform3D-1
  11. 线上环境websocket连接地址_WebSocket:沙盒里的TCP
  12. Redis容量及使用规划(转)
  13. Visio 安装后提示 Dos 共享冲突
  14. java执行maven命令
  15. 贝叶斯分析思路 通俗讲法
  16. python识别图片文字_python实现简单图片文字识别翻译OCR
  17. 龙芯3a4000 交叉编译链接错误
  18. 海马苹果助手ipad版_苹果IPA文件签名,软件掉签问题,自己也能轻松解决
  19. 重点分析!转型中的好莱坞发生了哪些变局?
  20. YOLOv7全文翻译

热门文章

  1. python判断生肖
  2. Java程序设计 -- 常用API(上)(九)
  3. docker mysql 修改cnf_Docker下Mysql .cnf文件修改小贴士
  4. linux无线网卡创建ap,Linux中使用hostapd创建无线AP及相关问题的处理方法
  5. Can You Really Backdoor Federated Learning
  6. b700a怎么连蓝牙_索尼WI-H700耳机蓝牙连接方法
  7. linux ftp上传目录,Linux中ftp不能上传文件/目录的解决办法
  8. 系统分析员要了解什么知识?
  9. android 电视 vob格式转换,佳佳VOB格式转换器将视频转换到手机格式的方法
  10. (二)XGBoost之DART booster