企业微信创建自建应用-1(管理端)

时间:2024-03-06 12:13:25

企业微信逐步收紧通讯录权限搞的第三方服务商鸡飞狗跳,如果对权限要求比较高的话尽量使用自建应用模式。两种模式大部分API都相同,重构一个自建应用版本工作量不大

刚好通过这次重构项目记录下创建自建应用的步骤。

为了习惯,分成了管理端(后台,在浏览器输入网址方式)+手机端(电脑端的企业微信登录也算手机端)两部分。

文档链接:https://work.weixin.qq.com/api/doc/90000/90135/91022

1、登录企业微信

点击应用管理-》应用-》自建-》创建应用

 

 

 2、创建应用后,agentid和secret后面会用到,corpid有的是wx开头,有的以ww开头。

 3、如果使用企业微信扫码登录的话,需要在这里设置授权回调域名

 

 

 

 

 4、需要注意的是这个回调域名必须严格和下面的redirect_uri一致

 

 

 

开发者需要构造如下的链接来获取code参数:

  1. 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

示例:

    1. 假定当前
    2. 企业CorpIDwxCorpId
    3. 开启授权登录的应用ID1000000
    4. 登录跳转链接:http://api.3dept.com
    5. state设置为:weblogin@gyoss9
    6. 需要配置的授权回调域为:api.3dept.com
    7. 根据URL规范,将上述参数分别进行UrlEncode,得到拼接的OAuth2链接为:
    8. 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) 当用户为企业成员时返回示例如下:

  1. {
  2. "errcode": 0,
  3. "errmsg": "ok",
  4. "UserId":"USERID"
  5. }
参数说明
errcode 返回码
errmsg 对返回码的文本描述内容
UserId 成员UserID。若需要获得用户详情信息,可调用通讯录接口:读取成员

b) 非企业成员授权时返回示例如下:

  1. {
  2. "errcode": 0,
  3. "errmsg": "ok",
  4. "OpenId":"OPENID"
  5. }
参数说明
errcode 返回码
errmsg 对返回码的文本描述内容
OpenId 非企业成员的标识,对当前企业唯一

出错返回示例:

    1. {
    2. "errcode": 40029,
    3. "errmsg": "invalid code"
    4. }

6、使用senparc库可以减少开发工作量,示例:

senparc.Weixin.QY.AdvancedAPIs
获取用户id,Senparc.Weixin.QY.AdvancedAPIs.OAuth2Api.GetUserId

7、为了处理接收通讯录回调消息,需要设置接收事件服务器,这里的secret如果不进行通讯录写操作的话,不需要使用.