介绍

企业微信小程序接口对接,主要涉及以下几个方面:

  1. 模块Config
  2. 小程序登录
  3. CabloyJS后端调用
  4. 微信API调用

1. 模块Config

我们可以通过在项目Config文件中覆盖模块Config中的参数,从而配置与微信公众号有关的信息

关于如何覆盖模块Config,请参见:Config

a-wxwork/backend/src/config/config.js

  // account.wxwork
  config.account.wxwork = {
    corpid: '',
    // apps
    apps: {
      ...
    },
    // minis
    minis: {
      default: {
        secret: '',
        appID: '',
        appSecret: '',
      },
    },
  };
  • minis: 支持多个微信小程序。为了实际开发上的便利,我们默认提供一个default小程序。如果需要开发其他微信小程序,直接在minis添加新的配置即可

2. 小程序登录

测试模块test-wxwork已经包含了一个企业微信小程序的demo程序

如何导入demo程序,请参见:快速开始 - 如何访问系统

这里对demo中涉及到的登录机制进行说明:

当小程序启动时,Cabloy SDK会通过wx.login,并调用CabloyJS后端接口,对用户进行认证,从而完成用户登录,并返回用户数据

test-wxwork/front/demo/miniprogram/app.js

    // 初始化cabloy
    this.cabloy = Cabloy(this, { scene: 'default' });
    // 登录
    this.cabloy.util.login().then(res => {
      // 由于 login 是网络请求,可能会在 Page.onLoad 之后才返回
      // 所以此处加入 callback 以防止这种情况
      if (this.cabloyLoginReadyCallback) {
        this.cabloyLoginReadyCallback(res);
      }
    }).catch(err => {
      console.log(err);
    });
  1. 首先要初始化一个cabloy实例
  2. 其次调用cabloy.util.login进行登录

3. CabloyJS后端调用

Cabloy SDK提供了便捷工具,用于小程序前端访问CabloyJS的后端API接口,具体细节请参见:

test-wxwork/front/demo/miniprogram/cabloy/api.js

下面以小程序后台登录为例,演示基本用法:

test-wxwork/front/demo/miniprogram/cabloy/util.js

    __login({ scene, code, detail }) {
      // 后台登录
      const url = cabloy.data.wxwork ? '/a/wxwork/authMini/login' : '/a/wechat/authMini/login';
      return cabloy.api.post(url, { scene, code, detail }).then(data => {
        // user
        cabloy.data.user = data.user;
        // config
        cabloy.data.config = data.config;
        // instance
        cabloy.data.instance = data.instance;
        // ok
        return data.user;
      });
    },

4. 企业微信API调用

模块a-wxwork通过中间件机制提供了一个中间件wxwork,如果要在后端API接口中访问企业微信API,只需要在API接口路由中指定中间件wxwork即可

企业微信小程序的主体仍然是微信小程序,然后再关联到企业微信,因此,我们需要合适的API体系,来分别调用微信小程序API,以及企业微信小程序API

4.1 企业微信小程序API调用

this.ctx.meta.wxwork.app.mini.${scene}

名称 说明
scene 小程序名,默认为default

企业微信API基于songbug1024/co-wxwork-api。为了便于更灵活的添加新API,CabloyJS对主仓库发起了一个新分支,详细的API清单请参见:co-wxwork-api

4.2 微信小程序API调用

this.ctx.meta.wxwork.mini.${scene}

名称 说明
scene 小程序名,默认为default

微信API基于node-webot/co-wechat-api。为了便于更灵活的添加新API,CabloyJS对主仓库发起了一个新分支,详细的API清单请参见:co-wechat-api

5. 如何判断是否在企业微信小程序

由于CabloyJS后端架构的普适性,我们有时候需要判断当前是否在企业微信小程序中,从而做出相应的处理

5.1 通过中间件判断

可以通过中间件inWxwork来判断该api接口是否被企业微信小程序调用,如果不是则自动阻止后续逻辑的执行

src/module/test-wxwork/backend/src/routes.js

  { method: 'post', path: 'test/getMemberId', controller: test, middlewares: 'inWxwork',
      meta: {
        inWxwork: {
          scene: 'wxwork,wxworkweb,wxworkmini',
        },
      },
    },
名称 说明
meta.inWxwork 指定中间件inWxwork的参数
scene 如果指定wxworkmini,表示该api只能被企业微信小程序调用

scene支持以下值:

名称 说明
空字符串 默认为wxwork,代表企业微信
wxworkweb 代表企业微信Web应用
wxworkmini 代表企业微信小程序
wxworkmini${scene} 指定更明确的某个小程序,如wxworkminidefault
wxwork,wxworkweb,wxworkmini 该api可被任何一个指定的场景调用

5.2 通过代码判断

可以直接通过代码进行判断

this.ctx.meta.wxwork.util.in(scene)

名称 说明
scene 场景名,如wxworkmini