更新记录
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 回调返回。
内部流程:
- 校验
corpId和agentId是否为空,为空则立即触发fail+complete - 初始化企微原生 SDK(Android 使用
IWWAPI,iOS 使用WWKApi) - 构造授权请求并拉起企业微信 App
- 用户在企微中确认授权后,SDK 通过原生回调返回结果
- 插件将原生回调结果封装为
WecomLoginResult或WecomLoginError,触发对应的success或fail回调 - 最后触发
complete回调
注意事项:
corpId和agentId不能为空字符串,否则直接触发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 回调,最终触发 sendWecomAuth 的 success 或 fail |
| Android | 不需要调用。Android SDK 通过 IWWAPIEventHandler.handleResp 直接回调,不走 URL Scheme。此方法在 Android 端仅为保持导出一致性,调用后直接返回 false,不做任何处理 |
注意事项:
- 只有 iOS 端需要调用此方法。如果遗漏,表现为:能拉起企微、用户也完成了授权,但前端收不到
success回调 - 需要同时在
onLaunch和newintent事件中调用,分别处理冷启动和热启动两种场景 - 处理完毕后应清空
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 |
参数错误 | corpId 或 agentId 为空字符串 |
| 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>

收藏人数:
下载插件并导入HBuilderX
赞赏(0)
下载 4
赞赏 0
下载 11493414
赞赏 1903
赞赏
京公网安备:11010802035340号