Skip to content

Commit

Permalink
Merge branch 'develop/v3.x' to 'main'
Browse files Browse the repository at this point in the history
  • Loading branch information
fudiwei authored Mar 9, 2024
2 parents ef38749 + ae93f43 commit 06800fc
Show file tree
Hide file tree
Showing 1,609 changed files with 35,387 additions and 15,693 deletions.
28 changes: 28 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,34 @@

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

- Release 3.0.0 (2024-03-09)

- **新增**:新增 URL Link v2、URL Schema v2、二维码 v2、订阅消息 v2、推广计划 v2、流量主 v2 等相关接口。

- **新增**:新增内容安全图片检测 v3、普通二维码绑定 v3 等相关接口。

- **新增**:新增线索组件、视频能力、搜索能力、任务能力、用户信息、分享等相关接口。

- **新增**:新增小程序能力申请、抖音号绑定等相关接口。

- **新增**:新增泛知识角色系统抖音号绑定相关接口。

- **新增**:新增服务商平台代开发小程序授权 v2、代开发小程序模板管理 v2、代开发小程序基础信息管理 v2、代开发小程序开发管理 v2 等相关接口。

- **新增**:新增服务商平台代开发小程序备案相关接口。

- **新增**:独立化直播小玩法 API 客户端,支持自动生成请求签名。

- **变更**:升级公共组件至 v3.0.0。完整变更说明请参阅迁移指南。

- **变更**:重命名客户端 `ByteDanceMicroAppClient``DouyinMicroAppClient`

- **变更**:移除部分已废弃接口。

- **修复**:修复泛知识课程库添加课程接口模型定义错误。

- **修复**:修复担保支付相关接口 GET 请求签名错误。(_via_ [GitHub #20](https://github.com/fudiwei/DotNetCore.SKIT.FlurlHttpClient.ByteDance/pull/20)

- Release 2.5.0 (2023-07-17)

- **新增**:新增担保支付自动结算结果查询接口。(_via_ [GitHub #12](https://github.com/fudiwei/DotNetCore.SKIT.FlurlHttpClient.ByteDance/pull/12)
Expand Down
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/ExtendedSDK/OpenApi/Events__src/SKIT.FlurlHttpClient.ByteDance.Api/ExtendedSDK/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
98 changes: 66 additions & 32 deletions docs/MicroApp/Basic_ModelDefinition.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,39 +8,62 @@

再有,每个对象的命名与官方文档的接口地址大体保持一致。例如刚刚提到的发送订阅消息,它的接口地址是 `[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/ExtendedSdk/OpenApi/Models__src/SKIT.FlurlHttpClient.ByteDance.Api/ExtendedSdk/ProductApi/Models__src/SKIT.FlurlHttpClient.ByteDance.Api/ExtendedSdk/RoleApi/Models__src/SKIT.FlurlHttpClient.ByteDance.Api/ExtendedSdk/Webcast/Models_ 目录。

---

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

#### 1. 小程序

<details>

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

| | 字节 API | 备注 |
| :-: | :------------------------------------: | :------------------: |
|| 接口调用凭证 | |
|| 登录 | |
|| 数据缓存 | |
|| 分享 | |
|| 客服 | |
| × | <del>交易系统</del> | 异构协议,需独立模块 |
|| 二维码 | |
|| 内容安全 | |
|| 课程库 | |
|| 担保支付 | |
|| 评价 | |
|| 订阅消息 | |
|| 其它:直播间自定义封面 | |
|| 其它:抖音开放平台与小程序视频打通能力 | |
|| 小程序推广计划 | |
|| 挂载 | |
|| 分发 | |
|| 引导关注抖音号 | |
|| 数据分析 | |
| | 抖音 API | 备注 |
| :-: | :---------------------------------------: | :--------------------------------: |
| × | <del>联合授权</del> | 异构协议,请使用 `DouyinOpen` 模块 |
| × | <del>接口调用凭证:经营能力调用凭证</del> | 异构协议,请使用 `DouyinOpen` 模块 |
| × | <del>接口调用凭证:用户授权调用凭证</del> | 异构协议,请使用 `DouyinOpen` 模块 |
|| 接口调用凭证:非用户授权调用凭证 | |
| × | <del>私聊和群聊</del> | 异构协议,请使用 `DouyinOpen` 模块 |
|| 登录 | |
|| 小程序码与小程序链接 | |
|| 线索组件 | |
|| 视频能力 | |
|| 搜索能力 | |
|| 任务能力 | |
| × | <del>电商</del> | _开发中_ |
| × | <del>生活服务</del> | _开发中_ |
|| 用户信息 | |
|| 分享 | |
|| 客服 | |
| × | <del>交易工具</del> | _开发中_ |
| × | <del>小程序券</del> | _开发中_ |
| × | <del>交易系统</del> | _开发中_ |
|| 内容安全 | |
|| 泛知识:角色系统 | |
|| 泛知识:课程库 | |
|| 担保支付 | |
|| 评价 | |
|| 其他:直播间自定义封面 | |
|| 其他:抖音开放平台与小程序视频打通能力 | |
| × | <del>其他:开放能力配置</del> | _开发中_ |
|| 其他:上传资源 | |
| × | <del>其他:解决方案测试实体管理</del> | _开发中_ |
|| 订阅消息 | |
|| 小程序推广计划 | |
|| 挂载 | |
|| 分发 | |
| × | <del>数据分析</del> | _开发中_ |
|| 服务类目 | |
|| 直播间能力 | |
|| 抖音开放能力 | |
|| 页面结构自定义 | |
|| 普通二维码绑定 | |
|| 抖音号绑定 | |
|| 流量主 | |
| × | <del>抖店绑定</del> | _开发中_ |

</details>

Expand All @@ -50,7 +73,7 @@

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

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

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

| | 字节 API | 备注 |
| :-: | :--------------------: | :--: |
|| 授权相关接口 | |
|| 域名相关接口 | |
|| 模板管理接口 | |
|| 代商家管理小程序 | |
|| 代商家管理小程序 | |
|| 代商家入驻抖音开放平台 | |
| | 抖音 API | 备注 |
| :-: | :----------------------------------: | :------: |
|| 代开发小程序:上传资源 | |
|| 代开发小程序:授权 | |
|| 代开发小程序:域名 | |
|| 代开发小程序:模板管理 | |
|| 代开发小程序:代商家管理小程序 | |
|| 代开发小程序:代商家入驻抖音开放平台 | |
| × | <del>代开发生活服务商家应用</del> | _开发中_ |

</details>

#### 4. 直播小玩法

<details>

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

| | 抖音 API | 备注 |
| :-: | :------: | :--: |
|| 直播能力 | |
Loading

0 comments on commit 06800fc

Please sign in to comment.