1.设置接收事件服务器
1.1 设置入口
目前,支持将审批状态变化通知回调给审批应用、指定的自建应用。
1.1.1 审批应用回调地址设置
企业可以在【管理后台->应用和小程序->审批->API->接收事件服务器】中,设置回调地址,并勾选需要进行状态变化回调通知的审批模板类型。
设置后,回调地址可接收审批应用所有允许进行回调的审批申请相关状态变化通知。
1.1.2 自建应用回调地址设置
企业可在【管理后台->应用管理->审批->API->可调用应用】中,设置可调用审批相关接口的自建应用。
设置后,回调地址可接收自建应用可见范围内成员提交的、审批应用允许进行回调的审批申请相关状态变化通知。
注意:只有在【审批->API->可调用应用】中勾选了的自建应用才可以接收到在【审批->API->接收事件服务器】勾选模板相关的审批申请回调通知。
1.2 配置说明
进入配置页面,要求填写URL、Token、EncodingAESKey三个参数。
URL是企业后台接收企业微信推送请求的访问协议和地址,支持http或https协议(建议使用https),URL后面必须带"/“,否则会报错"openapi回调地址请求不通过”。
Token可由企业任意填写,Token用于计算签名,由英文或数字组成且长度不超过32位的自定义字符串。
EncodingAESKey用于消息体的加密,是AES密钥的Base64编码,由英文或数字组成且长度为43位的自定义字符串。
2. 回调服务需要实现点
配置回调服务时,需要能同时支持HttpGet以及HttpPost两种能力,企业微信会先判断URL服务是否具备解析企业微信推送消息的能力。
具体方式是,企业微信往URL服务上发一条Get请求带签名及密文参数到URL服务上,如果URL服务检查签名通过,并能正确返回密文参数对应的明文字符串,则验证通过。此时在企业微信的配置就开始生效。测试回调地址
后续的业务请求(比如审核,用户消息等),都会类似的方式(签名+密文)向服务URL推送消息。URL服务验证签名通过后,需要将POST数据解密,就可以得到对应的业务消息明文。
2.1 支持Http Get请求验证URL有效性
假设企业的接收消息的URL设置为http://api.test123.com。
请求方式:GET
请求地址:http://api.test123.com/?msg_signature=ASDFQWEXZCVAQFASDFASDFSS×tamp=13500001234&nonce=123412323&echostr=1234567890
回调服务需要作出正确的响应才能通过URL验证,具体操作如下:
对收到的请求,解析上述的各个参数值(参数值需要做Urldecode处理)
根据已有的token,结合第1步获取的参数timestamp, nonce, echostr重新计算签名,然后与参数msg_signature检查是否一致,确认调用者的合法性。计算方法参考:消息体签名检验
解密echostr参数得到消息内容(即msg字段)
在1秒内响应GET请求,响应内容为上一步得到的明文消息内容(不能加引号,不能带bom头,不能带换行符)
回调方法如下:
/// <summary>
/// 回调通知
/// </summary>
/// <returns></returns>
[HttpGet, HttpPost]
public async Task<ActionResult> ApproveCallBack(string msg_signature, string timestamp, string nonce, string echostr)
{
ApproveCallBackInputDTO input = new ApproveCallBackInputDTO();
input.msg_signature