
一、前言本教程根据应用场景进行划分,重点阐述企业微信在不同应用场景下的开发思路,同时讲解使用的接口及细节。进行企业微信应用开发之前需要准备:1.可供外网访问服务器用于发布应用,调用官方API及处理官方......
本教程根据应用场景进行划分,重点阐述企业微信在不同应用场景下的开发思路,同时讲解使用的接口及细节。
进行企业微信应用开发之前需要准备:
1.可供外网访问服务器用于发布应用,调用官方API及处理官方服务器的回调事件。开发阶段,可以将本地机器作为服务器,只需要安装类似花生壳的软件实现内网穿透,最后在企业微信将域名加至可信域名列表中。
2.处理GET、POST请求的能力及调试工具。官方API在调用时和回调时采用GET和POST两种方式,数据采用JSON格式传输。在开发阶段,可以使用官方提供的“接口调试工具”(地址:)进行测试,也可在本地安装Postman软件进行远程调试。
3.阅读官方API文档。企业微信开发分为三种场景:企业内部开发、第三方应用开发和智慧硬件开发。其中企业内部开发是最为常用且重要的一种方式,非常有必要阅读。另外官方提供了“加解密库”的下载,建议下载和使用,避免出现加解密失败Bug。每个企业微信应用都有一个密钥用于对传输数据加密,以保证数据传输安全性。官方已提供了c++、python、Java、php、cwechat_redirect
具体参数含义为
假设redirect_uri为,state为1000,则重定向地址为:
;code=AAAAAAgG333qs9EdaPbCAP1VaOrjuNkiAstate=1000
2.获取access_token
在获取access_token前,要先获取企业corpid和serect(密钥secret分为三类:自建应用serect、通讯录secret、外部联系人secret。每一个密钥不仅是调用API的安全钥匙,还是对不同权限的限定)
获取access_token请求地址为:;corpidcorpsecret=secret
请求方式:GET
返回结果格式为:
{"errcode":0,"errmsg":"ok","access_token":"yiuH7Mvyf..","expires_in":7200}
调用效果如下图
3.获取userid
在获取到授权码code和访问令牌access_token后,最后一步即可调用API获取当前访问成员用户的userid。
请求地址:;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不同。企业目前仅限支付场景使用。
至此,用户授权流程完成,应用已经获得了成员用户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,但也仅用于支付场景。