介绍
企业微信小程序接口对接,主要涉及以下几个方面:
- 模块Config
- 小程序登录
- CabloyJS后端调用
- 微信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
const cabloyOptions = {
base: {
scene: 'default',
locale: 'en-us',
},
api: {
baseURL: 'http://yourdomain.com',
},
};
this.cabloy = Cabloy(this, cabloyOptions);
// 登录
this.cabloy.util.login().then(res => {
// 由于 login 是网络请求,可能会在 Page.onLoad 之后才返回
// 所以此处加入 callback 以防止这种情况
if (this.cabloyLoginReadyCallback) {
this.cabloyLoginReadyCallback(res);
}
}).catch(err => {
console.log(err);
});
- 首先要初始化一个
cabloy
实例- 其次调用
cabloy.util.login
进行登录
3. CabloyJS后端调用
Cabloy SDK提供了便捷的API组件app.cabloy.api
,用于小程序前端访问CabloyJS的后端API接口
src/module/test-wxwork/front/demo/miniprogram/pages/index/index.js
getMemberId() {
app.cabloy.api.post('/test/wxwork/test/getMemberId').then(data => {
this.setData({
memberId: data.memberId,
});
});
},
4. 企业微信API调用
模块a-wxwork
提供了全局Bean组件wxwork
,用于调用所有微信API
企业微信小程序的主体仍然是
微信小程序
,然后再关联到企业微信
,因此,我们需要合适的API体系,来分别调用微信小程序API
,以及企业微信小程序API
4.1 企业微信小程序API调用
ctx.bean.wxwork.app.mini.{scene}
名称 | 说明 |
---|---|
scene | 小程序场景名,默认为default |
企业微信API基于
songbug1024/co-wxwork-api
。为了便于更灵活的添加新API,CabloyJS对主仓库发起了一个新分支,详细的API清单请参见:co-wxwork-api
src/module-system/a-wxwork/backend/src/service/authMini.js
// mini
const res = await this.ctx.bean.wxwork.app.mini[scene].code2Session(code);
4.2 微信小程序API调用
ctx.bean.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 通过代码判断
可以直接通过代码进行判断
ctx.bean.wxwork.util.in(scene)
名称 | 说明 |
---|---|
scene | 场景名,如wxworkmini |
评论: