更新记录

0.0.1(2026-04-07) 下载此版本

Version: 0.0.1

新增企微鉴权登录插件


平台兼容性

uni-app(4.07)

Vue2 Vue3 Chrome Safari app-vue app-nvue Android iOS 鸿蒙
× × × × - - 5.0 12 ×
微信小程序 支付宝小程序 抖音小程序 百度小程序 快手小程序 京东小程序 鸿蒙元服务 QQ小程序 飞书小程序 小红书小程序 快应用-华为 快应用-联盟
× × × × × × × × × × × ×

uni-app x(4.07)

Chrome Safari Android iOS 鸿蒙 微信小程序
× × 5.0 12 × ×

插件API

uni-wecom-auth 插件对外提供 3 个API。下面逐一说明。

1.1 sendWecomAuth(options)

作用:发起企业微信 OAuth 授权。调用后会拉起企业微信 App,用户在企微中确认授权后,通过回调返回授权码 code

引入方式

// #ifdef APP-PLUS
import { sendWecomAuth } from '@/uni_modules/uni-wecom-auth'
// #endif

调用示例

sendWecomAuth({
    corpId: 'xxxxxxxxxxxxxxxx',
    agentId: 'xxxxxxx',
    schema: 'wxxxxxxxxxxxxxxxxxxxxxxxxxx',
    success: function(res) {
        console.log('授权码:', res.code)
        console.log('state:', res.state)
    },
    fail: function(err) {
        console.log('错误码:', err.errCode)
        console.log('错误信息:', err.errMsg)
    },
    complete: function() {
        console.log('授权流程结束')
    }
})

参数 options 类型为 WecomLoginOptions,字段如下

字段 类型 必传 说明
corpId string 企业 CorpID。在企业微信管理后台 → 我的企业 → 企业信息中获取
agentId string 自建应用的 AgentID。在企业微信管理后台 → 应用管理 → 自建应用详情中获取
schema string 否(建议传) 企业微信管理后台配置的 Schema 值。格式一般为 wwauth + corpId 后缀 + agentId,例如 wwauth1e933be11645237c000012。如果不传,插件会用 "wwauth" + corpId + agentId 自动拼接,但拼接结果不一定正确,建议从管理后台复制准确值
state string 防 CSRF 的随机字符串。如果不传,插件会自动生成一个 16 位随机字符串。生产环境建议由后端生成并校验
success function(res) 授权成功回调。参数 res 类型为 WecomLoginResult,见下方说明
fail function(err) 授权失败回调。参数 err 类型为 WecomLoginError,见下方说明
complete function() 授权完成回调,无论成功或失败都会调用。无参数

返回值:无(void)。结果通过 success / fail / complete 回调返回。

