mirror of
https://gitee.com/fudiwei/DotNetCore.SKIT.FlurlHttpClient.Wechat.git
synced 2026-02-10 17:56:21 +08:00
docs: 完善文档
This commit is contained in:
@@ -1,10 +1,10 @@
|
||||
## 如何在 ASP.NET Core 中与 `IHttpClientFactory` 集成?
|
||||
## 如何与 `IHttpClientFactory` 集成?
|
||||
|
||||
---
|
||||
|
||||
本功能来自于公共组件,请参阅公共组件下的相关文档:
|
||||
|
||||
> [《SKIT.FlurlHttpClient FAQ:如何在 ASP.NET Core 中与 IHttpClientFactory 集成?》](https://github.com/fudiwei/DotNetCore.SKIT.FlurlHttpClient/blob/main/docs/FAQ_IHttpClientFactory.md)
|
||||
> [《SKIT.FlurlHttpClient FAQ:如何与 IHttpClientFactory 集成?》](https://github.com/fudiwei/DotNetCore.SKIT.FlurlHttpClient/blob/main/docs/README.md)
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
本功能来自于公共组件,请参阅公共组件下的相关文档:
|
||||
|
||||
> [《SKIT.FlurlHttpClient FAQ:如何使用拦截器?》](https://github.com/fudiwei/DotNetCore.SKIT.FlurlHttpClient/blob/main/docs/FAQ_Interceptor.md)
|
||||
> [《SKIT.FlurlHttpClient FAQ:如何使用拦截器?》](https://github.com/fudiwei/DotNetCore.SKIT.FlurlHttpClient/blob/main/docs/README.md)
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
本功能来自于公共组件,请参阅公共组件下的相关文档:
|
||||
|
||||
> [《SKIT.FlurlHttpClient FAQ:如何指定 JSON 序列化器?》](https://github.com/fudiwei/DotNetCore.SKIT.FlurlHttpClient/blob/main/docs/FAQ_JsonSerializer.md)
|
||||
> [《SKIT.FlurlHttpClient FAQ:如何指定 JSON 序列化器?》](https://github.com/fudiwei/DotNetCore.SKIT.FlurlHttpClient/blob/main/docs/README.md)
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -6,12 +6,12 @@
|
||||
|
||||
```csharp
|
||||
/* 如果是 JSON 格式的通知内容,以 wxa_media_check 事件为例 */
|
||||
string callbackJson = "{ ... }";
|
||||
var callbackModel = client.DeserializeEventFromJson<Events.WxaMediaCheckEvent>(callbackJson);
|
||||
string webhookJson = "{ ... }";
|
||||
var webhookModel = client.DeserializeEventFromJson<Events.WxaMediaCheckEvent>(webhookJson);
|
||||
|
||||
/* 如果是 XML 格式的通知内容,以 text 事件为例 */
|
||||
string callbackXml = "<xml> ... </xml>";
|
||||
var callbackModel = client.DeserializeEventFromXml<Events.TextMessageEvent>(callbackXml);
|
||||
string webhookXml = "<xml> ... </xml>";
|
||||
var webhookModel = client.DeserializeEventFromXml<Events.TextMessageEvent>(webhookXml);
|
||||
```
|
||||
|
||||
完整的回调通知模型定义可以参考项目目录下的 _src/SKIT.FlurlHttpClient.Wechat.Api/Events_ 目录。
|
||||
@@ -27,21 +27,27 @@ var callbackModel = client.DeserializeEventFromXml<Events.TextMessageEvent>(call
|
||||
一种是利用 `System.Xml.Linq`:
|
||||
|
||||
```csharp
|
||||
XDocument xDoc = XDocument.Parse(callbackXml);
|
||||
string msgType = xDoc.Root?.Element("MsgType")?.Value?.ToUpper();
|
||||
string msgType = XDocument.Parse(webhookXml).Root?.Element("MsgType")?.Value?.ToUpper();
|
||||
switch (msgType)
|
||||
{
|
||||
case "TEXT":
|
||||
{
|
||||
var webhookModel = client.DeserializeEventFromXml<Events.TextMessageEvent>(webhookXml);
|
||||
}
|
||||
break;
|
||||
// 其他情况略
|
||||
}
|
||||
```
|
||||
|
||||
另一种是利用本库的扩展方法:
|
||||
|
||||
```csharp
|
||||
WechatApiEvent eventModel = client.DeserializeEventFromXml(callbackXml);
|
||||
string msgType = eventModel.MessageType?.ToUpper();
|
||||
|
||||
string msgType = client.DeserializeEventFromXml(webhookXml).MessageType?.ToUpper();
|
||||
switch (msgType)
|
||||
{
|
||||
case "TEXT":
|
||||
{
|
||||
var callbackModel = client.DeserializeEventFromXml<Events.TextMessageEvent>(callbackXml);
|
||||
var webhookModel = client.DeserializeEventFromXml<Events.TextMessageEvent>(webhookXml);
|
||||
}
|
||||
break;
|
||||
// 其他情况略
|
||||
@@ -65,7 +71,7 @@ var options = new WechatApiClientOptions()
|
||||
PushToken = "Token",
|
||||
PushEncodingAESKey = "EncodingAESKey"
|
||||
};
|
||||
var client = new WechatApiClient(options);
|
||||
var client = WechatApiClientBuilder.Create(options).Build();
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
@@ -16,22 +16,22 @@ var options = new WechatApiClientOptions()
|
||||
PushToken = "Token",
|
||||
PushEncodingAESKey = "EncodingAESKey"
|
||||
};
|
||||
var client = new WechatApiClient(options);
|
||||
var client = WechatApiClientBuilder.Create(options).Build();
|
||||
|
||||
/* 验证微信服务器 */
|
||||
bool ret = client.VerifyEventSignatureForEcho(
|
||||
callbackTimestamp: "微信回调通知中的 timestamp 字段",
|
||||
callbackNonce: "微信回调通知中的 nonce 字段",
|
||||
callbackSignature: "微信回调通知中的 signature 字段"
|
||||
webhookTimestamp: "微信回调通知中的 timestamp 字段",
|
||||
webhookNonce: "微信回调通知中的 nonce 字段",
|
||||
webhookSignature: "微信回调通知中的 signature 字段"
|
||||
);
|
||||
|
||||
/* 验证安全模式下 XML 消息的签名 */
|
||||
bool ret = client.VerifyEventSignatureFromXml(
|
||||
callbackXml: "微信公众平台发来的通知内容,形如:<xml><Encrypt>...</Encrypt></xml>"
|
||||
webhookXml: "微信公众平台发来的通知内容,形如:<xml><Encrypt>...</Encrypt></xml>"
|
||||
);
|
||||
|
||||
/* 验证安全模式下 JSON 消息的签名 */
|
||||
bool ret = client.VerifyEventSignatureFromJson(
|
||||
callbackJson: "微信公众平台发来的通知内容,形如:{\"Encrypt\":\"...\"}"
|
||||
webhookJson: "微信公众平台发来的通知内容,形如:{\"Encrypt\":\"...\"}"
|
||||
);
|
||||
```
|
||||
|
||||
@@ -30,10 +30,10 @@ public static class MyFakeClientExtensions
|
||||
if (request is null) throw new ArgumentNullException(nameof(request));
|
||||
|
||||
IFlurlRequest flurlReq = client
|
||||
.CreateRequest(request, HttpMethod.Post, "my-fake-url")
|
||||
.CreateFlurlRequest(request, HttpMethod.Post, "my-fake-url")
|
||||
.SetQueryParam("access_token", request.AccessToken);
|
||||
|
||||
return await client.SendRequestWithJsonAsync<MyFakeResponse>(flurlReq, request, cancellationToken);
|
||||
return await client.SendFlurlRequestAsJsonAsync<MyFakeResponse>(flurlReq, request, cancellationToken);
|
||||
}
|
||||
}
|
||||
```
|
||||
@@ -42,7 +42,7 @@ public static class MyFakeClientExtensions
|
||||
|
||||
```csharp
|
||||
/* 继承 WechatApiEvent 实现自定义的 JSON 格式的回调通知事件 */
|
||||
public class MyFakeEvent : WechatApiEvent, WechatApiEvent.Serialization.IJsonSerializable
|
||||
public class MyFakeEvent : WechatApiEvent
|
||||
{
|
||||
[Newtonsoft.Json.JsonProperty("my_fake_props")]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("my_fake_props")]
|
||||
@@ -50,7 +50,7 @@ public class MyFakeEvent : WechatApiEvent, WechatApiEvent.Serialization.IJsonSer
|
||||
}
|
||||
|
||||
/* 继承 WechatApiEvent 实现自定义的 XML 格式的回调通知事件 */
|
||||
public class MyFakeEvent : WechatApiEvent, WechatApiEvent.Serialization.IXmlSerializable
|
||||
public class MyFakeEvent : WechatApiEvent
|
||||
{
|
||||
[System.Xml.Serialization.XmlElement("my_fake_props")]
|
||||
public string MyFakeProps { get; set; }
|
||||
|
||||
@@ -14,6 +14,9 @@
|
||||
|
||||
## 快速入门
|
||||
|
||||
> [!IMPORTANT]
|
||||
> 此目录下的文档适用于 v3.x 版本的模块。如果你正在使用 2.x 版本,请移步至 GitHub/Gitee 的已归档分支。
|
||||
|
||||
### 安装:
|
||||
|
||||
提示:如果你使用 Visual Studio NuGet 管理器图形化界面,请在搜索结果中勾选“**包括预发行版**”。
|
||||
@@ -44,7 +47,7 @@ var options = new WechatApiClientOptions()
|
||||
MidasOfferIdV2 = "米大师 2.0 相关服务 OfferId,不用则不填",
|
||||
MidasAppKeyV2 = "米大师 2.0 相关服务 AppKey,不用则不填"
|
||||
};
|
||||
var client = new WechatApiClient(options);
|
||||
var client = WechatApiClientBuilder.Create(options).Build();
|
||||
```
|
||||
|
||||
### 请求 & 响应:
|
||||
@@ -76,7 +79,7 @@ else
|
||||
|
||||
## 基础用法
|
||||
|
||||
- [如何快速找到需要调用的 API 模型类名 / 方法名?](./Basic_ModelDefinition.md)
|
||||
- ⭐ [如何快速找到需要调用的 API 模型类名 / 方法名?](./Basic_ModelDefinition.md)
|
||||
|
||||
- [如何解析回调通知事件?](./Basic_EventDeserialization.md)
|
||||
|
||||
@@ -84,7 +87,7 @@ else
|
||||
|
||||
- [如何解密经过加密处理的开放数据?](./Basic_OpenDataDecryption.md)
|
||||
|
||||
- [如何生成 JS-SDK 初始化时所需的参数及签名?](./Basic_Parameters.md)
|
||||
- ⭐ [如何生成 JS-SDK 初始化时所需的参数及签名?](./Basic_Parameters.md)
|
||||
|
||||
- [如何自定义额外的 API 接口?](./Basic_Extensions.md)
|
||||
|
||||
@@ -92,7 +95,7 @@ else
|
||||
|
||||
## 高级技巧
|
||||
|
||||
- [如何在 ASP.NET Core 中与 `IHttpClientFactory` 集成?](./Advanced_IHttpClientFactory.md)
|
||||
- [如何与 `IHttpClientFactory` 集成?](./Advanced_IHttpClientFactory.md)
|
||||
|
||||
- [如何指定 JSON 序列化器?](./Advanced_JsonSerializer.md)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user