一、序言
本教程根据运用处景进行划分,重点阐述企业微信在不同运用处景下的开拓思路,同时讲解利用的接口及细节。
进行企业微信运用开拓之前须要准备:
1. 可供外网访问做事器用于发布运用,调用官方API及处理官方做事器的回调事宜。开拓阶段,可以将本地机器作为做事器,只须要安装类似花生壳的软件实现内网穿透,末了在企业微信将域名加至可信域名列表中。
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,但也仅用于支付场景。
以上为第一部分,请关注我连续学习第二部分内容:企业微信开拓简明教——用户管理。