前端UNI-APP调用企业微信客户端API JS-SDK方法

本文详细介绍了如何在前端uni-app中调用企业微信客户端API,包括设置应用可信域名、引入js、注入应用权限及调用打开会话接口的步骤。遇到的挑战主要是官方文档不清晰,但经过研究最终成功实现。

目录

前言

一、设置应用可信域名

二、引入js

三、注入应用的权限

四、调用打开会话接口 


前言

企业微信官方的客户端API接口文档写得不太清晰,自己查阅资料,参考官方文档,历时一天,终于成功了。

后端Signature签名生成,前端UNI-APP调用企业微信客户端接口方法。


一、设置应用可信域名

所有的JS接口只能在企业微信应用的可信域名下调用(包括子域名),且可信域名必须有ICP备案且在管理端验证域名归属。
验证域名归属的方法在企业微信的管理后台“我的应用”里,进入应用,设置应用可信域名。

企业微信申请域名验证
eg: 将WW_verify_gPO4DZteSvyQZNRk.txt文件放到IIS文件夹底下

二、引入js

代码如下(示例):调用 wx.agentConfig需要引入 jwxwork sdk

<script src="//res.wx.qq.com/open/js/jweixin-1.2.0.js" type="text/javascript"></script>

三、注入应用的权限

代码如下(示例):

前提:

  1. 企业微信的corpid
  2. 企业微信的应用id
  3. 企业微信的secret

signature获取:
corpid + secret --> access_token --> ticket --> 拼接参数加密
JS-SDK使用权限签名算法

wx.agentConfig({
    corpid: '', // 必填,企业微信的corpid,必须与当前登录的企业一致
    agentid: '', // 必填,企业微信的应用id (e.g. 1000247)
    timestamp: , // 必填,生成签名的时间戳
    nonceStr: '', // 必填,生成签名的随机串
    signature: '',// 必填,签名,见附录-JS-SDK使用权限签名算法
    jsApiList: ['selectExternalContact'], //必填,传入需要使用的接口名称
    success: function(res) {
        // 回调
    },
    fail: function(res) {
        if(res.errMsg.indexOf('function not exist') > -1){
            alert('版本过低请升级')
        }
    }
});

四、调用打开会话接口 

注入应用权限之后就可以测试接口了,打开浏览器调试报错: Uncaught TypeError: wx.agentConfig is not a function
只能发布,然后通过企业微信打开URL才能测试接口

wx.openEnterpriseChat({
        // 注意:userIds和externalUserIds至少选填一个。内部群最多2000人;外部群最多500人;如果有微信联系人,最多40人
    userIds: 'zhangsan;lisi;wangwu',    //参与会话的企业成员列表,格式为userid1;userid2;...,用分号隔开。
    externalUserIds: 'wmEAlECwAAHrbWYDOK5u3Bf13xlYDAAA;wmEAlECwAAHibWYDOK5u3Af13xlYDAAA', // 参与会话的外部联系人列表,格式为userId1;userId2;…,用分号隔开。
    groupName: '讨论组',  // 会话名称。单聊时该参数传入空字符串""即可。
    chatId: "CHATID", // 若要打开已有会话,需指定此参数。如果是新建会话,chatId必须为空串
    success: function(res) {
         var chatId = res.chatId; //返回当前群聊ID,仅当使用agentConfig注入该接口权限时才返回chatId
        // 回调
    },
    fail: function(res) {
        if(res.errMsg.indexOf('function not exist') > -1){
            alert('版本过低请升级')
        }
    }
});


