企业内部开发 客户端API WECOM-JSSDK 开发指南
开发指南
最后更新:2024/03/19
可联系渠道经理采购或代理智慧硬件接口已支持设备 联系渠道经理
开发指南
最后更新:2024/03/19

目录

  • 概述
  • 开始使用
  • JS 接口鉴权
  •       企业身份与权限
  •       应用身份与权限
  • 应用登录鉴权
  • 接口约定
  • 快速接入
  • 概述

    使用过程中遇到问题,欢迎通过「反馈纠错」入口进行反馈。旧版本(原JS-SDK)仍支持使用,相较旧版本WECOM-JSSDK提供了Typescript类型支持、npm引入等新能力。

    企业微信 WECOM-JSSDK为网页应用提供了调用原生能力的通道。网页应用通过 WECOM-JSSDK 可以调起拍照、选择图片、录音、获取地理位置信息等手机系统能力。同时可以使用企业微信分享、扫一扫等企业微信微信特有能力,为企业微信用户提供更优质的网页应用体验。

    开始使用

    注意:所有 JSAPI 都必须在企业微信应用的可信域名及其子域名下调用,可信域名必须具有 ICP 备案且在管理端完成域名归属验证

    企业微信 WECOM-JSSDK提供了 npm 和 cdn 两种引入途径。

    1. 通过 npm 引入
      npm install @wecom/jssdk

      安装完成后即可在应用中使用 SDK:
      import * as ww from '@wecom/jssdk'
    2. 通过 script 标签引入
      <script src="https://wwcdn.weixin.qq.com/node/open/js/wecom-jssdk-1.3.1.js"></script>

      SDK 会在 window 上定义 ww 对象:
      <script>
        alert(ww.SDK_VERSION)
      </script>

    JS 接口鉴权

    在调用 JSAPI 前,需要先通过 ww.register 注册当前页面的身份信息。身份信息分为两种:

    • 企业身份与权限
    • 应用(自建应用/第三方应用等)身份与权限

    使用者可根据具体调用的JSAPI所要求的权限来选择是否注册应用身份。

    企业身份与权限

    ww.register({
      corpId: 'ww7ca4776b2a70000',       // 必填,当前用户企业所属企业ID
      jsApiList: ['getExternalContact'], // 必填,需要使用的JSAPI列表
      getConfigSignature                 // 必填,根据url生成企业签名的回调函数
    })
    
    async function getConfigSignature(url) {
      // 根据 url 生成企业签名
      // 生成方法参考 https://developer.work.weixin.qq.com/document/path/90539
      return { timestamp, nonceStr, signature }
    }

    在注册应用身份信息时,开发者需要提供对应的签名函数。该函数需要根据当前页面的 URL 和应用的 Secret 等信息生成 JS-SDK 签名并返回相关信息。详见 JS-SDK 签名算法

    注意:

    • 参数中的回调函数调用时机由 JSSDK 自行控制,开发者无需关心具体调用顺序
    • 用于生成签名的 jsapi_ticket 属于敏感信息,请在服务端完成签名操作

    应用身份与权限

    应用在原有企业身份信息的基础上,需要额外提供应用身份信息(原 agentConfig):

    ww.register({
      corpId: 'ww7ca4776b2a70000',       // 必填,当前用户企业所属企业ID
      agentId: 1000247,                  // 必填,当前应用的AgentID
      jsApiList: ['getExternalContact'], // 必填,需要使用的JSAPI列表
      getConfigSignature,                // 必填,根据url生成企业签名的回调函数
      getAgentConfigSignature            // 必填,根据url生成应用签名的回调函数
    })
    
    async function getConfigSignature(url) {
      // 根据 url 生成企业签名
      // 生成方法参考 https://open.work.weixin.qq.com/api/doc/90001/90144/93197
      return { timestamp, nonceStr, signature }
    }
    
    async function getAgentConfigSignature(url) {
      // 根据 url 生成应用签名,生成方法同上,但需要使用应用的 jsapi_ticket
      return { timestamp, nonceStr, signature }
    }

    应用在原有签名函数的基础上,需要额外提供应用的AgentID以及应用签名函数。和原有的签名函数不同,应用签名函数需要使用应用的 jsapi_ticket。见 获取应用 jsapi_ticket

    注意:用于生成签名的 jsapi_ticket 属于敏感信息,请在服务端完成签名操作。

    应用登录鉴权

    当企业未安装应用时,可以通过授权应用的登录权限,获得某些接口的调用权限(e.g. 分享消息)。

    ww.register({
      corpId: 'ww7ca4776b2a70000',       // 必填,当前用户企业所属企业ID
      suiteId: 'wwxxxxxx',               // 必填,当前授权的SuiteID
      jsApiList: ['shareAppMessage'], 	 // 必填,需要使用的JSAPI列表
      getSuiteConfigSignature,			 // 必填,生成应用登录授权的签名
    })
    
    async function getSuiteConfigSignature(url) {
      // 根据 url 生成应用签名,生成方法同上,但需要使用应用登录授权的 jsapi_ticket
      return { timestamp, nonceStr, signature }
    }

    参考

    jsapi_ticket 获取见:获取登录授权应用的jsapi_ticket
    SuiteID 获取见:服务商管理后台 -> 应用管理 -> 登录授权
    enter image description here

     

    注意:用于生成签名的 jsapi_ticket 属于敏感信息,请在服务端完成签名操作。

    接口约定

    在调用 ww.register 后,页面可以立刻调用其他 JSAPI,JS-SDK 内部会自行处理注册身份信息的时序。这里约定两种通用的 JS 接口调用形式:

    1. 命令接口:

    ww.方法名({
      参数: xxx,
      success(result) {
        // 成功回调,result.errMsg 固定格式为“方法名:ok”
      },
      fail(result) {
        // 失败回调,通过 result.errMsg 查看失败详情
      },
      complete(result) {
        // 完成回调,无论调用成功还是失败,都会回调该方法
      }
    })

    2. 事件接口:

    ww.on事件名(event => {
      // 事件发生时回调
    })

    另外所有命令接口均会返回 promise,开发者也可以通过 promise 的回调获取调用结果:

    const { errMsg, userIds } = await ww.selectExternalContact()
    // errMsg === 'selectExternalContact:ok'

    快速接入

    为方便开发者快速接入,JS-SDK 提供了 getSignature 方法,开发者可以通过内联 jsapi_ticket 在页面上生成 JSAPI 签名:

    // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    // 该代码仅用于快速接入,请勿在生产环境对外暴露JSAPI_TICKET
    // Ticket有效期为2个小时,过期后请手动更换
    // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    const JSAPI_TICKET = 'sM4AOVdWfPE4DxkXGEs8VMCPGGVi4C3VM0P37wVUCFvkVAy_90u5h9nbSlYy3-Sl-HhTdfl2fzFy1AOcHKP7qg '
    
    ww.register({
      corpId: 'ww7ca4776b2a70000',
      jsApiList: ['selectExternalContact'],
      getConfigSignature() {
        return ww.getSignature(JSAPI_TICKET)
      }
    })
    
    // 调用 register 后可以立刻调用其他 JS 接口
    ww.selectExternalContact({
      success(res) {
        alert(JSON.stringify(res))
      }
    })

    jsapi_ticket 的获取方法可以参考获取企业 jsapi_ticket获取应用 jsapi_ticket,在开发阶段我们也可以通过以下命令快速获取:

    # CORPID、SECRET为占位符,请自行填入真实的企业ID和应用Secret
    npx wwutil ticket CORPID SECRET
    上一篇
    下载直播回放
    下一篇
    ww.register