内部流程

  1. 校验 corpIdagentId 是否为空,为空则立即触发 fail + complete
  2. 初始化企微原生 SDK(Android 使用 IWWAPI,iOS 使用 WWKApi
  3. 构造授权请求并拉起企业微信 App
  4. 用户在企微中确认授权后,SDK 通过原生回调返回结果
  5. 插件将原生回调结果封装为 WecomLoginResultWecomLoginError,触发对应的 successfail 回调
  6. 最后触发 complete 回调

注意事项

  • corpIdagentId 不能为空字符串,否则直接触发 fail(errCode = 10004)
  • 如果企业微信未安装,iOS 端会在 SDK 内部检测并触发 fail(errCode = 10001);Android 端建议先调用 isWecomInstalled() 手动检查
  • 调用此函数后,用户会离开当前 App 进入企业微信,页面的 onHide 会触发;用户返回后 onShow 会触发。关于时序处理,参见文档 3.6 节
  • iOS 端必须在 App.vue 中配合 handleWecomOpenURL 使用,否则收不到 success 回调

1.2 isWecomInstalled()

作用:检查当前设备是否已安装企业微信 App。同步调用,立即返回结果。

引入方式

// #ifdef APP-PLUS
import { isWecomInstalled } from '@/uni_modules/uni-wecom-auth'
// #endif

调用示例

// #ifdef APP-PLUS
var result = isWecomInstalled()
console.log('企业微信已安装:', result.installed)

if (!result.installed) {
    uni.showModal({
        title: '提示',
        content: '请先安装企业微信 App',
        showCancel: false
    })
    return
}
// #endif

参数:无。

返回值类型为 IsWecomInstalledResult

字段 类型 说明
installed boolean true 表示已安装,false 表示未安装

平台差异

平台 检测方式
Android 通过 PackageManager 查询包名 com.tencent.wework 是否存在
iOS 通过企微 SDK 的 WWKApi.isAppInstalled() 方法检测

注意事项

  • 这是同步方法,不需要回调,直接使用返回值即可
  • 建议在调用 sendWecomAuth() 之前先调用此方法检查,避免拉起授权后因企微未安装而报错
  • 只检测是否安装,不检测企微是否已登录账号

1.3 handleWecomOpenURL(url)

作用:将企业微信回调的 URL 交给 SDK 解析,使 SDK 能触发授权结果回调。仅 iOS 需要调用此方法

引入方式

// #ifdef APP-PLUS
import { handleWecomOpenURL } from '@/uni_modules/uni-wecom-auth'
// #endif

调用示例

App.vue 中拦截 URL Scheme 并传给插件:

handleSchemeUrl: function() {
    var args = plus.runtime.arguments
    if (!args) return

    // 企业微信回调 URL 以 wxwork 或 wwauth 开头
    if (args.indexOf('wxwork') === 0 || args.indexOf('wwauth') === 0) {
        var handled = handleWecomOpenURL(args)
        console.log('URL 处理结果:', handled)
        plus.runtime.arguments = ''
        return
    }
}

参数

字段 类型 必传 说明
url string 企业微信回调给 App 的完整 URL 字符串,从 plus.runtime.arguments 获取

返回值

类型 说明
boolean true 表示 SDK 识别并处理了该 URL,false 表示非企微回调 URL 或处理失败

平台差异

平台 行为
iOS 将 URL 传给 WWKApi.handleOpen(url, delegate) 解析,SDK 解析后触发 WWKApiDelegate.onResp 回调,最终触发 sendWecomAuthsuccessfail
Android 不需要调用。Android SDK 通过 IWWAPIEventHandler.handleResp 直接回调,不走 URL Scheme。此方法在 Android 端仅为保持导出一致性,调用后直接返回 false,不做任何处理

注意事项

  • 只有 iOS 端需要调用此方法。如果遗漏,表现为:能拉起企微、用户也完成了授权,但前端收不到 success 回调
  • 需要同时在 onLaunchnewintent 事件中调用,分别处理冷启动和热启动两种场景
  • 处理完毕后应清空 plus.runtime.arguments,防止重复处理
  • 虽然 Android 端调用此方法不会报错,但没有实际效果

1.4 错误码

插件定义了以下错误码,通过 fail 回调的 err.errCode 返回:

错误码 常量名 含义 常见原因
0 WECOM_SUCCESS 成功 正常,不会出现在 fail 回调中
10001 WECOM_NOT_INSTALLED 企业微信未安装 iOS 端 SDK 内部检测到未安装时返回
10002 WECOM_USER_CANCEL 用户取消授权 用户在企微中点击了取消或返回。注意:企微未登录时被中断也可能返回此错误码
10003 WECOM_AUTH_DENIED 授权被拒绝 企微 SDK 返回授权失败,或授权成功但未取到 code
10004 WECOM_INVALID_PARAMS 参数错误 corpIdagentId 为空字符串
10005 WECOM_SDK_INIT_FAILED SDK 初始化/发送失败 Android 端 sendMessage 返回 false,或 iOS 端 send 的 completionHandler 返回非 OK 状态。通常是企微未安装或运行异常
10006 WECOM_NOT_LOGGED_IN 企业微信未登录 预留错误码,目前未使用(企微未登录时 SDK 通常返回 WECOM_USER_CANCEL
10099 WECOM_UNKNOWN 未知错误 Android 端收到非标准的 errCode(如 errCode=5 表示签名校验失败)

关于 errCode=5(Android):如果 Android 端收到 errCode=5 且 errMsg 包含 no_priveleges,说明企微后台配置的应用签名与实际 APK 签名不匹配。Android 签名必须使用企微官方提供的签名工具 APK 生成,不能直接使用证书的 SHA1 指纹。


示例

以下是一个完整的登录页示例

<template>
  <view>
    <button :loading="loading" @click="handleWecomLogin">
      <text>企业微信登录</text>
    </button>
  </view>
</template>

<script>
  // #ifdef APP-PLUS
  import {
    sendWecomAuth,
    isWecomInstalled,
  } from "@/uni_modules/uni-wecom-auth";
  // #endif

  export default {
    data: function () {
      return {
        loading: false,
        pendingWecomAuth: false,
      };
    },

    onShow: function () {
      // #ifdef APP-PLUS
      if (this.pendingWecomAuth) {
        var self = this;
        // 延迟检查,给 SDK 回调足够时间先执行
        setTimeout(function () {
          if (self.pendingWecomAuth) {
            // SDK 回调未完成,自动重新发起授权
            self.pendingWecomAuth = false;
            self.handleWecomLogin();
          }
        }, 1500);
      }
      // #endif
    },

    methods: {
      handleWecomLogin: function () {
        this.loading = true;
        var self = this;

        // #ifdef APP-PLUS
        var checkResult = isWecomInstalled();
        if (!checkResult.installed) {
          self.loading = false;
          uni.showModal({
            title: "提示",
            content: "请先安装企业微信 App",
            showCancel: false,
          });
          return;
        }

        // 标记授权流程进行中
        self.pendingWecomAuth = true;

        sendWecomAuth({
          corpId: "你的企业 CorpID",
          agentId: "你的应用 AgentID",
          schema: "企业微信后台配置的 Schema 值",
          success: function (res) {
            // 授权成功,清除待授权标记
            self.pendingWecomAuth = false;
            self.loading = false;
            // 提交 code 给后端,完成登录...
          },
          fail: function (err) {
            self.loading = false;
            // 不清除 pendingWecomAuth,保持为 true
            // 让 onShow 检测到授权未完成并自动重试
          },
          complete: function () {
            self.loading = false;
            // 同样不在 complete 中清除 pendingWecomAuth
          },
        });
        // #endif
      },
    },
  };
</script>

隐私、权限声明

1. 本插件需要申请的系统权限列表:

Android - 权限: android.permission.INTERNET 用途: 网络访问,用于企业微信 SDK 通信 - 权限: android.permission.ACCESS_NETWORK_STATE 用途:检查网络连接状态 iOS: 无

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

插件自身不采集任何数据,插件使用的企业微信移动端SDK采集数据请参考其官方说明:https://work.weixin.qq.com

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

许可协议

MIT协议

暂无用户评论。