mirror of
https://gitee.com/fudiwei/DotNetCore.SKIT.FlurlHttpClient.Wechat.git
synced 2025-07-15 23:13:32 +08:00
78 lines
2.7 KiB
Markdown
78 lines
2.7 KiB
Markdown
## 如何扩展额外的 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; }
|
||
}
|
||
```
|