• 企业微信自建小程序应用踩坑实践


    最近开发了一个小程序接入企业微信的需求,企业微信的权限限制诸多,网上的完整示例又少之又少,因此踩了比较多坑,与大家分享。

    开发调试

    开发者工具中如果直接使用微信小程序模式,调用wx.qy接口会提示不存在,需要安装企业微信小程序模拟器插件

    1. 添加企业微信模拟器插件

    image.png

    2. 切换企业微信小程序模式

    image.png

    注意:某些api模拟器也不支持,需要真机调试

    3. 打开多场景调试

    用企业微信扫小程序开发码,开启多场景调试。开启之后,在附件栏、工具栏、会话、工作台等场景打开此小程序时,都将使用本次扫码的开发版小程序来运行。

    image.png

    这个功能很好的解决了从其他入口无法进入开发版的问题,但开发调试的过程还是比较麻烦的

    企业微信端小程序登录流程和微信端小程序登录不同

    一开始是想调用wx.qy.selectExternalContact获取外部联系人信息,本以为有现成的api可以解决很简单,但直接调用一直调不通,提示session过期,才看到这个api的调用前提:

    调用前提:
    必须先调用过wx.qy.login,且session_key未过期,开发者可调用checkSession 检查当前登录态
    当前成员必须在应用的可见范围

    wx.qy.loginwx.login的用法类似,但企微端的登录和微信端的登录是两套不通的流程

    • 微信端小程序登录
      image.png
    • 企微端小程序登录

    image.png

    注:

    • 企业微信端也是支持wx.login的,如只需使用wx.xx(微信端api)不需要走企业微信登录。
    • 如需获取到当前企业微信用户在当前企业的员工身份信息、联系人信息等企业微信相关用户信息,则必须走企业微信登录流程。

    access_token必须是与小程序关联的企业微信应用secret所获得

    在调用jscode2session接口走登录流程的时候,一直提示没有权限,看了下接口的权限说明:

    权限说明:
    access_token必须是与小程序关联的企业微信应用secret所获得。

    如果没有开发过企业微信应用,可能会对这句话费解,这个概念如果没有从头看起很容易混淆。

    一开始用的是企业微信本身的secrect不行,后来在论坛上查询相关帖子说是要用小程序的secrect,但要注意这里指的secrect并不是小程序本身的AppSecrect,而是在企业微信后台创建的关联了小程序的应用的secrect,可以在企业微信后台应用管理中点击查看,发送Secret到企业微信中查看。

    secret是企业应用里面用于保障数据安全的“钥匙”,每一个应用都有一个独立的访问密钥。分为以下几种:

    • 自建应用secret
    • 基础应用secret
    • 通讯录管理secret
    • 外部联系人管理secret

    建议开发前先阅读文档了解清楚这些基本概念

    API权限

    如果在调用客户管理相关API提示没有权限的话,先来看一下接口的权限说明:

    权限说明:

    • 企业需要使用客户联系secret或配置到可调用应用列表中的自建应用secret所获取的accesstoken来调用
    • 第三方应用需具有“企业客户权限->客户基础信息”权限
    • 第三方/自建应用只能获取到可见范围内的配置了客户联系功能的成员。

    可以从以下方面排查:

    1. 获取accesstoken的secrect有没有用对

    • 一种方法是可以直接使用客户联系secrect:

    image.png

    • 如果使用的是自建应用的secrect,还需要把当前应用配置到客户联系可调用列表:

    image.png

    2. 获取客户联系的成员是否配置应用可见范围

    image.png

    3. 是否配置了客户联系功能权限:

    image.png

    可以感受到企业微信为了保护客户的隐私信息,做了很多的权限控制,有一套完善的权限体系
    • 应用可见范围

    image.png

    • 应用调用 OpenApi 权限

    大致的调用流程如下图所示:

    image.png

    企业可信ip

    当已经用正确的secrect获取到accesstoken后,调用接口又提示了报错:

    {
        "errcode": 60020,
        "errmsg": "not allow to access from your ip, hint: [xxx], from ip: xx.xx.xx.xx,...
    }
    
    • 1
    • 2
    • 3
    • 4

    需要在企业微信后台配置应用的可信ip,只有配置了可信ip,才能够调到企业微信的接口。

    而在配置企业可信ip前,必须要先设置可信域名设置接受消息服务器URL (即使你并不需要用到…)

    image.png

    设置可信域名需完成域名归属认证 ,即在域名根目录上传小程序校验文件

    image.png
    配置完可信ip之后,终于能调通了。

    总结

    1. 开始企业微信开发前先阅读官方文档开发指南,了解清楚基本概念、开发流程、配置方法,也便于后续阅读接口文档相关术语的理解。
    2. 开发者工具需安装企微插件用于调试部分企微api,对于工具无法模拟的场景需要真机开启多场景调试。
    3. 调用企业微信相关接口前,需仔细阅读接口的调用前提和权限说明。
    4. 调用openApi时,需要走企业微信内小程序登录流程、配置相关权限、配置企业可信ip。
    5. 不知道为啥接口调用失败可以使用错误码查询工具,在接口请求url里加上debug=1参数之后从接口返回的errmsg复制出hint值查询。

    by Leafyyuki

  • 相关阅读:
    【OSCAR开源产业大会分论坛】开源大模型走向何方?
    机器学习分类模型评价指标之ROC 曲线、 ROC 的 AUC 、 ROI 和 KS
    建筑能源管理(2)——建筑用能分类与计算方法
    antd react 文件上传只允许上传一个文件且上传后隐藏上传按钮
    on java8之初始化和清理
    Flutter 应用程序中的 Quick Actions
    【LeetCode】66. 加一
    web3 React dapp中编写balance组件从redux取出并展示用户资产
    苹果cms大橙子vfed 5.0去授权完美破解主题模板
    MySQL高频bug,不看就亏了
  • 原文地址:https://blog.csdn.net/vipshop_fin_dev/article/details/133225287