一、序言

本教程根据运用处景进行划分,重点阐述企业微信在不同运用处景下的开拓思路,同时讲解利用的接口及细节。

进行企业微信运用开拓之前须要准备:

1. 可供外网访问做事器用于发布运用,调用官方API及处理官方做事器的回调事宜。
开拓阶段,可以将本地机器作为做事器,只须要安装类似花生壳的软件实现内网穿透,末了在企业微信将域名加至可信域名列表中。

微信开发phpopenid企业微信开辟简明教程一用户授权 Docker

2. 处理GET、POST要求的能力及调试工具。
官方API在调用时和回调时采取GET和POST两种办法,数据采取JSON格式传输。
在开拓阶段,可以利用官方供应的“接口调试工具”(地址:https://work.weixin.qq.com/api/devtools/devtool.php)进行测试,也可在本地安装Postman软件进行远程调试。

3. 阅读官方API文档。
企业微信开拓分为三种场景:企业内部开拓、第三方运用开拓和聪慧硬件开拓。
个中企业内部开拓是最为常用且主要的一种办法,非常有必要阅读。
其余官方供应了“加解密库”的下载,建议下载和利用,避免涌现加解密失落败Bug。
每个企业微信运用都有一个密钥用于对传输数据加密,以担保数据传输安全性。
官方已供应了c++、python、Java、php、c#和golang措辞实现的加解密库工具库。

4.理解access_token。
这是一个调用官方API的凭据,调用API时要供应此凭据,官方做事器依据此来验证要求是否合法。
凭据从官方做事器获取,且默认为2小时有效期。
获取access_token须要利用企业标识corpid和密钥serect(secret先容见下面内容)。

二、企业微信中“用户”干系观点

企业微信的前身是RTX(面向企业内利用的IM工具),RTX办理了企业内部员工之间的即时通讯问题,可以谈天、传文件等,支持划分部门组织架构。
企业微信在RTX根本年夜将定位进行了外延,将企业微信与微信用户打通,同时增强了面向企业生产、经营、日常办公等业务功能,使之不仅能够成为“企业的生产力工具”,而且能够成为连接客户(微信用户)的营销工具。

企业微信现在同时具备了to B的能力(驱动企业经营生产,例如连接供应商等)和to C的能力(可触达11亿微信用户,例如企业员工添加客户微信为好友,将客户加入到企业的私域流量池)。
随着腾讯对企业微信开放数据的进一步扩大,未来企业微信将被授予更多经营能力,企业微信将成为企业信息化系统中主要的连接器。

企业微信中涉及“用户”的观点包括:成员、部门、运用、外部联系人。

2.1 企业-部门-成员

成员指企业员工,员工被分配在不同部门下,一个企业包括多个部门。

企业与部门之间是一对多的关系,部门与员工之间是多对多的关系(一个员工可归属于多个部门,一个部门下拥有多名员工)。

企业的唯一标识为corpid,部门的唯一标识为departmentid,员工的标识(账号)为userid。

为了实现企业向员工付款或发红包(企业支付场景),每个成员的userid可以转换为openid(两者之间支持互转),在调用付款和发红包接口时利用openid。
但须要把稳的是,成员的openid仅为企业微信下利用,而不是公众年夜众号中的openid。

2.2 运用

运用是企业微信作为平台供应做事的载体,每个企业(企业微信)下都会包含多个运用。
在运用之上,可以实现收发(以会话形式发送、吸收)、设置运用主页(H5)、授权登录(为现有的web网页、APP实现企业微信扫码登录)。

运用主要的参数包括两个,分别是agentid和secret。
agentid为运用的唯一标识,secret用于获取access_token(需结合corpid)。

每个运用可设置可见成员的范围,例如创建某个运用只面向技能部成员可见,创建某个运用只面向市场部可见。

2.3 外部联系人

在企业微信中,除了本企业的员工成员外,别的被员工加为好友的都视作为外部联系人,外部联系人包括微信联系人和企业微信联系人。
微信联系人是指添加了对方的微信账号、企业微信联系人是指添加了对方的企业微信账号。

企业为了构建自己的私域流量池,为提高营销和客户关系掩护效果,会让员工将客户加为自己好友,那么这部分从外部加过来的好友,即为外部联系人。
这些外部联系人在企业微信中纵然原添加的员工离职了,也支持将其再分配,便于事情交卸和客户掩护。

每个外部联系人都具有唯一标识——external_userid,这个标识在一个企业中是唯一的,运用可以获取到外部联系人userid,外部联系人的userid可以转换为openid,但须要把稳此openid与微信公众年夜众号平台的openid不同。

三、用户授权

企业微信的用户授权流程与微信公众年夜众平台流程基本同等。
采取OAuth2机制,实现网页授权和扫码授权。

OAuth2授权机制

OAuth2的目的是不需用户输入用户名、密码,只需用户扫码确认或手动确认授权,运用方即可以获取用户信息。
企业微信与微信"大众年夜众号一样,采取了OAuth2中经典的授权码authorization code模式,这也是各大平台都在采取的模式。

上图为授权码的事情流程示意。
详细细节为:

1. 用户打开运用(常日为浏览器),运用首先重定向到授权做事器。

2. 授权做事器显示授权页面,用户确认授权。

3. 用户授权成功后,授权做事看重定向(返回)到redirect_uri,同时返回参数code

4. 运用收到code后,向授权做事器发出要求,申请令牌。

5. 运用收到访问令牌和更新令牌。

企业微信网页授权流程

根据以上OAuth2的授权码流程,企业微信中网页授权详细流程为:

1.布局网页授权URL

授权URL格式为:

https://open.weixin.qq.com/connect/oauth2/authorize?appid=CORPID&redirect_uri=REDIRECT_URI&response_type=code&scope=snsapi_base&state=STATE#wechat_redirect

详细参数含义为

假设redirect_uri为 http://www.example.com/wx/index?action=get , state为1000,则重定向地址为:

http://www.example.com/wx/index?action=get&code=AAAAAAgG333qs9EdaPbCAP1VaOrjuNkiA&state=1000

2. 获取access_token

在获取access_token前,要先获取企业corpid和serect(密钥secret分为三类:自建运用serect、通讯录secret、外部联系人secret。
每一个密钥不仅是调用API的安全钥匙,还是对不同权限的限定)

获取access_token要求地址为:https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=<corpid>&corpsecret=<secret>

要求办法:GET

返回结果格式为:

{ "errcode": 0, "errmsg": "ok", "access_token": "yiuH7Mvyf.....", "expires_in": 7200}

调用效果如下图

3. 获取userid

在获取到授权码code和访问令牌access_token后,末了一步即可调用API获取当前访问成员用户的userid。

要求地址:https://qyapi.weixin.qq.com/cgi-bin/user/getuserinfo?access_token=ACCESS_TOKEN&code=CODE

参数中code利用时需把稳:code仅能利用1次,且有效期为5分钟,5分钟内未利用则自动过期。

要求办法:GET

返回结果存在两种情形:

(1)如果当前访问者为“企业成员”,则返回userid

{ "errcode": 0, "errmsg": "ok", "UserId":"USERID", "DeviceId":"DEVICEID"}

返回结果中UserId即为成员在当前企业微信中的唯一标识。
DeviceId为设备编号,安装企业微信时随机天生,可用于标识一台手机。

(2)如果当前访问者不是企业成员,则返回OpenId

{ "errcode": 0, "errmsg": "ok", "OpenId":"OPENID", "DeviceId":"DEVICEID"}

返回结果中OpenId为当前访问者在企业微信中的唯一标识,仅限企业微信利用,与"大众号中的OpenId不同。
企业微信中的OpenId目前仅限支付场景利用。

至此,用户授权流程完成,运用已经得到了成员用户userid(非成员用户openid)。
后续如若获取成员用户的详细信息,可调用【读取成员】接口。

三、常见问题

1. 授权码回调返回两次,code返回两次问题

答:授权码code只能利用1次。
若涌现2次,则表明腾讯做事器认为第一次没能收到精确的相应,以是才会有第2次回调。
涌现这个情形,需检讨:

(1)域名是否精确可到达,是否存在防火墙拦截。

(2)回调地址是否进行了URLCode

(3) 是否精确返回了200状态码

(4)本地进行code判断,若重复则丢弃。

2.userid与openid的关系

答:userid是成员用户在企业微信中的标识,可理解为账号。
对付外部联系人,具有external_userid对其在企业微信中进行标识。
openid是由userid转化过来的,也是其在企业微信中的标识。
但须要把稳此openid与微信"大众平台openid不同。
企业微信中成员用户的userid转为openid后,目前仅用于企业付款、发红包利用。
外部联系人external_userid也可以转换external_user_openid,但也仅用于支付场景。

以上为第一部分,请关注我连续学习第二部分内容:企业微信开拓简明教——用户管理。