- 企业微信自建小程序应用踩坑实践
最近开发了一个小程序接入企业微信的需求,企业微信的权限限制诸多,网上的完整示例又少之又少,因此踩了比较多坑,与大家分享。 坑1: 开发调试 在开发者工具中如果直接使用微信小程序模式,调用wx.qy接口会提示不存在,需要安装企业微信小程序模拟器插件 添加企业微信模拟器插件 [图片] [图片] 切换企业微信小程序模式 [图片] 注意:某些api模拟器也不支持,需要真机调试 打开多场景调试 用企业微信扫小程序开发码,开启多场景调试。开启之后,在附件栏、工具栏、会话、工作台等场景打开此小程序时,都将使用本次扫码的开发版小程序来运行。 [图片] 这个功能很好的解决了从其他入口无法进入开发版的问题,但开发调试的过程还是比较麻烦的 坑2: 企业微信端小程序登录流程和微信端小程序登录不同 一开始是想调用wx.qy.selectExternalContact获取外部联系人信息,本以为有现成的api可以解决很简单,但直接调用一直调不通,提示session过期,才看到这个api的调用前提: 调用前提: 必须先调用过wx.qy.login,且session_key未过期,开发者可调用checkSession 检查当前登录态 当前成员必须在应用的可见范围 [代码]wx.qy.login[代码]与[代码]wx.login[代码]的用法类似,但企微端的登录和微信端的登录是两套不通的流程 微信端小程序登录 [图片] 企微端小程序登录 [图片] 注: 企业微信端也是支持wx.login的,如只需使用wx.xx(微信端api)不需要走企业微信登录。 如需获取到当前企业微信用户在当前企业的员工身份信息、联系人信息等企业微信相关用户信息,则必须走企业微信登录流程。 坑3: access_token必须是与小程序关联的企业微信应用secret所获得 在调用jscode2session接口走登录流程的时候,一直提示没有权限,看了下接口的权限说明: 权限说明: access_token必须是与小程序关联的企业微信应用secret所获得。 如果没有开发过企业微信应用,可能会对这句话费解,这个概念如果没有从头看起很容易混淆。 一开始用的是企业微信本身的secrect不行,后来在论坛上查询相关帖子说是要用小程序的secrect,但要注意这里指的secrect并不是小程序本身的AppSecrect,而是在企业微信后台创建的关联了小程序的应用的secrect,可以在企业微信后台应用管理中点击查看,发送Secret到企业微信中查看。 secret是企业应用里面用于保障数据安全的“钥匙”,每一个应用都有一个独立的访问密钥。分为以下几种: 自建应用secret 基础应用secret 通讯录管理secret 外部联系人管理secret 建议开发前先阅读文档了解清楚这些基本概念:https://developer.work.weixin.qq.com/document/path/90665 坑4: 客户联系API权限 如果在调用客户管理相关API提示没有权限的话,先来看一下接口的权限说明: 权限说明: 企业需要使用客户联系secret或配置到可调用应用列表中的自建应用secret所获取的accesstoken来调用 第三方应用需具有“企业客户权限->客户基础信息”权限 第三方/自建应用只能获取到可见范围内的配置了客户联系功能的成员。 可以从以下方面排查: 获取accesstoken的secrect有没有用对 一种方法是可以直接使用客户联系secrect: [图片] 如果使用的是自建应用的secrect,还需要把当前应用配置到客户联系可调用列表: [图片] 获取客户联系的成员是否配置应用可见范围 [图片] 是否配置了客户联系功能权限: [图片] 可以感受到企业微信为了保护客户的隐私信息,做了很多的权限控制,有一套完善的权限体系: 应用可见范围 [图片] 应用调用 OpenApi 权限 大致的调用流程如下图所示: [图片] 坑5: 企业可信ip 当已经用正确的secrect获取到accesstoken后,接口又提示了报错: [代码]{ "errcode": 60020, "errmsg": "not allow to access from your ip, hint: [xxx], from ip: xx.xx.xx.xx,... } [代码] 需要在企业微信后台配置应用的可信ip,只有配置了可信ip,才能够调到企业微信的接口。 而在配置企业可信ip前,必须要先设置可信域名 或 设置接受消息服务器URL (即使你并不需要用到…) [图片] 设置可信域名需完成域名归属认证,即在域名根目录上传小程序校验文件 [图片] 配置完可信ip之后,终于能调通了。。。 总结 开始企业微信开发前先阅读官方文档开发指南,了解清楚基本概念、开发流程、配置方法,也便于后续阅读接口文档相关术语的理解。 开发者工具需安装企微插件用于调试部分企微api,对于工具无法模拟的场景需要真机开启多场景调试。 调用企业微信相关接口前,需仔细阅读接口的调用前提和权限说明。 调用openApi时,需要走企业微信内小程序登录流程、配置相关权限、配置企业可信ip。 不知道为啥接口调用失败可以使用错误码查询工具,在接口请求url里加上debug=1参数之后从接口返回的errmsg复制出hint值查询。
2023-09-25 - 迁移公众号,openId转换接口,一直返回 errcode : 63178 ? (结帖)
参数access_token是新公众号的token,appId是旧公众号的appId,参数都无误,请求链接也是https的(官网错误),但是调用一直返回63178;双方管理员也确认迁移了。结果一直提示{"errcode":63178,"errmsg":"appid wrong rid: 605c4ce1-1279f77e-3a826739"} 有谁遇到吗?
2021-03-26 - openId转换的问题,如果旧的公众号注销了,openId转换的接口是不是不能调用了?
场景:客户迁移公众号操作,然后旧的公众号注销掉了,公众号迁移完成之后,对于openId需要做转换处理,转换到新的公众号,调用openId转换接口http://api.weixin.qq.com/cgi-bin/changeopenid?access_token=xxxxx 在post请求过去之后直接返回 code=500, msg=com.riversoft.weixin.common.exception.WxRuntimeException: Moved Permanently 查看openId转换接口,需要的参数是旧公众号的appId 现在的问题是:是否是因为旧公众号被注销的问题,导致openId转换接口调用异常呢? 客户参考的迁移方式 [图片]
2021-03-25