企业微信逐步收紧通讯录权限搞的第三方服务商鸡飞狗跳,如果对权限要求比较高的话尽量使用自建应用模式。两种模式大部分API都相同,重构一个自建应用版本工作量不大
刚好通过这次重构项目记录下创建自建应用的步骤。
为了习惯,分成了管理端(后台,在浏览器输入网址方式)+手机端(电脑端的企业微信登录也算手机端)两部分。
文档链接:https://work.weixin.qq.com/api/doc/90000/90135/91022
1、登录企业微信
点击应用管理-》应用-》自建-》创建应用
2、创建应用后,agentid和secret后面会用到,corpid有的是wx开头,有的以ww开头。
3、如果使用企业微信扫码登录的话,需要在这里设置授权回调域名
4、需要注意的是这个回调域名必须严格和下面的redirect_uri一致
开发者需要构造如下的链接来获取code参数:
https://open.work.weixin.qq.com/wwopen/sso/qrConnect?appid=CORPID&agentid=AGENTID&redirect_uri=REDIRECT_URI&state=STATE
参数说明
参数 | 必须 | 说明 |
---|---|---|
appid | 是 | 企业微信的CorpID,在企业微信管理端查看 |
agentid | 是 | 授权方的网页应用ID,在具体的网页应用中查看 |
redirect_uri | 是 | 重定向地址,需要进行UrlEncode |
state | 否 | 用于保持请求和回调的状态,授权请求后原样带回给企业。该参数可用于防止csrf攻击(跨站请求伪造攻击),建议企业带上该参数,可设置为简单的随机数加session进行校验 |
若提示“该链接无法访问”,请检查参数是否填写错误,如redirect_uri的域名与网页应用的可信域名不一致
返回说明
用户允许授权后,将会重定向到redirect_uri的网址上,并且带上code和state参数
redirect_uri?code=CODE&state=STATE
若用户禁止授权,则重定向后不会带上code参数,仅会带上state参数
redirect_uri?state=STATE
示例:
假定当前
企业CorpID:wxCorpId
开启授权登录的应用ID:1000000
登录跳转链接:http://api.3dept.com
state设置为:weblogin@gyoss9
需要配置的授权回调域为:api.3dept.com
根据URL规范,将上述参数分别进行UrlEncode,得到拼接的OAuth2链接为:
https://open.work.weixin.qq.com/wwopen/sso/qrConnect?appid=wxCorpId&agentid=1000000&redirect_uri=http%3A%2F%2Fapi.3dept.com&state=web_login%40gyoss9
5、获取用户访问身份
该接口用于根据code获取成员信息
请求方式:GET(HTTPS)
请求地址:https://qyapi.weixin.qq.com/cgi-bin/user/getuserinfo?access_token=ACCESS_TOKEN&code=CODE
参数说明:
参数 | 必须 | 说明 |
---|---|---|
access_token | 是 | 调用接口凭证 |
code | 是 | 通过成员授权获取到的code,最大为512字节。每次成员授权带上的code将不一样,code只能使用一次,5分钟未被使用自动过期。 |
权限说明:
跳转的域名须完全匹配access_token对应应用的可信域名,否则会返回50001错误。
返回结果:
a) 当用户为企业成员时返回示例如下:
{
"errcode": 0,
"errmsg": "ok",
"UserId":"USERID"
}
参数 | 说明 |
---|---|
errcode | 返回码 |
errmsg | 对返回码的文本描述内容 |
UserId | 成员UserID。若需要获得用户详情信息,可调用通讯录接口:读取成员 |
b) 非企业成员授权时返回示例如下:
{
"errcode": 0,
"errmsg": "ok",
"OpenId":"OPENID"
}
参数 | 说明 |
---|---|
errcode | 返回码 |
errmsg | 对返回码的文本描述内容 |
OpenId | 非企业成员的标识,对当前企业唯一 |
出错返回示例:
{
"errcode": 40029,
"errmsg": "invalid code"
}
senparc库可以减少开发工作量,示例:6、使用
senparc.Weixin.QY.AdvancedAPIs
获取用户id,Senparc.Weixin.QY.AdvancedAPIs.OAuth2Api.GetUserId
7
、为了处理接收通讯录回调消息,需要设置接收事件服务器,这里的secret如果不进行通讯录写操作的话,不需要使用.