DotNetCore.SKIT.FlurlHttpCl.../docs/WechatTenpayV3/Advanced_Extensions.md
2021-12-03 16:55:29 +08:00

78 lines
2.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

## 如何扩展额外的 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<MyFakeResponse> 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<MyFakeResponse>(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; }
}
```
---
### 敏感信息字段
如果你扩展的自定义请求或响应模型中包含敏感信息字段,并希望可以通过本库提供的 `EncryptRequestSensitiveProperty()``DecryptResponseSensitiveProperty()` 两个扩展方法来实现自动加、解密,那么你需要在定义模型时额外指定特性:
```csharp
[WechatTenpaySensitive]
public class MyFakeRequest : WechatTenpayRequest
{
[Newtonsoft.Json.JsonProperty("my_fake_props")]
[System.Text.Json.Serialization.JsonPropertyName("my_fake_props")]
[WechatTenpaySensitiveProperty("my_alg")]
public string MyFakeProps { get; set; }
}
[WechatTenpaySensitive]
public class MyFakeResponse : WechatTenpayResponse
{
[Newtonsoft.Json.JsonProperty("my_fake_props")]
[System.Text.Json.Serialization.JsonPropertyName("my_fake_props")]
[WechatTenpaySensitiveProperty("my_alg")]
public string MyFakeProps { get; set; }
}
```