Node.js CabloyJS 微信模块、企业微信模块已出齐

zhennann · 2020年06月26日 · 最后由 xiang 回复于 2020年06月28日 · 2156 次阅读

前言

Cabloy-企业微信模块完成时,加上之前已完成的Cabloy-微信模块,关于在 CabloyJS 中与微信/企业微信对接的任务已经完成了。这些模块的目标就是,只需填入各类服务的参数,就可以直接进入具体的业务开发,从而达到开箱即用的效果

背景分析

1. 账户体系

微信/企业微信的开发,有诸多的坑,而最大的坑就是账户体系

  • 首先,微信企业微信是不同的账户体系
  • 微信中,openid 是识别用户的唯一标识,如果开通了微信开放平台,那么就可以通过 unionid 把散落在微信公共号微信小程序等不同服务的 openid 关联起来,标识同一个用户。那么,如何把 openid 与系统中的用户系统对接起来?如果开通了 unionid,又如何对接?unionid 开通之前的旧账户是否也可以平滑迁移?
  • 企业微信中,通过 userid 来识别每个企业成员。与微信不同的是,企业微信通过部门树来管理成员,从而为资源授权和分配提供组织依据。那么,我们在进行系统初始化的第一步就是要把企业的部门和成员同步到系统中,并实现双向查找功能

2. 杂项

除了纷繁复杂的账户体系对接任务,接下来我们还要面对一些随时开发随时遇到的小问题。因为微信/企业微信开发涉及到的场景、概念和术语有很多,往往需要通读官方文档。而官方文档对有些概念的表述语焉不详,惜墨如金,于是不得不写代码来验证一些猜测,然后再回头重温文档。当这一遍走完把项目完成后,如果有一个新项目,很可能还要再走一遍。这里仅仅列举一些经常出现的问题:

  • JSON 与 XML:微信公共号的消息推送系统采用 XML 作为数据格式,而小程序既要支持 XML 也要支持 JSON。同时又有明文模式、兼容模式、安全模式之别。
  • openid/unionid与openId/unionId:在进行账号登录时,微信公共号返回的是openid/unionid,而小程序返回的openId/unionId。如果稍不留意,就掉在坑里了
  • 企业微信支持不同的应用:内置的应用、第三方应用、自建应用、关联的小程序等等。这些应用如何进行架构,提供统一便捷的 API 调用模型
  • 企业微信小程序本体是微信小程序,然后关联到企业微信成为一个企业微信应用。只有明白了这些概念和关系,才能准确的进行对接

核心目标

1、常见微信 API SDK 的问题

不同的开发语言,都能找到对应的微信 API SDK。但这些微信 API SDK 往往是把官方提供的 http api 进行了一个语言层面的封装,很少走得更远的。比如,通过微信 API SDK,我们可以很方便的获取 AccessToken,可以获取 User 信息,但是如何把获取到的 User 与系统对接,如何处理 openid 和 unionid 之间的关联,仍然需要我们自己设计和开发

再比如,通过微信 API SDK 可以很方便的获取企业微信的部门和成员。但是如何与系统中的角色和用户对接,并支持不同的场景和登录方式,仍然有大量的工作需要做

2. 开箱即用

而 CabloyJS 的微信/企业微信模块的核心目标就是提供开箱即用的效果。只需配置好参数,所有的对接工作全部自动完成,使我们一步跨过纷繁的细节,直接进入具体的业务开发当中。当然,CabloyJS 的微信/企业微信模块是完全开源的,我们仍然可以从中清晰地看到这些细节,以及处理的方式

为什么 CabloyJS 可以做到开箱即用的效果?就是因为 CabloyJS 是全栈 NodeJS 框架,可以把前端组件后端服务数据存储与访问等等,有机的结合在一起

比如,CabloyJS 模块通过这些前后端的配合,直接实现了企业微信中部门与用户的同步工作,甚至还通过 CabloyJS 底层提供的SocketIO机制实现了前端同步进度的实时显示

contacts-sync-zhcn

两大亮点

基于 CabloyJS 全栈业务开发框架本身提供的特性,使得Cabloy-企业微信模块具有以下两个显著的亮点:

1. PC、Mobile 自适应

许多企业微信应用存在这样一个问题:在 Mobile 端只能使用一部分功能,其他更多功能则需要登录 PC 系统进行操作

而 CabloyJS 框架下的Cabloy-企业微信允许所有的业务功能同时支持 PC 和 Mobile 使用。同时又能保证以下两点:

  1. 通过角色权限系统,控制不同用户使用不同功能
  2. 前端页面采用异步加载策略,从而适应大型项目的开发
  • Mobile 端效果

mobile-zhcn

  • PC 端效果

pc-zhcn

2. 数据孤岛

企业从不同服务提供商采购不同的企业微信应用,必然导致数据孤岛的出现,而且这些数据散存在不同服务商的后台,缺乏数据联动与共享机制

而 CabloyJS 框架本身就是基于业务模块构建的。企业自建的模块或者使用第三方的模块,都汇集在一个 CabloyJS 项目之中,并进行私有部署,从而从根本上解决了数据孤岛的问题,不仅能实现数据联动与共享,也可以更灵活的进行数据采集、处理和分析

归根结底一句话,数据和程序都掌握在自己的手中

特性

基于 CabloyJS 全栈框架提供的便利性和灵活性,Cabloy-企业微信主要有如下特性:

1. 一站式整合

当前整合了企业微信自建应用企业微信小程序的接口,具体如下:

场景 名称 说明
自建应用 消息推送系统 自动完成接口对接,并对用户进行认证
自建应用 网页登录 自动跳转微信登录,并对用户进行认证
自建应用 网页 JSSDK 自动注入 JSSDK,并自动完成配置
小程序 后台登录接口 自动完成接口对接,并对用户进行认证
小程序 前端 SDK 提供 SDK,便于企业微信小程序前端直接访问 CabloyJS 后端 API

2. 开箱即用

只需配置好企业微信账号参数,所有接口自动完成对接

3. 多小程序支持

企业微信可以关联多个企业微信小程序,因此,模块也提供了多小程序支持

4. 多站点支持

通过 CabloyJS 提供的多实例特性,可以实现多站点支持,比如为不同的企业提供企业微信服务。请参见:EggBornJS:多实例

参考链接

需要 登录 后方可回复, 如果你还没有账号请 注册新账号