Skip to content

Commit

Permalink
docs: 完善文档
Browse files Browse the repository at this point in the history
  • Loading branch information
fudiwei committed Mar 5, 2024
1 parent dadc442 commit 2001390
Show file tree
Hide file tree
Showing 9 changed files with 112 additions and 75 deletions.
13 changes: 13 additions & 0 deletions docs/MicroApp/Advanced_Dispose.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
## 如何销毁客户端?

---

本功能来自于公共组件,请参阅公共组件下的相关文档:

> [《SKIT.FlurlHttpClient FAQ:如何销毁客户端(避免内存泄漏)?》](https://github.com/fudiwei/DotNetCore.SKIT.FlurlHttpClient/blob/main/docs/README.md)
---

### 镜像站点

国内用户如访问 GitHub 网络状况不佳,可在打开上述链接后,手动将域名部分的 **github.com** 替换为 **gitee.com**、剩余路径部分保持不变,即可访问。
4 changes: 2 additions & 2 deletions docs/MicroApp/Advanced_IHttpClientFactory.md
Original file line number Diff line number Diff line change
@@ -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)
---

Expand Down
2 changes: 1 addition & 1 deletion docs/MicroApp/Advanced_Interceptor.md
Original file line number Diff line number Diff line change
Expand Up @@ -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)
---

Expand Down
2 changes: 1 addition & 1 deletion docs/MicroApp/Advanced_JsonSerializer.md
Original file line number Diff line number Diff line change
Expand Up @@ -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)
---

Expand Down
20 changes: 10 additions & 10 deletions docs/MicroApp/Basic_EventDeserialization.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,46 +2,46 @@

---

对于字节小程序推送过来的回调通知事件,本库封装了直接解析成事件模型的扩展方法,下面给出一个示例:
对于抖音小程序推送过来的回调通知事件,本库封装了直接解析成事件模型的扩展方法,下面给出一个示例:

```csharp
/* 如果是 JSON 格式的通知内容,以 text 事件为例 */
string callbackJson = "{ ... }";
var callbackModel = client.DeserializeEventFromJson<Events.TextMessageEvent>(callbackJson);
string webhookJson = "{ ... }";
var webhookModel = client.DeserializeEventFromJson<Events.TextMessageEvent>(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.ByteDance.MicroApp/Events__src/SKIT.FlurlHttpClient.ByteDance.Api/SDK/ProductApi/Events__src/SKIT.FlurlHttpClient.ByteDance.Api/SDK/OpenApi/Events_ 目录。
完整的回调通知模型定义可以参考项目目录下的 _src/SKIT.FlurlHttpClient.ByteDance.MicroApp/Events__src/SKIT.FlurlHttpClient.ByteDance.Api/SDK/OpenApi/Events__src/SKIT.FlurlHttpClient.ByteDance.Api/SDK/ProductApi/Events_ 目录。

---

### 事件类型:

由于字节小程序会将全部事件推送到同一个回调通知地址上,开发者需要根据事件类型才能决定如何反序列化。
由于抖音小程序会将全部事件推送到同一个回调通知地址上,开发者需要根据事件类型才能决定如何反序列化。

这里给出两种解决方案。

一种是利用 `System.Xml.Linq`

```csharp
XDocument xDoc = XDocument.Parse(callbackXml);
XDocument xDoc = XDocument.Parse(webhookXml);
string msgType = xDoc.Root?.Element("MsgType")?.Value?.ToUpper();
```

另一种是利用本库的扩展方法:

```csharp
ByteDanceMicroAppEvent eventModel = client.DeserializeEventFromXml(callbackXml);
ByteDanceMicroAppEvent eventModel = client.DeserializeEventFromXml(webhookXml);
string msgType = eventModel.MessageType?.ToUpper();

