diff --git a/docs/WechatApi/Advanced_Extensions.md b/docs/WechatApi/Advanced_Extensions.md new file mode 100644 index 00000000..54aad50e --- /dev/null +++ b/docs/WechatApi/Advanced_Extensions.md @@ -0,0 +1,58 @@ +## 如何扩展额外的 API? + +--- + +如果有某些接口本库尚未支持,你可按照下面的示例自行扩展: + +```csharp +/* 继承 WechatApiRequest 实现自定义请求类 */ +public class MyFakeRequest : WechatApiRequest +{ + [Newtonsoft.Json.JsonProperty("my_fake_props")] + [System.Text.Json.Serialization.JsonPropertyName("my_fake_props")] + public string MyFakeProps { get; set; } +} + +/* 继承 WechatApiResponse 实现自定义响应类 */ +public class MyFakeResponse : WechatApiResponse +{ + [Newtonsoft.Json.JsonProperty("my_fake_props")] + [System.Text.Json.Serialization.JsonPropertyName("my_fake_props")] + public string MyFakeProps { get; set; } +} + +/* 扩展 WechatApiClient 方法 */ +public static class MyFakeClientExtensions +{ + public static async Task ExecuteMyFakeAsync(this WechatApiClient client, MyFakeRequest request, CancellationToken cancellationToken = default) + { + if (client is null) throw new ArgumentNullException(nameof(client)); + if (request is null) throw new ArgumentNullException(nameof(request)); + + IFlurlRequest flurlReq = client + .CreateRequest(request, HttpMethod.Post, "my-fake-url") + .SetQueryParam("access_token", request.AccessToken); + + return await client.SendRequestWithJsonAsync(flurlReq, request, cancellationToken); + } +} +``` + +同样的,你也可自行扩展回调通知事件模型: + +```csharp +/* 继承 WechatApiEvent 实现自定义的 JSON 格式的回调通知事件 */ +public class MyFakeEvent : WechatApiEvent, WechatApiEvent.Types.IJsonSerializable +{ + [Newtonsoft.Json.JsonProperty("my_fake_props")] + [System.Text.Json.Serialization.JsonPropertyName("my_fake_props")] + public string MyFakeProps { get; set; } +} + +/* 继承 WechatApiEvent 实现自定义的 XML 格式的回调通知事件 */ +public class MyFakeEvent : WechatApiEvent, WechatApiEvent.Types.IXmlSerializable +{ + [System.Xml.Serialization.XmlElement("my_fake_props")] + public string MyFakeProps { get; set; } +} +``` diff --git a/docs/WechatApi/README.md b/docs/WechatApi/README.md index c4d4db37..4306c4a9 100644 --- a/docs/WechatApi/README.md +++ b/docs/WechatApi/README.md @@ -179,6 +179,8 @@ else - [如何生成 JS-SDK 初始化时所需的参数及签名?](./Advanced_JSSDK.md) +- [如何扩展额外的 API?](./Advanced_Extensions.md) + --- ## 示例项目 diff --git a/docs/WechatTenpayV3/Advanced_Extensions.md b/docs/WechatTenpayV3/Advanced_Extensions.md new file mode 100644 index 00000000..5c1ad576 --- /dev/null +++ b/docs/WechatTenpayV3/Advanced_Extensions.md @@ -0,0 +1,51 @@ +## 如何扩展额外的 API? + +--- + +如果有某些接口本库尚未支持,你可按照下面的示例自行扩展: + +```csharp +/* 继承 WechatTenpayRequest 实现自定义请求类 */ +public class MyFakeRequest : WechatTenpayRequest +{ + [Newtonsoft.Json.JsonProperty("my_fake_props")] + [System.Text.Json.Serialization.JsonPropertyName("my_fake_props")] + public string MyFakeProps { get; set; } +} + +/* 继承 WechatTenpayResponse 实现自定义响应类 */ +public class MyFakeResponse : WechatTenpayResponse +{ + [Newtonsoft.Json.JsonProperty("my_fake_props")] + [System.Text.Json.Serialization.JsonPropertyName("my_fake_props")] + public string MyFakeProps { get; set; } +} + +/* 扩展 WechatTenpayClient 方法 */ +public static class MyFakeClientExtensions +{ + public static async Task ExecuteMyFakeAsync(this WechatTenpayClient client, MyFakeRequest request, CancellationToken cancellationToken = default) + { + if (client is null) throw new ArgumentNullException(nameof(client)); + if (request is null) throw new ArgumentNullException(nameof(request)); + + IFlurlRequest flurlReq = client + .CreateRequest(request, HttpMethod.Post, "my-fake-url") + .SetQueryParam("access_token", request.AccessToken); + + return await client.SendRequestWithJsonAsync(flurlReq, request, cancellationToken); + } +} +``` + +同样的,你也可自行扩展回调通知事件的敏感数据模型: + +```csharp +/* 实现自定义的 JSON 格式的回调通知事件敏感数据 */ +public class MyFakeEvent : WechatTenpayEvent.Types.IDecryptedResource +{ + [Newtonsoft.Json.JsonProperty("my_fake_props")] + [System.Text.Json.Serialization.JsonPropertyName("my_fake_props")] + public string MyFakeProps { get; set; } +} +``` diff --git a/docs/WechatTenpayV3/README.md b/docs/WechatTenpayV3/README.md index 58566e9f..33ed813e 100644 --- a/docs/WechatTenpayV3/README.md +++ b/docs/WechatTenpayV3/README.md @@ -147,3 +147,5 @@ else - [如何解密回调通知事件中的敏感数据?](./Advanced_EventDataDecryption.md) - [如何生成客户端调起支付时所需的参数及签名?](./Advanced_Payment.md) + +- [如何扩展额外的 API?](./Advanced_Extensions.md) diff --git a/docs/WechatWork/Advanced_Extensions.md b/docs/WechatWork/Advanced_Extensions.md new file mode 100644 index 00000000..c070f7a9 --- /dev/null +++ b/docs/WechatWork/Advanced_Extensions.md @@ -0,0 +1,58 @@ +## 如何扩展额外的 API? + +--- + +如果有某些接口本库尚未支持,你可按照下面的示例自行扩展: + +```csharp +/* 继承 WechatWorkRequest 实现自定义请求类 */ +public class MyFakeRequest : WechatWorkRequest +{ + [Newtonsoft.Json.JsonProperty("my_fake_props")] + [System.Text.Json.Serialization.JsonPropertyName("my_fake_props")] + public string MyFakeProps { get; set; } +} + +/* 继承 WechatWorkResponse 实现自定义响应类 */ +public class MyFakeResponse : WechatWorkResponse +{ + [Newtonsoft.Json.JsonProperty("my_fake_props")] + [System.Text.Json.Serialization.JsonPropertyName("my_fake_props")] + public string MyFakeProps { get; set; } +} + +/* 扩展 WechatWorkClient 方法 */ +public static class MyFakeClientExtensions +{ + public static async Task ExecuteMyFakeAsync(this WechatWorkClient client, MyFakeRequest request, CancellationToken cancellationToken = default) + { + if (client is null) throw new ArgumentNullException(nameof(client)); + if (request is null) throw new ArgumentNullException(nameof(request)); + + IFlurlRequest flurlReq = client + .CreateRequest(request, HttpMethod.Post, "my-fake-url") + .SetQueryParam("access_token", request.AccessToken); + + return await client.SendRequestWithJsonAsync(flurlReq, request, cancellationToken); + } +} +``` + +同样的,你也可自行扩展回调通知事件模型: + +```csharp +/* 继承 WechatWorkEvent 实现自定义的 JSON 格式的回调通知事件 */ +public class MyFakeEvent : WechatWorkEvent, WechatWorkEvent.Types.IJsonSerializable +{ + [Newtonsoft.Json.JsonProperty("my_fake_props")] + [System.Text.Json.Serialization.JsonPropertyName("my_fake_props")] + public string MyFakeProps { get; set; } +} + +/* 继承 WechatWorkEvent 实现自定义的 XML 格式的回调通知事件 */ +public class MyFakeEvent : WechatWorkEvent, WechatWorkEvent.Types.IXmlSerializable +{ + [System.Xml.Serialization.XmlElement("my_fake_props")] + public string MyFakeProps { get; set; } +} +``` diff --git a/docs/WechatWork/README.md b/docs/WechatWork/README.md index fc8fac52..5bbd5a49 100644 --- a/docs/WechatWork/README.md +++ b/docs/WechatWork/README.md @@ -155,3 +155,5 @@ else - [如何解析回调通知事件?](./Advanced_EventDataDeserialization.md) - [如何生成 JS-SDK 初始化时所需的参数及签名?](./Advanced_JSSDK.md) + +- [如何扩展额外的 API?](./Advanced_Extensions.md)