diff --git a/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Extensions/WechatOpenAIClientExecuteOpenApiExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Extensions/WechatOpenAIClientExecuteOpenApiExtensions.cs new file mode 100644 index 00000000..c22cee76 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Extensions/WechatOpenAIClientExecuteOpenApiExtensions.cs @@ -0,0 +1,71 @@ +using System; +using System.Collections.Generic; +using System.Net.Http; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using Flurl; +using Flurl.Http; + +namespace SKIT.FlurlHttpClient.Wechat.OpenAI +{ + public static class WechatOpenAIClientExecuteOpenApiExtensions + { + /// + /// 异步调用 [POST] /v1/openapi/create 接口。 + /// REF: https://developers.weixin.qq.com/doc/aispeech/openapi/api/v1/openapi/create.html + /// + /// + /// + /// + /// + public static async Task ExecuteOpenApiCreateAsync(this WechatOpenAIClient client, Models.OpenApiCreateRequest 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, "v1", "openapi", "create"); + + return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } + + /// + /// 异步调用 [POST] /v1/openapi/reset 接口。 + /// REF: https://developers.weixin.qq.com/doc/aispeech/openapi/api/v1/openapi/reset.html + /// + /// + /// + /// + /// + public static async Task ExecuteOpenApiResetAsync(this WechatOpenAIClient client, Models.OpenApiResetRequest 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, "v1", "openapi", "reset"); + + return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } + + /// + /// 异步调用 [GET] /v1/openapi/get_detail 接口。 + /// REF: https://developers.weixin.qq.com/doc/aispeech/openapi/api/v1/openapi/get_detail.html + /// + /// + /// + /// + /// + public static async Task ExecuteOpenApiGetDetailAsync(this WechatOpenAIClient client, Models.OpenApiGetDetailRequest 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.Get, "v1", "openapi", "get_detail"); + + return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/OpenApi/OpenApiCreateRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/OpenApi/OpenApiCreateRequest.cs new file mode 100644 index 00000000..a1dbf79d --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/OpenApi/OpenApiCreateRequest.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.OpenAI.Models +{ + /// + /// 表示 [POST] /v1/openapi/create 接口的请求。 + /// + public class OpenApiCreateRequest : WechatOpenAIRequest + { + /// + /// 获取或设置联系人名字。 + /// + [Newtonsoft.Json.JsonProperty("name")] + [System.Text.Json.Serialization.JsonPropertyName("name")] + public string Name { get; set; } = string.Empty; + + /// + /// 获取或设置联系电话。 + /// + [Newtonsoft.Json.JsonProperty("phone")] + [System.Text.Json.Serialization.JsonPropertyName("phone")] + public string PhoneNumber { get; set; } = string.Empty; + + /// + /// 获取或设置微信号。 + /// + [Newtonsoft.Json.JsonProperty("wechat")] + [System.Text.Json.Serialization.JsonPropertyName("wechat")] + public string Wechat { get; set; } = string.Empty; + + /// + /// 获取或设置邮箱。 + /// + [Newtonsoft.Json.JsonProperty("email")] + [System.Text.Json.Serialization.JsonPropertyName("email")] + public string Email { get; set; } = string.Empty; + + /// + /// 获取或设置地址。 + /// + [Newtonsoft.Json.JsonProperty("address")] + [System.Text.Json.Serialization.JsonPropertyName("address")] + public string? Address { get; set; } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/OpenApi/OpenApiCreateResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/OpenApi/OpenApiCreateResponse.cs new file mode 100644 index 00000000..46bb03ad --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/OpenApi/OpenApiCreateResponse.cs @@ -0,0 +1,38 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.OpenAI.Models +{ + /// + /// 表示 [POST] /v1/openapi/create 接口的响应。 + /// + public class OpenApiCreateResponse : WechatOpenAIResponse + { + public static class Types + { + public class Data + { + /// + /// 获取或设置 AppId。 + /// + [Newtonsoft.Json.JsonProperty("appid")] + [System.Text.Json.Serialization.JsonPropertyName("appid")] + public string AppId { get; set; } = default!; + + /// + /// 获取或设置 Token。 + /// + [Newtonsoft.Json.JsonProperty("token")] + [System.Text.Json.Serialization.JsonPropertyName("token")] + public string Token { get; set; } = default!; + + /// + /// 获取或设置 EncodingAESKey。 + /// + [Newtonsoft.Json.JsonProperty("aes_key")] + [System.Text.Json.Serialization.JsonPropertyName("aes_key")] + public string EncodingAESKey { get; set; } = default!; + } + } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/OpenApi/OpenApiGetDetailRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/OpenApi/OpenApiGetDetailRequest.cs new file mode 100644 index 00000000..141b163c --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/OpenApi/OpenApiGetDetailRequest.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.OpenAI.Models +{ + /// + /// 表示 [GET] /v1/openapi/get_detail 接口的请求。 + /// + public class OpenApiGetDetailRequest : WechatOpenAIRequest + { + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/OpenApi/OpenApiGetDetailResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/OpenApi/OpenApiGetDetailResponse.cs new file mode 100644 index 00000000..c395df40 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/OpenApi/OpenApiGetDetailResponse.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.OpenAI.Models +{ + /// + /// 表示 [GET] /v1/openapi/get_detail 接口的响应。 + /// + public class OpenApiGetDetailResponse : WechatOpenAIResponse + { + public static class Types + { + public class Data : OpenApiCreateResponse.Types.Data + { + } + } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/OpenApi/OpenApiResetRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/OpenApi/OpenApiResetRequest.cs new file mode 100644 index 00000000..2d3cc0b8 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/OpenApi/OpenApiResetRequest.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.OpenAI.Models +{ + /// + /// 表示 [POST] /v1/openapi/reset 接口的请求。 + /// + public class OpenApiResetRequest : WechatOpenAIRequest + { + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/OpenApi/OpenApiResetResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/OpenApi/OpenApiResetResponse.cs new file mode 100644 index 00000000..6807fa33 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/OpenApi/OpenApiResetResponse.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.OpenAI.Models +{ + /// + /// 表示 [POST] /v1/openapi/reset 接口的响应。 + /// + public class OpenApiResetResponse : WechatOpenAIResponse + { + public static class Types + { + public class Data : OpenApiCreateResponse.Types.Data + { + } + } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Skill/SkillSaveResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Skill/SkillSaveResponse.cs index 2f2f5804..173ca2cb 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Skill/SkillSaveResponse.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Skill/SkillSaveResponse.cs @@ -17,7 +17,7 @@ namespace SKIT.FlurlHttpClient.Wechat.OpenAI.Models /// [Newtonsoft.Json.JsonProperty("id")] [System.Text.Json.Serialization.JsonPropertyName("id")] - public long SkillId { get; set; } = default!; + public long SkillId { get; set; } } } } diff --git a/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/OpenApi/OpenApiCreateRequest.json b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/OpenApi/OpenApiCreateRequest.json new file mode 100644 index 00000000..eb94ef09 --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/OpenApi/OpenApiCreateRequest.json @@ -0,0 +1,7 @@ +{ + "name": "张三", + "phone": "18833008888", + "wechat": "aaaa", + "email": "123@qq.com", + "address": "北京市海淀区中国技术交易大厦F7" +} \ No newline at end of file diff --git a/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/OpenApi/OpenApiCreateResponse.json b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/OpenApi/OpenApiCreateResponse.json new file mode 100644 index 00000000..24a8af89 --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/OpenApi/OpenApiCreateResponse.json @@ -0,0 +1,10 @@ +{ + "code": 0, + "msg": "请求成功", + "request_id": "255i0ug8-l9q4-3801-44ft-w7csjn9e5142", + "data": { + "appid": "5i2YaWnq56844yh", + "token": "d9tvK4Z3jHp0SW3758x89550oj789k", + "aes_key": "lKq5xB3W675330C6ftaLm3n3gb450Iz4ee880K2Hz16" + } +} \ No newline at end of file diff --git a/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/OpenApi/OpenApiGetDetailRequest.json b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/OpenApi/OpenApiGetDetailRequest.json new file mode 100644 index 00000000..22fdca1b --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/OpenApi/OpenApiGetDetailRequest.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/OpenApi/OpenApiGetDetailResponse.json b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/OpenApi/OpenApiGetDetailResponse.json new file mode 100644 index 00000000..24a8af89 --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/OpenApi/OpenApiGetDetailResponse.json @@ -0,0 +1,10 @@ +{ + "code": 0, + "msg": "请求成功", + "request_id": "255i0ug8-l9q4-3801-44ft-w7csjn9e5142", + "data": { + "appid": "5i2YaWnq56844yh", + "token": "d9tvK4Z3jHp0SW3758x89550oj789k", + "aes_key": "lKq5xB3W675330C6ftaLm3n3gb450Iz4ee880K2Hz16" + } +} \ No newline at end of file diff --git a/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/OpenApi/OpenApiResetRequest.json b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/OpenApi/OpenApiResetRequest.json new file mode 100644 index 00000000..22fdca1b --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/OpenApi/OpenApiResetRequest.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/OpenApi/OpenApiResetResponse.json b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/OpenApi/OpenApiResetResponse.json new file mode 100644 index 00000000..24a8af89 --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/OpenApi/OpenApiResetResponse.json @@ -0,0 +1,10 @@ +{ + "code": 0, + "msg": "请求成功", + "request_id": "255i0ug8-l9q4-3801-44ft-w7csjn9e5142", + "data": { + "appid": "5i2YaWnq56844yh", + "token": "d9tvK4Z3jHp0SW3758x89550oj789k", + "aes_key": "lKq5xB3W675330C6ftaLm3n3gb450Iz4ee880K2Hz16" + } +} \ No newline at end of file