switch (msgType)
{
case "TEXT":
{
var callbackModel = client.DeserializeEventFromXml<Events.TextMessageEvent>(callbackXml);
var webhookModel = client.DeserializeEventFromXml<Events.TextMessageEvent>(webhookXml);
}
break;
// 省略其他情况
Expand Down
19 changes: 9 additions & 10 deletions docs/MicroApp/Basic_EventSignatureVerification.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,25 +4,24 @@

> 请先自行阅读:
>
> [字节小程序文档 - 消息推送客服:验证消息来自今日头条》](https://microapp.bytedance.com/docs/zh-CN/mini-app/develop/component/message-push-customer-service)
> [抖音小程序文档 - 消息推送客服:验证消息来自今日头条》](https://microapp.bytedance.com/docs/zh-CN/mini-app/develop/component/message-push-customer-service)
同样的,你既可以利用本库提供的 `SHA1Utility` 工具类自行进行签名验证,也可以通过扩展方法实现:

```csharp
/* 在初始化客户端时需指定服务器推送的相关参数 */
var options = new ByteDanceMicroAppClientOptions()
var options = new DouyinMicroAppClientOptions()
{
AppId = "字节小程序 AppId",
AppSecret = "字节小程序 AppSecret",
// 其他配置项略
PushToken = "服务器推送的 Token"
};
var client = new ByteDanceMicroAppClient(options);
var client = DouyinMicroAppClientBuilder.Create(options).Build();

/* 验证字节小程序服务器 */
/* 验证抖音服务器 */
bool ret = client.VerifyEventSignatureForEcho(
callbackTimestamp: "字节小程序回调通知中的 timestamp 字段",
callbackNonce: "字节小程序回调通知中的 nonce 字段",
callbackMessage: "头条回调通知中的 msg 字段",
callbackSignature: "头条回调通知中的 signature 字段"
webhookTimestamp: "抖音小程序回调通知中的 timestamp 字段",
webhookNonce: "抖音小程序回调通知中的 nonce 字段",
webhookMsg: "抖音回调通知中的 msg 字段",
webhookSignature: "抖音回调通知中的 signature 字段"
);
```
20 changes: 10 additions & 10 deletions docs/MicroApp/Basic_Extensions.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,26 +5,26 @@
如果有某些接口本库尚未支持,你可按照下面的示例自行扩展:

```csharp
/* 继承 ByteDanceMicroAppRequest 实现自定义请求类 */
public class MyFakeRequest : ByteDanceMicroAppRequest
/* 继承 DouyinMicroAppRequest 实现自定义请求类 */
public class MyFakeRequest : DouyinMicroAppRequest
{
[Newtonsoft.Json.JsonProperty("my_fake_props")]
[System.Text.Json.Serialization.JsonPropertyName("my_fake_props")]
public string MyFakeProps { get; set; }
}

/* 继承 ByteDanceMicroAppResponse 实现自定义响应类 */
public class MyFakeResponse : ByteDanceMicroAppResponse
/* 继承 DouyinMicroAppResponse 实现自定义响应类 */
public class MyFakeResponse : DouyinMicroAppResponse
{
[Newtonsoft.Json.JsonProperty("my_fake_props")]
[System.Text.Json.Serialization.JsonPropertyName("my_fake_props")]
public string MyFakeProps { get; set; }
}

/* 扩展 ByteDanceMicroAppClient 方法 */
/* 扩展 DouyinMicroAppClient 方法 */
public static class MyFakeClientExtensions
{
public static async Task<MyFakeResponse> ExecuteMyFakeAsync(this ByteDanceMicroAppClient client, MyFakeRequest request, CancellationToken cancellationToken = default)
public static async Task<MyFakeResponse> ExecuteMyFakeAsync(this DouyinMicroAppClient client, MyFakeRequest request, CancellationToken cancellationToken = default)
{
if (client is null) throw new ArgumentNullException(nameof(client));
if (request is null) throw new ArgumentNullException(nameof(request));
Expand All @@ -41,16 +41,16 @@ public static class MyFakeClientExtensions
同样的,你也可自行扩展回调通知事件模型:

```csharp
/* 继承 ByteDanceMicroAppEvent 实现自定义的 JSON 格式的回调通知事件 */
public class MyFakeEvent : ByteDanceMicroAppEvent, ByteDanceMicroAppEvent.Serialization.IJsonSerializable
/* 继承 DouyinMicroAppEvent 实现自定义的 JSON 格式的回调通知事件 */
public class MyFakeEvent : DouyinMicroAppEvent, DouyinMicroAppEvent.Serialization.IJsonSerializable
{
[Newtonsoft.Json.JsonProperty("my_fake_props")]
[System.Text.Json.Serialization.JsonPropertyName("my_fake_props")]
public string MyFakeProps { get; set; }
}

/* 继承 ByteDanceMicroAppEvent 实现自定义的 XML 格式的回调通知事件 */
public class MyFakeEvent : ByteDanceMicroAppEvent, ByteDanceMicroAppEvent.Serialization.IXmlSerializable
/* 继承 DouyinMicroAppEvent 实现自定义的 XML 格式的回调通知事件 */
public class MyFakeEvent : DouyinMicroAppEvent, DouyinMicroAppEvent.Serialization.IXmlSerializable
{
[System.Xml.Serialization.XmlElement("my_fake_props")]
public string MyFakeProps { get; set; }
Expand Down
10 changes: 5 additions & 5 deletions docs/MicroApp/Basic_ModelDefinition.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,19 +8,19 @@

再有,每个对象的命名与官方文档的接口地址大体保持一致。例如刚刚提到的发送订阅消息,它的接口地址是 `[POST] /apps/message/custom/send`,将其中的反斜杠去掉、并以大驼峰命名法的方式调整它,就可以得到前文提到的几个对象了。如果路由中带有版本信息,那么版本号一般都在结尾处,例如接口 `[POST] /v2/tags/image` 对应的是 `TagsImageV2`

完整的模型定义可以参考项目目录下的 _src/SKIT.FlurlHttpClient.ByteDance.Api/Models__src/SKIT.FlurlHttpClient.ByteDance.Api/SDK/ProductApi/Models__src/SKIT.FlurlHttpClient.ByteDance.Api/SDK/OpenApi/Models_ 目录。
完整的模型定义可以参考项目目录下的 _src/SKIT.FlurlHttpClient.ByteDance.Api/Models__src/SKIT.FlurlHttpClient.ByteDance.Api/SDK/OpenApi/Models__src/SKIT.FlurlHttpClient.ByteDance.Api/SDK/ProductApi/Models__src/SKIT.FlurlHttpClient.ByteDance.Api/SDK/RoleApi/Models_ 目录。

---

### 字节小程序开放平台 API 支持情况:
### 抖音小程序开放平台 API 支持情况:

#### 1. 小程序

<details>

<summary>[展开查看]</summary>

| | 字节 API | 备注 |
| | 抖音 API | 备注 |
| :-: | :------------------------------------: | :------------------: |
|| 接口调用凭证 | |
|| 登录 | |
Expand Down Expand Up @@ -50,7 +50,7 @@

<summary>[展开查看]</summary>

| | 字节 API | 备注 |
| | 抖音 API | 备注 |
| :-: | :----------: | :--: |
|| 接口调用凭证 | |
|| 登录 | |
Expand All @@ -66,7 +66,7 @@

<summary>[展开查看]</summary>

| | 字节 API | 备注 |
| | 抖音 API | 备注 |
| :-: | :--------------------: | :--: |
|| 授权相关接口 | |
|| 域名相关接口 | |
Expand Down
97 changes: 61 additions & 36 deletions docs/MicroApp/README.md
Original file line number Diff line number Diff line change
@@ -1,19 +1,22 @@
# SKIT.FlurlHttpClient.ByteDance.MicroApp

基于 `Flurl.Http`[字节小程序开放平台](https://microapp.bytedance.com/) HTTP API SDK。
基于 `Flurl.Http`[抖音小程序开放平台](https://microapp.bytedance.com/) HTTP API SDK。

---

## 功能

- 基于字节小程序开放平台 API 封装。
- 提供了字节小程序所需的 AES、MD5、SHA-1、HMAC-SHA-256 等算法工具类。
- 基于抖音小程序开放平台 API 封装。
- 提供了抖音小程序所需的 AES、MD5、SHA-1、HMAC-SHA-256 等算法工具类。
- 提供了解析回调通知事件等扩展方法。

---

## 快速入门

> [!IMPORTANT]
> 此目录下的文档适用于 v3.x 版本的模块。如果你正在使用 2.x 版本,请移步至 GitHub/Gitee 的已归档分支。
### 安装:

提示:如果你使用 Visual Studio NuGet 管理器图形化界面,请在搜索结果中勾选“**包括预发行版**”。
Expand All @@ -29,41 +32,16 @@
### 初始化:

```csharp
/* 以基础 API 为例 */
using SKIT.FlurlHttpClient.ByteDance.MicroApp;

var options = new ByteDanceMicroAppClientOptions()
var options = new DouyinMicroAppClientOptions()
{
Endpoints = ByteDanceMicroAppEndpoints.API_MINIAPP, // 指定接入点。需注意小程序、小游戏拥有不同的接入点。
AppId = "字节小程序 AppId",
AppSecret = "字节小程序 AppSecret",
Endpoints = DouyinMicroAppEndpoints.API_MINIAPP, // 指定接入点。需注意小程序、小游戏拥有不同的接入点。
AppId = "抖音小程序 AppId",
AppSecret = "抖音小程序 AppSecret",
ECPaySalt = "担保支付相关服务的密钥,不用则不填"
};
var client = new ByteDanceMicroAppClient(options);



/* 以泛知识课程库 API 为例 */
using SKIT.FlurlHttpClient.ByteDance.MicroApp.SDK.ProductApi;

var options = new ByteDanceMicroAppProductApiClientOptions()
{
AppId = "字节小程序 AppId",
AppSecret = "字节小程序 AppSecret"
};
var client = new ByteDanceMicroAppProductApiClient(options);



/* 以服务商平台 API 为例 */
using SKIT.FlurlHttpClient.ByteDance.MicroApp.SDK.OpenApi;

var options = new ByteDanceMicroAppOpenApiClientOptions()
{
ComponentAppId = "字节小程序第三方应用 AppId",
ComponentAppSecret = "字节小程序第三方应用 AppSecret"
};
var client = new ByteDanceMicroAppOpenApiClient(options);
var client = DouyinMicroAppClientBuilder.Create(options).Build();
```

### 请求 & 响应:
Expand Down Expand Up @@ -92,11 +70,56 @@ else
}
```

### 独立的(服务商平台、泛知识课程库、泛知识角色系统等)扩展客户端:

部分 API 的接入点、接口模型公共参数等配置项与基础 API 完全不同,需要使用独立的扩展客户端。

- 服务商平台:

```csharp
using SKIT.FlurlHttpClient.ByteDance.MicroApp.SDK.OpenApi;

var options = new DouyinMicroAppOpenApiClientOptions()
{
ComponentAppId = "第三方应用 AppId",
ComponentAppSecret = "第三方应用 AppSecret"
};
var client = DouyinMicroAppOpenApiClientBuilder.Create(options).Build();
```

- 泛知识课程库:

```csharp
using SKIT.FlurlHttpClient.ByteDance.MicroApp.SDK.ProductApi;

var options = new DouyinMicroAppProductApiClientOptions()
{
AppId = "抖音小程序 AppId",
AppSecret = "抖音小程序 AppSecret"
};
var client = DouyinMicroAppProductApiClientBuilder.Create(options).Build();
```

- 泛知识角色系统:

```csharp
using SKIT.FlurlHttpClient.ByteDance.MicroApp.SDK.RoleApi;

var options = new DouyinMicroAppRoleApiClientOptions()
{
AppId = "抖音小程序 AppId",
AppSecret = "抖音小程序 AppSecret"
};
var client = DouyinMicroAppRoleApiClientBuilder.Create(options).Build();
```

这些扩展客户端在用法上基础客户端完全相同,只需引入各自的命名空间即可。

---

## 基础用法

- [如何快速找到需要调用的 API 模型类名 / 方法名?](./Basic_ModelDefinition.md)
- [如何快速找到需要调用的 API 模型类名 / 方法名?](./Basic_ModelDefinition.md)

- [如何解析回调通知事件?](./Basic_EventDeserialization.md)

Expand All @@ -106,9 +129,11 @@ else

---

## 快速高级技巧入门
## 高级技巧

- [如何销毁客户端?](./Advanced_Dispose.md)

- [如何在 ASP.NET Core 中与 `IHttpClientFactory` 集成?](./Advanced_IHttpClientFactory.md)
- [如何与 `IHttpClientFactory` 集成?](./Advanced_IHttpClientFactory.md)

- [如何指定 JSON 序列化器?](./Advanced_JsonSerializer.md)

Expand Down

0 comments on commit 2001390

Please sign in to comment.