最近开发了一个小程序接入企业微信的需求,企业微信的权限限制诸多,网上的完整示例又少之又少,因此踩了比较多坑,与大家分享。
在开发者工具中如果直接使用微信小程序模式,调用wx.qy接口会提示不存在,需要安装企业微信小程序模拟器插件



注意:某些api模拟器也不支持,需要真机调试
用企业微信扫小程序开发码,开启多场景调试。开启之后,在附件栏、工具栏、会话、工作台等场景打开此小程序时,都将使用本次扫码的开发版小程序来运行。

这个功能很好的解决了从其他入口无法进入开发版的问题,但开发调试的过程还是比较麻烦的
一开始是想调用wx.qy.selectExternalContact获取外部联系人信息,本以为有现成的api可以解决很简单,但直接调用一直调不通,提示session过期,才看到这个api的调用前提:
调用前提:
必须先调用过wx.qy.login,且session_key未过期,开发者可调用checkSession 检查当前登录态
当前成员必须在应用的可见范围
wx.qy.login与wx.login的用法类似,但企微端的登录和微信端的登录是两套不通的流程


注:
在调用jscode2session接口走登录流程的时候,一直提示没有权限,看了下接口的权限说明:
权限说明:
access_token必须是与小程序关联的企业微信应用secret所获得。
如果没有开发过企业微信应用,可能会对这句话费解,这个概念如果没有从头看起很容易混淆。
一开始用的是企业微信本身的secrect不行,后来在论坛上查询相关帖子说是要用小程序的secrect,但要注意这里指的secrect并不是小程序本身的AppSecrect,而是在企业微信后台创建的关联了小程序的应用的secrect,可以在企业微信后台应用管理中点击查看,发送Secret到企业微信中查看。
secret是企业应用里面用于保障数据安全的“钥匙”,每一个应用都有一个独立的访问密钥。分为以下几种:
建议开发前先阅读文档了解清楚这些基本概念
如果在调用客户管理相关API提示没有权限的话,先来看一下接口的权限说明:
权限说明:
- 企业需要使用客户联系secret或配置到可调用应用列表中的自建应用secret所获取的accesstoken来调用
- 第三方应用需具有“企业客户权限->客户基础信息”权限
- 第三方/自建应用只能获取到可见范围内的配置了客户联系功能的成员。
可以从以下方面排查:





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

当已经用正确的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之后,终于能调通了。
by Leafyyuki