此页面需要javascript支持,请在浏览器中启用javascript

uni-app 企业微信适配

uni-app
mp-weixin
共551个字,阅读时间 3 分钟
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://icebreaker.top/articles/2020/10/uni-app-1

企业微信小程序

企业微信小程序专有 api 按照教程,必须按照开发者工具插件 安装完成之后会多出一个 企业微信小程序模式 切换过去,此时小程序的模拟器环境就变成企业微信了

一些差异

原先微信小程序和企业微信小程序的 login 都是先获取 jscode 然后置换出 sessionkey, 但是接口是不同的

企业微信可在 session_key 未过期时,获取企业成员基本信息

企业微信小程序使用主要分两种模式: 一种自己用,添加到本公司的小程序,获取一些配置来对本公司进行操作 一种是成为第三方服务商,让其他企业来安装。

  1. 企业微信小程序判断方式:
const info = uni.getSystemInfoSync()

const isWxwork = info.environment === 'wxwork'

这是一种 runtime 的判断方法,在编译时似乎做不到单独为这种情况打一个版本,因为企业微信小程序和普通微信小程序是共用的一套代码和一套发布平台

  1. uni-app qy api promisify

uni.qy 是没有这个玩意的 只能使用 wx.qy,那么我们怎么针对性的进行 promisify ,而且也需要原汁原味的 uni 机制: 例如:

const [err, res] = await uni.downloadFile({
  url: fileUrl,
})

这种 uni 的 promisify 很特殊,因为他是返回一个数组 第一个是 error,第二个才是结果 一般肯定都是 try/catch 然后 throw 和 result 的

所以我们按照他的思路就得去看一下他的源码

uni promise

目前我的解决方案是 把 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