介绍

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

  1. 客服系统
  2. 小程序登录
  3. CabloyJS后端调用
  4. 微信API调用

1. 客服系统

模块a-wechat已经对客服系统的通讯机制进行了封装,并且通过event机制进行扩展。如果我们要对用户发送的消息进行定制化的回复,可以这样操作:

关于event机制,请参见:后端事件

1.1 meta

test-wechat/backend/src/meta.js

event: {
      implementations: {
        'a-wechat:wechatMessageMini': 'event/wechatMessageMini',
    },

1.2 路由

test-wechat/backend/src/routes.js

{ method: 'post', path: 'event/wechatMessageMini', controller: event, middlewares: 'inner,wechatMini', meta: { auth: { enable: false } } },

1.3 Controller

test-wechat/backend/src/controller/event.js

    async wechatMessageMini() {
      const res = await this.service.event.wechatMessageMini({
        event: this.ctx.request.body.event,
        data: this.ctx.request.body.data,
      });
      this.ctx.success(res);
    }

1.4 Service

test-wechat/backend/src/service/event.js

    async wechatMessageMini({ event, data }) {
      const message = data.message;
      if (message.MsgType === 'text') {
        event.break = true;
        const text = `${this.ctx.text.locale('zh-cn', 'Reply')}: ${message.Content}`;
        await this.ctx.meta.wechatMini.sendText(message.FromUserName, text);
      }
    }

event.break=true

  • 由于同一个事件可以有多个模块进行订阅,并提供自定义的逻辑。如果想阻止后续的订阅响应,可以通过event.break=true进行终止

2. 小程序登录

测试模块test-wechat已经包含了一个微信小程序的demo程序,其中演示的小程序登录使用步骤如下:

2.1 app.js

当小程序启动时,Cabloy SDK会通过wx.loginwx.getUserInfo获取用户信息,并调用CabloyJS后端接口,自动注册用户信息,从而完成用户登录,并返回用户数据

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

    // 初始化cabloy
    this.cabloy = Cabloy(this);
    // 登录
    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进行登录

2.2 pages/index/index.js

因为获取更详细的用户信息,需要用户授权。所以在进入首页后,判断如果没有得到用户授权,仍然可以显示按钮: 获取头像昵称,其属性为open-type="getUserInfo"。响应此按钮事件,当用户授权后会调用方法getUserInfo。在此方法可以再一次调用cabloy.util.login进行登录,并返回用户数据

test-wechat/front/demo/miniprogram/pages/index/index.js

  getUserInfo(e) {
    // 登录
    app.cabloy.util.login({ detail: e.detail }).then(res => {
      this.setData({
        user: res.op,
        hasUserInfo: !!res.op.userName,
      });
    }).catch(err => {
      console.log(err);
    });
  },

3. CabloyJS后端调用

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

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

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

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

    __login({ code, detail }) {
      // 后台登录
      return cabloy.api.post('/a/wechat/authMini/login', { 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-wechat通过中间件机制提供了一个中间件wechatMini,如果要在后端API接口中访问微信API,只需要在API接口路由中指定中间件wechatMini即可

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

请参见本页面上方的客服系统,直接通过this.ctx.meta.wechatMini访问相应的微信API