uni-app 中实现企业微信授权登录功能,需要结合企业微信提供的 JS-SDKuni-app 的跨端开发能力,确保能够顺利调用相关接口并完成授权登录流程。以下是实现企业微信授权登录的集成方法和步骤。 ### 1. 获取企业微信授权登录所需的参数 在企业微信中,授权登录需要以下关键参数: - **corpid**:企业微信的唯一标识。 - **agentid**:企业微信应用的 ID。 - **redirect_uri**:用户授权后的回调地址。 - **state**:用于防止 CSRF 攻击的随机字符串。 这些参数需要在企业微信管理后台配置,并确保回调地址与服务器端配置一致。 ### 2. 配置企业微信应用权限 在企业微信管理后台中,确保已开启“网页应用”功能,并配置好网页域名(需备案)。同时,确保应用已授权“成员信息”相关权限,以便获取用户信息。 ### 3. 前端 uni-app 实现授权登录流程 在 uni-app 中,可以通过 `uni.navigateTo` 或 `uni.redirectTo` 跳转至企业微信的授权登录页面。具体步骤如下: #### 3.1 构造授权登录链接 企业微信授权登录的 URL 格式如下: ``` https://open.work.weixin.qq.com/wwopen/sso/qrConnect?appid=CORPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect ``` - `CORPID`:替换为企业微信的 `corpid`。 - `REDIRECT_URI`:授权后重定向的回调链接地址,需进行 URL 编码。 - `SCOPE`:授权范围,可选 `snsapi_base`(静默授权,直接获取用户信息)或 `snsapi_userinfo`(手动授权,需用户点击确认)。 - `STATE`:随机字符串,用于防止 CSRF 攻击。 在 uni-app 中,可以使用 `uni.navigateTo` 跳转至该链接: ```javascript const corpId = 'your_corpid'; const redirectUri = encodeURIComponent('https://yourdomain.com/callback'); const scope = 'snsapi_userinfo'; const state = 'your_state'; const authUrl = `https://open.work.weixin.qq.com/wwopen/sso/qrConnect?appid=${corpId}&redirect_uri=${redirectUri}&response_type=code&scope=${scope}&state=${state}#wechat_redirect`; uni.navigateTo({ url: `/pages/webview/webview?url=${authUrl}` }); ``` #### 3.2 使用 web-view 组件加载授权页面 在 uni-app 中,可以使用 `web-view` 组件加载企业微信的授权登录页面。确保 `web-view` 的 `src` 属性指向构造好的授权 URL。 ```html <template> <view> <web-view :src="authUrl"></web-view> </view> </template> <script> export default { data() { return { authUrl: '' }; }, onLoad() { const corpId = 'your_corpid'; const redirectUri = encodeURIComponent('https://yourdomain.com/callback'); const scope = 'snsapi_userinfo'; const state = 'your_state'; this.authUrl = `https://open.work.weixin.qq.com/wwopen/sso/qrConnect?appid=${corpId}&redirect_uri=${redirectUri}&response_type=code&scope=${scope}&state=${state}#wechat_redirect`; } }; </script> ``` ### 4. 后端处理授权回调并获取用户信息 用户完成授权后,企业微信会将用户重定向至 `redirect_uri`,并附带 `code` 参数。后端需要通过 `code` 获取用户信息。 #### 4.1 获取 access_token 使用 `corpid` 和 `corpsecret` 获取 `access_token`: ``` GET https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=CORPID&corpsecret=CORPSECRET ``` #### 4.2 获取用户信息 使用 `access_token` 和 `code` 获取用户信息: ``` GET https://qyapi.weixin.qq.com/cgi-bin/user/getuserinfo?access_token=ACCESS_TOKEN&code=CODE ``` 返回的用户信息中包含 `UserId` 或 `OpenId`,可用于后续业务逻辑。 ### 5. 集成企业微信 JS-SDK 如果需要在 uni-app调用企业微信的其他客户端 API(如 `selectExternalContact`),需使用 JS-SDK 并进行签名配置。签名生成流程如下: 1. 获取 `access_token`。 2. 使用 `access_token` 获取 `jsapi_ticket`。 3. 使用 `jsapi_ticket`、`noncestr`、`timestamp` 和 `url` 生成签名。 签名生成后,调用 `wx.agentConfig` 初始化 JS-SDK: ```javascript wx.agentConfig({ corpid: 'your_corpid', agentid: 'your_agentid', timestamp: timestamp, nonceStr: 'noncestr', signature: 'signature', jsApiList: ['selectExternalContact'] }); ``` ### 6. 注意事项 - **跨域问题**:确保前后端域名一致,并配置好跨域请求。 - **安全性**:敏感信息(如 `access_token`、`jsapi_ticket`)应在后端处理,避免暴露给前端- **兼容性**:不同平台(如 H5、小程序)对 JS-SDK 的支持可能不同,需测试不同环境下的兼容性。 ### 7. 示例代码 以下是一个简单的 uni-app 授权登录流程示例: ```javascript // 获取授权 URL function getAuthUrl() { const corpId = 'your_corpid'; const redirectUri = encodeURIComponent('https://yourdomain.com/callback'); const scope = 'snsapi_userinfo'; const state = 'your_state'; return `https://open.work.weixin.qq.com/wwopen/sso/qrConnect?appid=${corpId}&redirect_uri=${redirectUri}&response_type=code&scope=${scope}&state=${state}#wechat_redirect`; } // 跳转至授权页面 uni.navigateTo({ url: `/pages/webview/webview?url=${getAuthUrl()}` }); ``` ### 8. 相关问题 企业微信授权登录在 uni-app 中的实现涉及多个环节,包括参数配置、前端跳转、后端处理等。以下是与该主题相关的几个问题,供进一步探讨: 1. 如何在 uni-app 中处理企业微信授权登录的回调? 2. 如何在 uni-app 中实现企业微信 JS-SDK 的签名配置? 3. 如何在 uni-app 中获取企业微信用户的 `UserId` 或 `OpenId`? 4. 如何确保企业微信授权登录的安全性? 5. 如何在 uni-app 中兼容企业微信不同平台的 JS-SDK 功能?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ougexingfuba

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值