1***@qq.com
1***@qq.com
  • 发布:2025-11-11 20:05
  • 更新:2025-11-11 20:05
  • 阅读:38

【鸿蒙征文】分享我 uniapp 集成鸿蒙企业微信的经验

分类:鸿蒙Next

目前跑通了应用唤起企业微信登录和分享的方案,封装了 uts 插件,特地参加鸿蒙征文活动,分享经验给大家。

插件开发背景

目前官方没有提供企业微信 sdk 的封装,工作中又需要,其实走下来不难,一通百通。大致流程如下:

  1. 下载离线 sdk 和 补充隐私协议
  2. 企业微信后台录入鸿蒙包名和 appid
  3. 编写 uts 代码和调用

了解 uts 插件开发之后几乎就是照搬了。

下载离线 sdk

企业微信文档上提供了一个下载链接,可以访问 企业内部开发-客户端API-移动端SDK-企业微信登录-Harmony应用 下载下来, lib_wwapi.har,这个先放好。

网页上还有隐私协议的文字部分,这个交给运营人员填写一下

SDK名称:企业微信登录/分享SDK
主要功能:通过企业微信登录/分享SDK,企业可在自建的app引入sdk,从而可使用企业微信账号登录app,并且在app中分享消息到企业微信。
使用说明:详见本接入指南
开发者:深圳市腾讯计算机系统有限公司
隐私政策:请接入企业微信登录/分享 SDK的开发者,认真阅读《企业微信登录/分享SDK个人信息保护规则》,并确保对企业微信登录/分享SDK的接入使用情况符合上述规则的相关要求。

微信后台录入应用信息

登录 企业微信的后台 ,提前创建好企业内部应用。然后找到应用管理,点击接入 企业微信授权登录

点开之后找到鸿蒙的信息部分,填写鸿蒙的 APPID 和包名,填写完成之后一个 scheme 存好。

以防你不知道,鸿蒙应用的包名,在华为后台这里获取,appid 是一串数字。

顺便把下面的参数提前准备好

  • 企业 id。在 企业微信的后台 找到我的企业,最下方字符串。 ww开头
  • 应用 id。在企业微信后台-应用管理-应用详情,找到 AgentId 是一串数字。数字 10 开头
  • scheme id。刚才企业微信后台填写鸿蒙应用时候展示的 scheme 字符串。wwauth 开头

编写 uts 插件

在 HBuilderX 工程中,创建 uts 插件,选择 uts api 插件开发,名称比如叫 hamrony-comwechat,定位到 app-harmony 文件夹。

工程配置与依赖。

引入企业微信 HAR 包

在插件目录 uni_modules/harmony-com-wechat/utssdk/app-harmony/config.json 声明依赖,确保 DevEco 构建时可打包。把第一步里的 sdk 放到 libs 文件夹内。

{  
  "dependencies": {  
    "@tencent/wecom_open_sdk": "./libs/lib_wwapi.har"  
  }  
}

配置 scheme

在工程 module.json5 或 manifest 中补充 querySchemes,与后台登记完全一致。["wxworkapi","https"]。否则无法被企业微信识别与拉起。

在 unpackage 里找到 app-harmony 工程产物文件,找到 entry/src/main/module.json5 赋值出来,放到 harmony-configs/entry/src/main/module.json5,添加 querySchemes

UTS 代码翻译

UTS 和 ArkTS 比较相似,Harmony 侧通过企业微信 SDK 完成安装检测与认证发起。核心流程:

  • WWAPIFactory.createWWAPI(context) 获取实例;
  • isWWAppInstalled(WWKApiAppType.AppTypeSaaS) 判断是否安装企业微信;
  • 构造 WWAuthMessage.Req,写入 scheme/corpid/agentId/scopes
  • sendMessage 拉起企业微信,回调中读取 code,交由服务端换取登录态。

编辑 uni_modules/harmony-comwechat/utssdk/app-harmony/index.uts

大部分代码都不用变,就 context 稍微改一下。

import { WWAPIFactory, WWAuthMessage, BaseMessage, WWKApiAppType, IWWAPIEventHandler } from '@tencent/wecom_open_sdk';  

export const canOpenComWechat = () => {  
    const context = UTSHarmony.getUIAbilityContext()  
    // 基本使用 导入  
    let wwapi = WWAPIFactory.createWWAPI(context)  
    return wwapi.isWWAppInstalled(WWKApiAppType.AppTypeSaaS)//是否安装了企业微信  
}  

export const handleLogin = (SCHEME : string, CORPID : string, agentId : string) => {  

    const context = UTSHarmony.getUIAbilityContext()  
    // 基本使用 导入  
    let wwapi = WWAPIFactory.createWWAPI(context)  

    let msg = new WWAuthMessage.Req("", SCHEME)  
    msg.appId = CORPID  
    msg.scopes = ["snsapi_base"]  
    msg.agentId = agentId  

    const cb : IWWAPIEventHandler = {  
        handleResp: (rsp : BaseMessage | undefined | null) : void => {  
            if (rsp !== null) {  
                console.log('res code===', rsp.code)  
                // 这里返回页面里调用后端接口  
            }  
            if (rsp instanceof WWAuthMessage.Resp) {  
                //rsp.code   
                console.info(JSON.stringify(rsp))  
            }  
        }  
    }  

    wwapi.sendMessage(context, msg, WWKApiAppType.AppTypeSaaS, cb)  
}  

说明:

  • UTSHarmony.getUIAbilityContext() 自动获取当前 UIAbility;
  • 回调中仅打印日志,留给业务侧继续把 code 发给后端做换票。
  • interface.utsunierror.uts 保持模板,后续如需统一错误码可在 MyAPIErrors 维护映射。
  • 分享和这个逻辑一样
  • 页面里使用 canOpenComWechat 返回 true 之后调用 handleLogin

页面使用

在页面按需引入并触发登录动作,以下示例来自 pages/index/index.vue(代码不变):

<script setup>  
import {canOpenComWechat,handle} from '@/uni_modules/harmony-com-wechat'  
const handle1=()=>{  
  console.log(canOpenComWechat())  
}  
const share=()=>{  
  handle('wwauthexxx','wwe2xx','1000002')  
}  
</script>

调用方法即可。回调返回的 code 需要发送至后端,与企业微信服务器完成 code2session 等后续流程。

六. 调试要点与排错清单

  • 未拉起企业微信:优先比对 querySchemes 是否与后台登记完全一致;签名与包名也需对应。
  • 已拉起但无回调:确认 agentId/scopes 是否符合该企业应用权限;企业微信端可能限制。
  • 回调拿到 code:务必在后端调用企业微信接口换票,不建议在端内直连。
  • 多环境联调:开发/测试/生产环境的 scheme/corpid/agentid 请分环境管理,避免错配。

参考文档:https://developer.work.weixin.qq.com/document/path/101021。如需扩展分享等更多能力,可沿用同一 SDK 延伸接口,有问题留言我会协助排查。

9 关注 分享
DCloud_CHB 用户2919468 CodeCrafter raise DCloud_UNI_yuhe verify VK168 DCloud_uniCloud_JSON DCloud_UNI_Anne

要回复文章请先登录注册