在企业微信的自建应用
中,用户触发了某些行为(发送消息、进行菜单操作或者外部联系人变更等),要发送相关信息给企业内部服务器
。
备注:接收消息 和 回调,在本文中指代相同的行为,即企业微信服务器向企业内部服务器发送消息。之所以有不同的说法,是由于企业微信官方开发文档和管理后台的说法差异导致的。
企业微信的开发文档,参考:回调配置。
接收消息
这里的接收消息,指的是企业内部服务器
接收企业微信服务器
发送的消息。
点击 设置API接收
,进入如下配置页面:
配置API接收消息
,需要有三个配置项,分别是:URL, Token, EncodingAESKey。
URL为回调服务地址
,由开发者搭建,用于接收通知消息或者事件。
Token用于计算签名
,由英文或数字组成且长度不超过32位的自定义字符串。
开发者提供的URL
是公开可访问的
,这就意味着任何人拿到这个URL,都可以向该接口推送消息。为了保证URL服务
的安全性,需要解决两个问题:
请求来源
是企业微信;没有被篡改
;解决办法:数字签名。
具体为:约定Token作为密钥,仅开发者和企业微信知道,在传输中不可见,用于计算签名。企业微信在推送消息时,将消息内容与Token计算出签名,并将消息内容和签名一起传递给企业内部服务器
。企业内部服务器
接收到推送消息时,也按相同算法计算出签名。如果为同一签名,则可信任来源为企业微信,并且内容是完整的(没有被篡改)。
EncodingAESKey 用于消息内容加密
,由英文或数字组成且长度为43位的自定义字符串。
由于消息是在公开的因特网上传输,消息内容是可被截获的,如果内容未加密,则截获者可以直接阅读消息内容。若消息内容包含一些敏感信息,就非常危险了。
EncodingAESKey 就是在这个背景基础上提出的,将发送的内容进行加密,并组装成一定格式后再发送。
配置回调服务时,需要能同时支持HttpGet
以及HttpPost
两种能力,
官方文档中,包含进一步的示例:
Http Get
请求,验证URL有效性Http Post
请求,接收业务数据具体实现细节,请参考官方文档:回调服务需要实现哪些功能