企业微信小程序专有 api 按照教程,必须按照开发者工具插件 安装完成之后会多出一个 企业微信小程序模式 切换过去,此时小程序的模拟器环境就变成企业微信了
原先微信小程序和企业微信小程序的 login 都是先获取 jscode 然后置换出 sessionkey, 但是接口是不同的
企业微信可在 session_key 未过期时,获取企业成员基本信息
企业微信小程序使用主要分两种模式: 一种自己用,添加到本公司的小程序,获取一些配置来对本公司进行操作 一种是成为第三方服务商,让其他企业来安装。
const info = uni.getSystemInfoSync()
const isWxwork = info.environment === 'wxwork'
这是一种 runtime 的判断方法,在编译时似乎做不到单独为这种情况打一个版本,因为企业微信小程序和普通微信小程序是共用的一套代码和一套发布平台
uni.qy 是没有这个玩意的 只能使用 wx.qy,那么我们怎么针对性的进行 promisify ,而且也需要原汁原味的 uni 机制: 例如:
const [err, res] = await uni.downloadFile({
url: fileUrl,
})
这种 uni 的 promisify 很特殊,因为他是返回一个数组 第一个是 error,第二个才是结果 一般肯定都是 try/catch 然后 throw 和 result 的
所以我们按照他的思路就得去看一下他的源码
目前我的解决方案是 把 interceptor.js promise.js shared.js 拷进来
import { promisify } from '@/util/core/promise.js';
const qyApis = {
p: [
'login',
'checkSession',
'getEnterpriseUserInfo',
'getAvatar',
'getQrCode',
'selectEnterpriseContact',
'openEnterpriseChat',
'selectExternalContact',
'getCurExternalContact',
'openUserProfile',
'getNFCReaderState',
'startNFCReader',
'stopNFCReader'
],
n: ['canIUse']
};
const qyApiMap = qyApis.p.reduce(
(acc, cur) => {
acc[cur] = promisify(cur, wx.qy[cur]);
return acc;
},
qyApis.n.reduce((acc, cur) => {
acc[cur] = wx.qy[cur];
return acc;
}, {})
);
uni.qy = qyApiMap;
上面这段代码用来给 wx.qy 的 api 进行封装,然后付给 uni.qy 其中需要 promisify 的放在了 p 数组 不需要的 放在了 n 数组 到时候根据需求来自定义添加新的 api