2021-07-27 18:37:38 +08:00
|
|
|
## 如何解析回调通知事件?
|
2021-06-07 00:32:04 +08:00
|
|
|
|
|
|
|
---
|
|
|
|
|
2021-11-25 21:15:54 +08:00
|
|
|
对于企业微信推送过来的回调通知事件,本库封装了直接解析成事件模型的扩展方法,下面给出一个示例代码:
|
2021-06-07 00:32:04 +08:00
|
|
|
|
|
|
|
```csharp
|
2021-08-02 16:26:14 +08:00
|
|
|
/* 如果是 JSON 格式的通知内容,以 add_schedule 事件为例 */
|
2024-02-07 11:22:05 +08:00
|
|
|
string webhookJson = "{ ... }";
|
|
|
|
var webhookModel = client.DeserializeEventFromJson<Events.AddScheduleEvent>(webhookJson);
|
2021-06-07 00:32:04 +08:00
|
|
|
|
2021-08-02 16:26:14 +08:00
|
|
|
/* 如果是 XML 格式的通知内容,以 text 事件为例 */
|
2024-02-07 11:22:05 +08:00
|
|
|
string webhookXml = "<xml> ... </xml>";
|
|
|
|
var webhookModel = client.DeserializeEventFromXml<Events.TextMessageEvent>(webhookXml);
|
2021-06-07 00:32:04 +08:00
|
|
|
```
|
|
|
|
|
|
|
|
完整的回调通知模型定义可以参考项目目录下的 _src/SKIT.FlurlHttpClient.Wechat.Work/Events_ 目录。
|
2021-08-02 16:26:14 +08:00
|
|
|
|
|
|
|
---
|
|
|
|
|
2021-08-02 18:14:33 +08:00
|
|
|
### 事件类型:
|
|
|
|
|
|
|
|
由于企业微信会将全部事件推送到同一个回调通知地址上,开发者需要根据事件类型才能决定如何反序列化。
|
|
|
|
|
|
|
|
这里给出一种解决方案:
|
|
|
|
|
|
|
|
```csharp
|
2024-02-07 11:22:05 +08:00
|
|
|
string msgType = eventModel = client.DeserializeEventFromXml(webhookXml).MessageType?.ToUpper();
|
2021-08-02 18:14:33 +08:00
|
|
|
switch (msgType)
|
|
|
|
{
|
|
|
|
case "TEXT":
|
|
|
|
{
|
2024-02-07 11:22:05 +08:00
|
|
|
var webhookModel = client.DeserializeEventFromXml<Events.TextMessageEvent>(webhookXml);
|
2021-08-02 18:14:33 +08:00
|
|
|
}
|
|
|
|
break;
|
2022-11-14 13:25:07 +08:00
|
|
|
// 其他情况略
|
2021-08-02 18:14:33 +08:00
|
|
|
}
|
|
|
|
```
|
|
|
|
|
|
|
|
---
|
|
|
|
|
2021-08-02 16:26:14 +08:00
|
|
|
### 安全模式:
|
|
|
|
|
2021-08-02 18:14:33 +08:00
|
|
|
与微信公众号不同的是,企业微信默认启用了安全模式,且不支持切换至明文模式。
|
2021-08-02 16:26:14 +08:00
|
|
|
|
2022-10-26 17:52:16 +08:00
|
|
|
上文提到的扩展方法,已自动做解密处理,无需开发者手动干预。
|
2021-08-02 22:01:08 +08:00
|
|
|
|
2022-10-27 20:22:53 +08:00
|
|
|
为此,你需要在构造得到 `WechatWorkClient` 对象时指定推送参数:
|
|
|
|
|
|
|
|
```csharp
|
|
|
|
var options = new WechatWorkClientOptions()
|
|
|
|
{
|
|
|
|
// 其他配置项略
|
|
|
|
PushToken = "Token",
|
|
|
|
PushEncodingAESKey = "EncodingAESKey"
|
|
|
|
};
|
2024-02-07 11:22:05 +08:00
|
|
|
var client = WechatWorkClientBuilder.Create(options).Build();
|
2022-10-27 20:22:53 +08:00
|
|
|
```
|
|
|
|
|
2021-08-02 22:01:08 +08:00
|
|
|
---
|
|
|
|
|
|
|
|
### 被动回复:
|
|
|
|
|
|
|
|
当用户发送消息给企业微信应用、或某些特定的用户操作引发的事件推送时,开发者可以在响应中返回特定 XML 结构,来对该消息进行响应。
|
|
|
|
|
2021-11-25 21:15:54 +08:00
|
|
|
本库还封装了直接序列化被动回复事件的扩展方法,下面给出一个示例代码:
|
2021-08-02 22:01:08 +08:00
|
|
|
|
|
|
|
```csharp
|
|
|
|
/* 以被动回复文本消息为例 */
|
|
|
|
var replyModel = new Events.TextMessageReply()
|
|
|
|
{
|
|
|
|
ToUserName = "接收方 OpenId",
|
|
|
|
FromUserName = "开发者 GhId",
|
|
|
|
MessageType = "text",
|
|
|
|
Content = "被动回复的文本内容",
|
|
|
|
CreateTimestamp = 1234567890
|
|
|
|
};
|
|
|
|
string replyXml = client.SerializeEventToXml(replyModel);
|
|
|
|
```
|
|
|
|
|
|
|
|
完整的被动回复模型定义可以参考项目目录下的 _src/SKIT.FlurlHttpClient.Wechat.Work/Events/Reply_ 目录。
|