diff --git a/src/SKIT.FlurlHttpClient.Wechat.Ads/Extensions/WechatAdsClientExecuteAdCreativesExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.Ads/Extensions/WechatAdsClientExecuteAdCreativesExtensions.cs new file mode 100644 index 00000000..9032719a --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Ads/Extensions/WechatAdsClientExecuteAdCreativesExtensions.cs @@ -0,0 +1,87 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Net.Http; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using Flurl; +using Flurl.Http; + +namespace SKIT.FlurlHttpClient.Wechat.Ads +{ + public static class WechatAdsClientExecuteAdCreativesExtensions + { + /// + /// 异步调用 [POST] /adcreatives/add 接口。 + /// + /// + /// + /// + /// + public static async Task ExecuteAdCreativesAddAsync(this WechatAdsClient client, Models.AdCreativesAddRequest 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(HttpMethod.Post, "adcreatives", "add") + .SetOptions(request) + .SetQueryParam("access_token", request.AccessToken); + + return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } + + /// + /// 异步调用 [POST] /adcreatives/update 接口。 + /// + /// + /// + /// + /// + public static async Task ExecuteAdCreativesUpdateAsync(this WechatAdsClient client, Models.AdCreativesUpdateRequest 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(HttpMethod.Post, "adcreatives", "update") + .SetOptions(request) + .SetQueryParam("access_token", request.AccessToken); + + return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } + + /// + /// 异步调用 [GET] /adcreatives/get 接口。 + /// + /// + /// + /// + /// + public static async Task ExecuteAdCreativesGetAsync(this WechatAdsClient client, Models.AdCreativesGetRequest 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(HttpMethod.Get, "adcreatives", "get") + .SetOptions(request) + .SetQueryParam("access_token", request.AccessToken); + + if (request.AdCreativeId.HasValue) + flurlReq.SetQueryParam("adcreative_id", request.AdCreativeId.Value); + + if (request.Filters != null && request.Filters.Any()) + flurlReq.SetQueryParam("filtering", client.JsonSerializer.Serialize(request.Filters)); + + if (request.PageSize.HasValue) + flurlReq.SetQueryParam("page_size", request.PageSize.Value); + + if (request.Page.HasValue) + flurlReq.SetQueryParam("page", request.Page.Value); + + return await client.SendRequestAsync(flurlReq, cancellationToken: cancellationToken); + } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Ads/Extensions/WechatAdsClientExecuteAdGroupsExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.Ads/Extensions/WechatAdsClientExecuteAdGroupsExtensions.cs new file mode 100644 index 00000000..b0386871 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Ads/Extensions/WechatAdsClientExecuteAdGroupsExtensions.cs @@ -0,0 +1,107 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Net.Http; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using Flurl; +using Flurl.Http; + +namespace SKIT.FlurlHttpClient.Wechat.Ads +{ + public static class WechatAdsClientExecuteAdGroupsExtensions + { + /// + /// 异步调用 [POST] /adgroups/add 接口。 + /// + /// + /// + /// + /// + public static async Task ExecuteAdGroupsAddAsync(this WechatAdsClient client, Models.AdGroupsAddRequest 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(HttpMethod.Post, "adgroups", "add") + .SetOptions(request) + .SetQueryParam("access_token", request.AccessToken); + + return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } + + /// + /// 异步调用 [POST] /adgroups/update 接口。 + /// + /// + /// + /// + /// + public static async Task ExecuteAdGroupsUpdateAsync(this WechatAdsClient client, Models.AdGroupsUpdateRequest 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(HttpMethod.Post, "adgroups", "update") + .SetOptions(request) + .SetQueryParam("access_token", request.AccessToken); + + return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } + + /// + /// 异步调用 [GET] /adgroups/get 接口。 + /// + /// + /// + /// + /// + public static async Task ExecuteAdGroupsGetAsync(this WechatAdsClient client, Models.AdGroupsGetRequest 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(HttpMethod.Get, "adgroups", "get") + .SetOptions(request) + .SetQueryParam("access_token", request.AccessToken); + + if (request.AdGroupId.HasValue) + flurlReq.SetQueryParam("adgroup_id", request.AdGroupId.Value); + + if (request.Filters != null && request.Filters.Any()) + flurlReq.SetQueryParam("filtering", client.JsonSerializer.Serialize(request.Filters)); + + if (request.PageSize.HasValue) + flurlReq.SetQueryParam("page_size", request.PageSize.Value); + + if (request.Page.HasValue) + flurlReq.SetQueryParam("page", request.Page.Value); + + return await client.SendRequestAsync(flurlReq, cancellationToken: cancellationToken); + } + + /// + /// 异步调用 [POST] /adgroups/delete 接口。 + /// + /// + /// + /// + /// + public static async Task ExecuteAdGroupsDeleteAsync(this WechatAdsClient client, Models.AdGroupsDeleteRequest 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(HttpMethod.Post, "adgroups", "delete") + .SetOptions(request) + .SetQueryParam("access_token", request.AccessToken); + + return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Ads/Extensions/WechatAdsClientExecuteAdsExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.Ads/Extensions/WechatAdsClientExecuteAdsExtensions.cs new file mode 100644 index 00000000..4e3ecf65 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Ads/Extensions/WechatAdsClientExecuteAdsExtensions.cs @@ -0,0 +1,107 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Net.Http; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using Flurl; +using Flurl.Http; + +namespace SKIT.FlurlHttpClient.Wechat.Ads +{ + public static class WechatAdsClientExecuteAdsExtensions + { + /// + /// 异步调用 [POST] /ads/add 接口。 + /// + /// + /// + /// + /// + public static async Task ExecuteAdsAddAsync(this WechatAdsClient client, Models.AdsAddRequest 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(HttpMethod.Post, "ads", "add") + .SetOptions(request) + .SetQueryParam("access_token", request.AccessToken); + + return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } + + /// + /// 异步调用 [POST] /ads/update 接口。 + /// + /// + /// + /// + /// + public static async Task ExecuteAdsUpdateAsync(this WechatAdsClient client, Models.AdsUpdateRequest 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(HttpMethod.Post, "ads", "update") + .SetOptions(request) + .SetQueryParam("access_token", request.AccessToken); + + return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } + + /// + /// 异步调用 [GET] /ads/get 接口。 + /// + /// + /// + /// + /// + public static async Task ExecuteAdsGetAsync(this WechatAdsClient client, Models.AdsGetRequest 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(HttpMethod.Get, "ads", "get") + .SetOptions(request) + .SetQueryParam("access_token", request.AccessToken); + + if (request.AdId.HasValue) + flurlReq.SetQueryParam("ad_id", request.AdId.Value); + + if (request.Filters != null && request.Filters.Any()) + flurlReq.SetQueryParam("filtering", client.JsonSerializer.Serialize(request.Filters)); + + if (request.PageSize.HasValue) + flurlReq.SetQueryParam("page_size", request.PageSize.Value); + + if (request.Page.HasValue) + flurlReq.SetQueryParam("page", request.Page.Value); + + return await client.SendRequestAsync(flurlReq, cancellationToken: cancellationToken); + } + + /// + /// 异步调用 [POST] /ads/delete 接口。 + /// + /// + /// + /// + /// + public static async Task ExecuteAdsDeleteAsync(this WechatAdsClient client, Models.AdsDeleteRequest 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(HttpMethod.Post, "ads", "delete") + .SetOptions(request) + .SetQueryParam("access_token", request.AccessToken); + + return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Ads/Extensions/WechatAdsClientExecuteAsyncTasksExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.Ads/Extensions/WechatAdsClientExecuteAsyncTasksExtensions.cs new file mode 100644 index 00000000..2f61dd16 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Ads/Extensions/WechatAdsClientExecuteAsyncTasksExtensions.cs @@ -0,0 +1,88 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Net.Http; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using Flurl; +using Flurl.Http; + +namespace SKIT.FlurlHttpClient.Wechat.Ads +{ + public static class WechatAdsClientExecuteAsyncTasksExtensions + { + /// + /// 异步调用 [POST] /async_tasks/add 接口。 + /// + /// + /// + /// + /// + public static async Task ExecuteAsyncTasksAddAsync(this WechatAdsClient client, Models.AsyncTasksAddRequest 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(HttpMethod.Post, "async_tasks", "add") + .SetOptions(request) + .SetQueryParam("access_token", request.AccessToken); + + return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } + + /// + /// 异步调用 [GET] /async_tasks/get 接口。 + /// + /// + /// + /// + /// + public static async Task ExecuteAsyncTasksGetAsync(this WechatAdsClient client, Models.AsyncTasksGetRequest 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(HttpMethod.Get, "async_tasks", "get") + .SetOptions(request) + .SetQueryParam("access_token", request.AccessToken); + + if (request.Filters != null && request.Filters.Any()) + flurlReq.SetQueryParam("filtering", client.JsonSerializer.Serialize(request.Filters)); + + if (request.PageSize.HasValue) + flurlReq.SetQueryParam("page_size", request.PageSize.Value); + + if (request.Page.HasValue) + flurlReq.SetQueryParam("page", request.Page.Value); + + return await client.SendRequestAsync(flurlReq, cancellationToken: cancellationToken); + } + + #region Files + /// + /// 异步调用 [GET] /async_task_files/get 接口。 + /// + /// + /// + /// + /// + public static async Task ExecuteAsyncTaskFilesGetAsync(this WechatAdsClient client, Models.AsyncTaskFilesGetRequest 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(HttpMethod.Get, "async_task_files", "get") + .SetOptions(request) + .SetQueryParam("access_token", request.AccessToken) + .SetQueryParam("task_id", request.TaskId) + .SetQueryParam("file_id", request.FileId); + + return await client.SendRequestAsync(flurlReq, cancellationToken: cancellationToken); + } + #endregion + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Ads/Extensions/WechatAdsClientExecuteCampaignsExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.Ads/Extensions/WechatAdsClientExecuteCampaignsExtensions.cs new file mode 100644 index 00000000..fa8f1a9d --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Ads/Extensions/WechatAdsClientExecuteCampaignsExtensions.cs @@ -0,0 +1,87 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Net.Http; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using Flurl; +using Flurl.Http; + +namespace SKIT.FlurlHttpClient.Wechat.Ads +{ + public static class WechatAdsClientExecuteCampaignsExtensions + { + /// + /// 异步调用 [POST] /campaigns/add 接口。 + /// + /// + /// + /// + /// + public static async Task ExecuteCampaignsAddAsync(this WechatAdsClient client, Models.CampaignsAddRequest 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(HttpMethod.Post, "campaigns", "add") + .SetOptions(request) + .SetQueryParam("access_token", request.AccessToken); + + return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } + + /// + /// 异步调用 [POST] /campaigns/update 接口。 + /// + /// + /// + /// + /// + public static async Task ExecuteCampaignsUpdateAsync(this WechatAdsClient client, Models.CampaignsUpdateRequest 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(HttpMethod.Post, "campaigns", "update") + .SetOptions(request) + .SetQueryParam("access_token", request.AccessToken); + + return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } + + /// + /// 异步调用 [GET] /campaigns/get 接口。 + /// + /// + /// + /// + /// + public static async Task ExecuteCampaignsGetAsync(this WechatAdsClient client, Models.CampaignsGetRequest 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(HttpMethod.Get, "campaigns", "get") + .SetOptions(request) + .SetQueryParam("access_token", request.AccessToken); + + if (request.CampaignId.HasValue) + flurlReq.SetQueryParam("campaign_id", request.CampaignId.Value); + + if (request.Filters != null && request.Filters.Any()) + flurlReq.SetQueryParam("filtering", client.JsonSerializer.Serialize(request.Filters)); + + if (request.PageSize.HasValue) + flurlReq.SetQueryParam("page_size", request.PageSize.Value); + + if (request.Page.HasValue) + flurlReq.SetQueryParam("page", request.Page.Value); + + return await client.SendRequestAsync(flurlReq, cancellationToken: cancellationToken); + } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Ads/Extensions/WechatAdsClientExecuteCreditBillsExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.Ads/Extensions/WechatAdsClientExecuteCreditBillsExtensions.cs new file mode 100644 index 00000000..e674c760 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Ads/Extensions/WechatAdsClientExecuteCreditBillsExtensions.cs @@ -0,0 +1,42 @@ +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.Ads +{ + public static class WechatAdsClientExecuteCreditBillsExtensions + { + /// + /// 异步调用 [GET] /credit_bills/get 接口。 + /// + /// + /// + /// + /// + public static async Task ExecuteCreditBillsGetAsync(this WechatAdsClient client, Models.CreditBillsGetRequest 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(HttpMethod.Get, "credit_bills", "get") + .SetOptions(request) + .SetQueryParam("access_token", request.AccessToken) + .SetQueryParam("bill_year", request.BillYear) + .SetQueryParam("bill_month", request.BillMonth); + + if (request.PageSize.HasValue) + flurlReq.SetQueryParam("page_size", request.PageSize.Value); + + if (request.Page.HasValue) + flurlReq.SetQueryParam("page", request.Page.Value); + + return await client.SendRequestAsync(flurlReq, cancellationToken: cancellationToken); + } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Ads/Extensions/WechatAdsClientExecuteCustomAudiencesExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.Ads/Extensions/WechatAdsClientExecuteCustomAudiencesExtensions.cs new file mode 100644 index 00000000..7b31564f --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Ads/Extensions/WechatAdsClientExecuteCustomAudiencesExtensions.cs @@ -0,0 +1,150 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Net.Http; +using System.Net.Http.Headers; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using Flurl; +using Flurl.Http; + +namespace SKIT.FlurlHttpClient.Wechat.Ads +{ + public static class WechatAdsClientExecuteCustomAudiencesExtensions + { + /// + /// 异步调用 [POST] /custom_audiences/add 接口。 + /// + /// + /// + /// + /// + public static async Task ExecuteCustomAudiencesAddAsync(this WechatAdsClient client, Models.CustomAudiencesAddRequest 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(HttpMethod.Post, "custom_audiences", "add") + .SetOptions(request) + .SetQueryParam("access_token", request.AccessToken); + + return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } + + /// + /// 异步调用 [POST] /custom_audiences/update 接口。 + /// + /// + /// + /// + /// + public static async Task ExecuteCustomAudiencesUpdateAsync(this WechatAdsClient client, Models.CustomAudiencesUpdateRequest 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(HttpMethod.Post, "custom_audiences", "update") + .SetOptions(request) + .SetQueryParam("access_token", request.AccessToken); + + return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } + + /// + /// 异步调用 [GET] /custom_audiences/get 接口。 + /// + /// + /// + /// + /// + public static async Task ExecuteCustomAudiencesGetAsync(this WechatAdsClient client, Models.CustomAudiencesGetRequest 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(HttpMethod.Get, "custom_audiences", "get") + .SetOptions(request) + .SetQueryParam("access_token", request.AccessToken); + + if (request.CustomAudienceId.HasValue) + flurlReq.SetQueryParam("audience_id", request.CustomAudienceId.Value); + + if (request.PageSize.HasValue) + flurlReq.SetQueryParam("page_size", request.PageSize.Value); + + if (request.Page.HasValue) + flurlReq.SetQueryParam("page", request.Page.Value); + + return await client.SendRequestAsync(flurlReq, cancellationToken: cancellationToken); + } + + #region Files + /// + /// 异步调用 [POST] /custom_audience_files/add 接口。 + /// + /// + /// + /// + /// + public static async Task ExecuteCustomAudienceFilesAddAsync(this WechatAdsClient client, Models.CustomAudienceFilesAddRequest request, CancellationToken cancellationToken = default) + { + if (client is null) throw new ArgumentNullException(nameof(client)); + if (request is null) throw new ArgumentNullException(nameof(request)); + + string boundary = "--BOUNDARY--" + DateTimeOffset.Now.Ticks.ToString("x"); + string filename = "file.zip"; + using var fileContent = new ByteArrayContent(request.FileBytes ?? new byte[0]); + using var httpContent = new MultipartFormDataContent(boundary); + httpContent.Add(new StringContent(request.CustomAudienceId.ToString()), "audience_id"); + httpContent.Add(new StringContent(request.UserIdType), "user_id_type"); + httpContent.Add(new StringContent(request.OperationType), "operation_type"); + httpContent.Add(fileContent, "\"file\"", "\"" + filename + "\""); + httpContent.Headers.ContentType = MediaTypeHeaderValue.Parse("multipart/form-data; boundary=" + boundary); + fileContent.Headers.ContentType = MediaTypeHeaderValue.Parse("application/zip"); + fileContent.Headers.ContentLength = request.FileBytes?.Length ?? 0; + IFlurlRequest flurlReq = client + .CreateRequest(HttpMethod.Post, "custom_audience_files", "add") + .SetOptions(request) + .SetQueryParam("access_token", request.AccessToken); + + return await client.SendRequestAsync(flurlReq, content: httpContent, cancellationToken: cancellationToken); + } + + /// + /// 异步调用 [GET] /custom_audience_files/get 接口。 + /// + /// + /// + /// + /// + public static async Task ExecuteCustomAudienceFilesGetAsync(this WechatAdsClient client, Models.CustomAudienceFilesGetRequest 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(HttpMethod.Get, "custom_audience_files", "get") + .SetOptions(request) + .SetQueryParam("access_token", request.AccessToken); + + if (request.CustomAudienceId.HasValue) + flurlReq.SetQueryParam("audience_id", request.CustomAudienceId.Value); + + if (request.CustomAudienceFileId.HasValue) + flurlReq.SetQueryParam("custom_audience_file_id", request.CustomAudienceFileId.Value); + + if (request.PageSize.HasValue) + flurlReq.SetQueryParam("page_size", request.PageSize.Value); + + if (request.Page.HasValue) + flurlReq.SetQueryParam("page", request.Page.Value); + + return await client.SendRequestAsync(flurlReq, cancellationToken: cancellationToken); + } + #endregion + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Ads/Extensions/WechatAdsClientExecuteEstimationExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.Ads/Extensions/WechatAdsClientExecuteEstimationExtensions.cs new file mode 100644 index 00000000..015f6136 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Ads/Extensions/WechatAdsClientExecuteEstimationExtensions.cs @@ -0,0 +1,35 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Net.Http; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using Flurl; +using Flurl.Http; + +namespace SKIT.FlurlHttpClient.Wechat.Ads +{ + public static class WechatAdsClientExecuteEstimationExtensions + { + /// + /// 异步调用 [POST] /estimation/get 接口。 + /// + /// + /// + /// + /// + public static async Task ExecuteEstimationGetAsync(this WechatAdsClient client, Models.EstimationGetRequest 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(HttpMethod.Post, "estimation", "get") + .SetOptions(request) + .SetQueryParam("access_token", request.AccessToken); + + return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Ads/Extensions/WechatAdsClientExecuteFundsExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.Ads/Extensions/WechatAdsClientExecuteFundsExtensions.cs new file mode 100644 index 00000000..818a014d --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Ads/Extensions/WechatAdsClientExecuteFundsExtensions.cs @@ -0,0 +1,86 @@ +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.Ads +{ + public static class WechatAdsClientExecuteFundsExtensions + { + /// + /// 异步调用 [POST] /fund_transfer/add 接口。 + /// + /// + /// + /// + /// + public static async Task ExecuteFundTransferAddAsync(this WechatAdsClient client, Models.FundTransferAddRequest 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(HttpMethod.Post, "fund_transfer", "add") + .SetOptions(request) + .SetQueryParam("access_token", request.AccessToken); + + return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } + + /// + /// 异步调用 [GET] /funds/get 接口。 + /// + /// + /// + /// + /// + public static async Task ExecuteFundsGetAsync(this WechatAdsClient client, Models.FundsGetRequest 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(HttpMethod.Get, "funds", "get") + .SetOptions(request) + .SetQueryParam("access_token", request.AccessToken); + + return await client.SendRequestAsync(flurlReq, cancellationToken: cancellationToken); + } + + /// + /// 异步调用 [GET] /fund_statements_detailed/get 接口。 + /// + /// + /// + /// + /// + public static async Task ExecuteFundStatementsDetailedGetAsync(this WechatAdsClient client, Models.FundStatementsDetailedGetRequest 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(HttpMethod.Get, "fund_statements_detailed", "get") + .SetOptions(request) + .SetQueryParam("access_token", request.AccessToken); + + if (request.DateRange != null) + flurlReq.SetQueryParam("date_range", client.JsonSerializer.Serialize(request.DateRange)); + + if (!string.IsNullOrEmpty(request.TradeType)) + flurlReq.SetQueryParam("trade_type", request.TradeType); + + if (request.PageSize.HasValue) + flurlReq.SetQueryParam("page_size", request.PageSize.Value); + + if (request.Page.HasValue) + flurlReq.SetQueryParam("page", request.Page.Value); + + return await client.SendRequestAsync(flurlReq, cancellationToken: cancellationToken); + } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Ads/Extensions/WechatAdsClientExecuteImagesExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.Ads/Extensions/WechatAdsClientExecuteImagesExtensions.cs index 4d3dd2a7..0f2eebcc 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.Ads/Extensions/WechatAdsClientExecuteImagesExtensions.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.Ads/Extensions/WechatAdsClientExecuteImagesExtensions.cs @@ -53,7 +53,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Ads string boundary = "--BOUNDARY--" + DateTimeOffset.Now.Ticks.ToString("x"); using var fileContent = new ByteArrayContent(request.FileBytes ?? new byte[0]); using var httpContent = new MultipartFormDataContent(boundary); - httpContent.Add(fileContent, "\"media\"", "\"" + HttpUtility.UrlEncode(request.FileName) + "\""); + httpContent.Add(fileContent, "\"file\"", "\"" + HttpUtility.UrlEncode(request.FileName) + "\""); httpContent.Headers.ContentType = MediaTypeHeaderValue.Parse("multipart/form-data; boundary=" + boundary); fileContent.Headers.ContentType = MediaTypeHeaderValue.Parse(request.FileContentType); fileContent.Headers.ContentLength = request.FileBytes?.Length ?? 0; diff --git a/src/SKIT.FlurlHttpClient.Wechat.Ads/Extensions/WechatAdsClientExecuteQualificationsExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.Ads/Extensions/WechatAdsClientExecuteQualificationsExtensions.cs new file mode 100644 index 00000000..86405d69 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Ads/Extensions/WechatAdsClientExecuteQualificationsExtensions.cs @@ -0,0 +1,74 @@ +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.Ads +{ + public static class WechatAdsClientExecuteQualificationsExtensions + { + /// + /// 异步调用 [POST] /qualifications/add 接口。 + /// + /// + /// + /// + /// + public static async Task ExecuteQualificationsAddAsync(this WechatAdsClient client, Models.QualificationsAddRequest 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(HttpMethod.Post, "qualifications", "add") + .SetOptions(request) + .SetQueryParam("access_token", request.AccessToken); + + return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } + + /// + /// 异步调用 [GET] /qualifications/get 接口。 + /// + /// + /// + /// + /// + public static async Task ExecuteQualificationsGetAsync(this WechatAdsClient client, Models.QualificationsGetRequest 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(HttpMethod.Get, "qualifications", "get") + .SetOptions(request) + .SetQueryParam("access_token", request.AccessToken); + + return await client.SendRequestAsync(flurlReq, cancellationToken: cancellationToken); + } + + /// + /// 异步调用 [POST] /qualifications/delete 接口。 + /// + /// + /// + /// + /// + public static async Task ExecuteQualificationsDeleteAsync(this WechatAdsClient client, Models.QualificationsDeleteRequest 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(HttpMethod.Post, "qualifications", "delete") + .SetOptions(request) + .SetQueryParam("access_token", request.AccessToken); + + return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Ads/Extensions/WechatAdsClientExecuteReportsExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.Ads/Extensions/WechatAdsClientExecuteReportsExtensions.cs new file mode 100644 index 00000000..c917edd5 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Ads/Extensions/WechatAdsClientExecuteReportsExtensions.cs @@ -0,0 +1,75 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Net.Http; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using Flurl; +using Flurl.Http; + +namespace SKIT.FlurlHttpClient.Wechat.Ads +{ + public static class WechatAdsClientExecuteReportsExtensions + { + /// + /// 异步调用 [GET] /daily_reports/get 接口。 + /// + /// + /// + /// + /// + public static async Task ExecuteDailyReportsGetAsync(this WechatAdsClient client, Models.DailyReportsGetRequest 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(HttpMethod.Get, "daily_reports", "get") + .SetOptions(request) + .SetQueryParam("access_token", request.AccessToken); + + if (request.DateRange != null) + flurlReq.SetQueryParam("date_range", client.JsonSerializer.Serialize(request.DateRange)); + + if (!string.IsNullOrEmpty(request.ReportType)) + flurlReq.SetQueryParam("report_type", request.ReportType); + + if (!string.IsNullOrEmpty(request.ReportLevel)) + flurlReq.SetQueryParam("level", request.ReportLevel); + + if (request.PageSize.HasValue) + flurlReq.SetQueryParam("page_size", request.PageSize.Value); + + if (request.Page.HasValue) + flurlReq.SetQueryParam("page", request.Page.Value); + + return await client.SendRequestAsync(flurlReq, cancellationToken: cancellationToken); + } + + /// + /// 异步调用 [GET] /realtime_cost/get 接口。 + /// + /// + /// + /// + /// + public static async Task ExecuteRealtimeCostGetAsync(this WechatAdsClient client, Models.RealtimeCostGetRequest 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(HttpMethod.Get, "realtime_cost", "get") + .SetOptions(request) + .SetQueryParam("access_token", request.AccessToken) + .SetQueryParam("date", request.DateString) + .SetQueryParam("level", request.Level); + + if (request.Filters != null && request.Filters.Any()) + flurlReq.SetQueryParam("filtering", client.JsonSerializer.Serialize(request.Filters)); + + return await client.SendRequestAsync(flurlReq, cancellationToken: cancellationToken); + } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Ads/Extensions/WechatAdsClientExecuteSpEntrustmentExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.Ads/Extensions/WechatAdsClientExecuteSpEntrustmentExtensions.cs new file mode 100644 index 00000000..0acf3217 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Ads/Extensions/WechatAdsClientExecuteSpEntrustmentExtensions.cs @@ -0,0 +1,54 @@ +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.Ads +{ + public static class WechatAdsClientExecuteSpEntrustmentExtensions + { + /// + /// 异步调用 [POST] /sp_entrustment/add 接口。 + /// + /// + /// + /// + /// + public static async Task ExecuteSpEntrustmentAddAsync(this WechatAdsClient client, Models.SpEntrustmentAddRequest 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(HttpMethod.Post, "sp_entrustment", "add") + .SetOptions(request) + .SetQueryParam("access_token", request.AccessToken); + + return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } + + /// + /// 异步调用 [GET] /sp_entrustment/get 接口。 + /// + /// + /// + /// + /// + public static async Task ExecuteSpEntrustmentGetAsync(this WechatAdsClient client, Models.SpEntrustmentGetRequest 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(HttpMethod.Get, "sp_entrustment", "get") + .SetOptions(request) + .SetQueryParam("access_token", request.AccessToken); + + return await client.SendRequestAsync(flurlReq, cancellationToken: cancellationToken); + } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Ads/Extensions/WechatAdsClientExecuteTargetingTagsExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.Ads/Extensions/WechatAdsClientExecuteTargetingTagsExtensions.cs new file mode 100644 index 00000000..85fa0040 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Ads/Extensions/WechatAdsClientExecuteTargetingTagsExtensions.cs @@ -0,0 +1,36 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Net.Http; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using Flurl; +using Flurl.Http; + +namespace SKIT.FlurlHttpClient.Wechat.Ads +{ + public static class WechatAdsClientExecuteTargetingTagsExtensions + { + /// + /// 异步调用 [GET] /targeting_tags/get 接口。 + /// + /// + /// + /// + /// + public static async Task ExecuteTargetingTagsGetAsync(this WechatAdsClient client, Models.TargetingTagsGetRequest 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(HttpMethod.Get, "targeting_tags", "get") + .SetOptions(request) + .SetQueryParam("access_token", request.AccessToken) + .SetQueryParam("type", request.TagType); + + return await client.SendRequestAsync(flurlReq, cancellationToken: cancellationToken); + } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/Abstractions/CommonDateRange.cs b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/Abstractions/CommonDateRange.cs new file mode 100644 index 00000000..7c214a45 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/Abstractions/CommonDateRange.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace SKIT.FlurlHttpClient.Wechat.Ads.Models.Abstractions +{ + public sealed class CommonDateRange + { + /// + /// 获取或设置开始日期字符串(格式:yyyy-MM-dd)。 + /// + [Newtonsoft.Json.JsonProperty("start_date")] + [System.Text.Json.Serialization.JsonPropertyName("start_date")] + public string StartDateString { get; set; } = string.Empty; + + /// + /// 获取或设置结束日期字符串(格式:yyyy-MM-dd)。 + /// + [Newtonsoft.Json.JsonProperty("end_date")] + [System.Text.Json.Serialization.JsonPropertyName("end_date")] + public string EndDateString { get; set; } = string.Empty; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/AdCreatives/AdCreativesAddRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/AdCreatives/AdCreativesAddRequest.cs new file mode 100644 index 00000000..11b3cd79 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/AdCreatives/AdCreativesAddRequest.cs @@ -0,0 +1,133 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.Ads.Models +{ + /// + /// 表示 [POST] /adcreatives/add 接口的请求。 + /// + public class AdCreativesAddRequest : WechatAdsRequest + { + public static class Types + { + public class Element + { + /// + /// 获取或设置广告文案。 + /// + [Newtonsoft.Json.JsonProperty("title")] + [System.Text.Json.Serialization.JsonPropertyName("title")] + public string? Title { get; set; } + + /// + /// 获取或设置广告描述。 + /// + [Newtonsoft.Json.JsonProperty("description")] + [System.Text.Json.Serialization.JsonPropertyName("description")] + public string? Description { get; set; } + + /// + /// 获取或设置图片 ID。 + /// + [Newtonsoft.Json.JsonProperty("image")] + [System.Text.Json.Serialization.JsonPropertyName("image")] + public string? ImageId { get; set; } + + /// + /// 获取或设置图片 ID 列表。 + /// + [Newtonsoft.Json.JsonProperty("image_list")] + [System.Text.Json.Serialization.JsonPropertyName("image_list")] + public IList? ImageIdList { get; set; } + + /// + /// 获取或设置链接名称类型。 + /// + [Newtonsoft.Json.JsonProperty("link_name_type")] + [System.Text.Json.Serialization.JsonPropertyName("link_name_type")] + public string? LinkNameType { get; set; } + } + + public class Share + { + /// + /// 获取或设置分享标题。 + /// + [Newtonsoft.Json.JsonProperty("share_title")] + [System.Text.Json.Serialization.JsonPropertyName("share_title")] + public string Title { get; set; } = string.Empty; + + /// + /// 获取或设置分享描述。 + /// + [Newtonsoft.Json.JsonProperty("share_description")] + [System.Text.Json.Serialization.JsonPropertyName("share_description")] + public string Description { get; set; } = string.Empty; + } + } + + /// + /// 获取或设置推广计划 ID。 + /// + [Newtonsoft.Json.JsonProperty("campaign_id")] + [System.Text.Json.Serialization.JsonPropertyName("campaign_id")] + public long CampaignId { get; set; } + + /// + /// 获取或设置广告创意名称。 + /// + [Newtonsoft.Json.JsonProperty("adcreative_name")] + [System.Text.Json.Serialization.JsonPropertyName("adcreative_name")] + public string AdCreativeName { get; set; } = string.Empty; + + /// + /// 获取或设置广告创意规格 ID。 + /// + [Newtonsoft.Json.JsonProperty("adcreative_template_id")] + [System.Text.Json.Serialization.JsonPropertyName("adcreative_template_id")] + public int AdCreativeTemplateId { get; set; } + + /// + /// 获取或设置广告创意元素信息。 + /// + [Newtonsoft.Json.JsonProperty("adcreative_elements")] + [System.Text.Json.Serialization.JsonPropertyName("adcreative_elements")] + public Types.Element AdCreativeElement { get; set; } = new Types.Element(); + + /// + /// 获取或设置投放站点列表。 + /// 默认值:["SITE_SET_WECHAT"] + /// + [Newtonsoft.Json.JsonProperty("site_set")] + [System.Text.Json.Serialization.JsonPropertyName("site_set")] + public IList SiteList { get; set; } = new List() { "SITE_SET_WECHAT" }; + + /// + /// 获取或设置目标 URL。 + /// + [Newtonsoft.Json.JsonProperty("destination_url")] + [System.Text.Json.Serialization.JsonPropertyName("destination_url")] + public string DestinationUrl { get; set; } = string.Empty; + + /// + /// 获取或设置标的物类型。 + /// + [Newtonsoft.Json.JsonProperty("product_type")] + [System.Text.Json.Serialization.JsonPropertyName("product_type")] + public string ProductType { get; set; } = string.Empty; + + /// + /// 获取或设置标的物 ID。 + /// + [Newtonsoft.Json.JsonProperty("product_refs_id")] + [System.Text.Json.Serialization.JsonPropertyName("product_refs_id")] + public string? ProductRefId { get; set; } + + /// + /// 获取或设置分享信息。 + /// + [Newtonsoft.Json.JsonProperty("share_info")] + [System.Text.Json.Serialization.JsonPropertyName("share_info")] + public Types.Share? Share { get; set; } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/AdCreatives/AdCreativesAddResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/AdCreatives/AdCreativesAddResponse.cs new file mode 100644 index 00000000..a87e12c5 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/AdCreatives/AdCreativesAddResponse.cs @@ -0,0 +1,31 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.Ads.Models +{ + /// + /// 表示 [POST] /adcreatives/add 接口的响应。 + /// + public class AdCreativesAddResponse : WechatAdsResponse + { + public static class Types + { + public class Data + { + /// + /// 获取或设置广告创意 ID。 + /// + [Newtonsoft.Json.JsonProperty("adcreative_id")] + [System.Text.Json.Serialization.JsonPropertyName("adcreative_id")] + public long AdCreativeId { get; set; } + } + } + + /// + /// 获取或设置返回数据。 + /// + [Newtonsoft.Json.JsonProperty("data")] + [System.Text.Json.Serialization.JsonPropertyName("data")] + public Types.Data Data { get; set; } = default!; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/AdCreatives/AdCreativesGetRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/AdCreatives/AdCreativesGetRequest.cs new file mode 100644 index 00000000..e94adc3c --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/AdCreatives/AdCreativesGetRequest.cs @@ -0,0 +1,39 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.Ads.Models +{ + /// + /// 表示 [GET] /adcreatives/get 接口的请求。 + /// + public class AdCreativesGetRequest : WechatAdsRequest + { + /// + /// 获取或设置广告创意 ID。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public long? AdCreativeId { get; set; } + + /// + /// 获取或设置过滤条件。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public IList? Filters { get; set; } + + /// + /// 获取或设置页大小。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public int? PageSize { get; set; } + + /// + /// 获取或设置页码。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public int? Page { get; set; } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/AdCreatives/AdCreativesGetResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/AdCreatives/AdCreativesGetResponse.cs new file mode 100644 index 00000000..681b4014 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/AdCreatives/AdCreativesGetResponse.cs @@ -0,0 +1,162 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.Ads.Models +{ + /// + /// 表示 [GET] /adcreatives/get 接口的响应。 + /// + public class AdCreativesGetResponse : WechatAdsResponse + { + public static class Types + { + public class Data + { + public static class Types + { + public class AdCreative + { + public static class Types + { + public class Element + { + /// + /// 获取或设置广告文案。 + /// + [Newtonsoft.Json.JsonProperty("title")] + [System.Text.Json.Serialization.JsonPropertyName("title")] + public string? Title { get; set; } + + /// + /// 获取或设置广告描述。 + /// + [Newtonsoft.Json.JsonProperty("description")] + [System.Text.Json.Serialization.JsonPropertyName("description")] + public string? Description { get; set; } + + /// + /// 获取或设置图片 ID。 + /// + [Newtonsoft.Json.JsonProperty("image")] + [System.Text.Json.Serialization.JsonPropertyName("image")] + public string? ImageId { get; set; } + + /// + /// 获取或设置图片 ID 列表。 + /// + [Newtonsoft.Json.JsonProperty("image_list")] + [System.Text.Json.Serialization.JsonPropertyName("image_list")] + public string[]? ImageIdList { get; set; } + + /// + /// 获取或设置链接名称类型。 + /// + [Newtonsoft.Json.JsonProperty("link_name_type")] + [System.Text.Json.Serialization.JsonPropertyName("link_name_type")] + public string? LinkNameType { get; set; } + } + } + + /// + /// 获取或设置推广计划 ID。 + /// + [Newtonsoft.Json.JsonProperty("campaign_id")] + [System.Text.Json.Serialization.JsonPropertyName("campaign_id")] + public long CampaignId { get; set; } + + /// + /// 获取或设置广告创意 ID。 + /// + [Newtonsoft.Json.JsonProperty("adcreative_id")] + [System.Text.Json.Serialization.JsonPropertyName("adcreative_id")] + public long AdCreativeId { get; set; } + + /// + /// 获取或设置广告创意名称。 + /// + [Newtonsoft.Json.JsonProperty("adcreative_name")] + [System.Text.Json.Serialization.JsonPropertyName("adcreative_name")] + public string AdCreativeName { get; set; } = default!; + + /// + /// 获取或设置广告创意规格 ID。 + /// + [Newtonsoft.Json.JsonProperty("adcreative_template_id")] + [System.Text.Json.Serialization.JsonPropertyName("adcreative_template_id")] + public int AdCreativeTemplateId { get; set; } + + /// + /// 获取或设置广告创意元素信息。 + /// + [Newtonsoft.Json.JsonProperty("adcreative_elements")] + [System.Text.Json.Serialization.JsonPropertyName("adcreative_elements")] + public Types.Element AdCreativeElement { get; set; } = default!; + + /// + /// 获取或设置投放站点列表。 + /// + [Newtonsoft.Json.JsonProperty("site_set")] + [System.Text.Json.Serialization.JsonPropertyName("site_set")] + public string[] SiteList { get; set; } = default!; + + /// + /// 获取或设置目标 URL。 + /// + [Newtonsoft.Json.JsonProperty("destination_url")] + [System.Text.Json.Serialization.JsonPropertyName("destination_url")] + public string DestinationUrl { get; set; } = default!; + + /// + /// 获取或设置标的物类型。 + /// + [Newtonsoft.Json.JsonProperty("product_type")] + [System.Text.Json.Serialization.JsonPropertyName("product_type")] + public string ProductType { get; set; } = default!; + + /// + /// 获取或设置标的物 ID。 + /// + [Newtonsoft.Json.JsonProperty("product_refs_id")] + [System.Text.Json.Serialization.JsonPropertyName("product_refs_id")] + public string? ProductRefId { get; set; } + + /// + /// 获取或设置最近修改时间戳。 + /// + [Newtonsoft.Json.JsonProperty("last_modified_time")] + [System.Text.Json.Serialization.JsonPropertyName("last_modified_time")] + public long UpdateTimestamp { get; set; } + + /// + /// 获取或设置创建时间戳。 + /// + [Newtonsoft.Json.JsonProperty("created_time")] + [System.Text.Json.Serialization.JsonPropertyName("created_time")] + public long CreateTimestamp { get; set; } + } + } + + /// + /// 获取或设置广告创意列表。 + /// + [Newtonsoft.Json.JsonProperty("list")] + [System.Text.Json.Serialization.JsonPropertyName("list")] + public Types.AdCreative[] AdCreativeList { get; set; } = default!; + + /// + /// 获取或设置分页信息。 + /// + [Newtonsoft.Json.JsonProperty("page_info")] + [System.Text.Json.Serialization.JsonPropertyName("page_info")] + public Abstractions.CommonPagination Pagination { get; set; } = default!; + } + } + + /// + /// 获取或设置返回数据。 + /// + [Newtonsoft.Json.JsonProperty("data")] + [System.Text.Json.Serialization.JsonPropertyName("data")] + public Types.Data Data { get; set; } = default!; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/AdCreatives/AdCreativesUpdateRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/AdCreatives/AdCreativesUpdateRequest.cs new file mode 100644 index 00000000..48d7cd9f --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/AdCreatives/AdCreativesUpdateRequest.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.Ads.Models +{ + /// + /// 表示 [POST] /adcreatives/update 接口的请求。 + /// + public class AdCreativesUpdateRequest : WechatAdsRequest + { + public static class Types + { + public class Element : AdCreativesAddRequest.Types.Element + { + } + } + + /// + /// 获取或设置广告创意 ID。 + /// + [Newtonsoft.Json.JsonProperty("adcreative_id")] + [System.Text.Json.Serialization.JsonPropertyName("adcreative_id")] + public long AdCreativeId { get; set; } + + /// + /// 获取或设置广告创意名称。 + /// + [Newtonsoft.Json.JsonProperty("adcreative_name")] + [System.Text.Json.Serialization.JsonPropertyName("adcreative_name")] + public string? AdCreativeName { get; set; } + + /// + /// 获取或设置广告创意元素信息。 + /// + [Newtonsoft.Json.JsonProperty("adcreative_elements")] + [System.Text.Json.Serialization.JsonPropertyName("adcreative_elements")] + public Types.Element? AdCreativeElement { get; set; } + + /// + /// 获取或设置目标 URL。 + /// + [Newtonsoft.Json.JsonProperty("destination_url")] + [System.Text.Json.Serialization.JsonPropertyName("destination_url")] + public string? DestinationUrl { get; set; } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/AdCreatives/AdCreativesUpdateResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/AdCreatives/AdCreativesUpdateResponse.cs new file mode 100644 index 00000000..01c30ddf --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/AdCreatives/AdCreativesUpdateResponse.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.Ads.Models +{ + /// + /// 表示 [POST] /adcreatives/update 接口的响应。 + /// + public class AdCreativesUpdateResponse : WechatAdsResponse + { + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/AdGroups/AdGroupsAddRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/AdGroups/AdGroupsAddRequest.cs new file mode 100644 index 00000000..0369bd98 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/AdGroups/AdGroupsAddRequest.cs @@ -0,0 +1,285 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.Ads.Models +{ + /// + /// 表示 [POST] /adgroups/add 接口的请求。 + /// + public class AdGroupsAddRequest : WechatAdsRequest + { + public static class Types + { + public class Target + { + public static class Types + { + public class GeoLocation + { + public static class Types + { + public class CustomLocation + { + /// + /// 获取或设置经度。 + /// + [Newtonsoft.Json.JsonProperty("longitude")] + [System.Text.Json.Serialization.JsonPropertyName("longitude")] + public double Longitude { get; set; } + + /// + /// 获取或设置纬度。 + /// + [Newtonsoft.Json.JsonProperty("latitude")] + [System.Text.Json.Serialization.JsonPropertyName("latitude")] + public double Latitude { get; set; } + + /// + /// 获取或设置半径(单位:米)。 + /// + [Newtonsoft.Json.JsonProperty("radius")] + [System.Text.Json.Serialization.JsonPropertyName("radius")] + public int Radius { get; set; } + } + } + + /// + /// 获取或设置地点类型。 + /// + [Newtonsoft.Json.JsonProperty("location_types")] + [System.Text.Json.Serialization.JsonPropertyName("location_types")] + public IList LocationTypes { get; set; } = new List(); + + /// + /// 获取或设置省市区县 ID 列表。 + /// + [Newtonsoft.Json.JsonProperty("regions")] + [System.Text.Json.Serialization.JsonPropertyName("regions")] + public IList? RegionIds { get; set; } + + /// + /// 获取或设置商圈 ID 列表。 + /// + [Newtonsoft.Json.JsonProperty("business_districts")] + [System.Text.Json.Serialization.JsonPropertyName("business_districts")] + public IList? BusinessDistrictIds { get; set; } + + /// + /// 获取或设置自定义地理位置列表。 + /// + [Newtonsoft.Json.JsonProperty("custom_locations")] + [System.Text.Json.Serialization.JsonPropertyName("custom_locations")] + public IList? CustomLocations { get; set; } + } + + public class WechatAdBehavior + { + /// + /// 获取或设置包含的行为列表。 + /// + [Newtonsoft.Json.JsonProperty("actions")] + [System.Text.Json.Serialization.JsonPropertyName("actions")] + public IList? IncludedActions { get; set; } + + /// + /// 获取或设置排除的行为列表。 + /// + [Newtonsoft.Json.JsonProperty("excluded_actions")] + [System.Text.Json.Serialization.JsonPropertyName("excluded_actions")] + public IList? ExcludedActions { get; set; } + } + } + + /// + /// 获取或设置年龄定向。 + /// + [Newtonsoft.Json.JsonProperty("age")] + [System.Text.Json.Serialization.JsonPropertyName("age")] + public IList? AgeRanges { get; set; } + + /// + /// 获取或设置性别定向。 + /// + [Newtonsoft.Json.JsonProperty("gender")] + [System.Text.Json.Serialization.JsonPropertyName("gender")] + public IList? GenderTypes { get; set; } + + /// + /// 获取或设置学历定向。 + /// + [Newtonsoft.Json.JsonProperty("education")] + [System.Text.Json.Serialization.JsonPropertyName("education")] + public IList? EducationTypes { get; set; } + + /// + /// 获取或设置婚恋状态定向。 + /// + [Newtonsoft.Json.JsonProperty("relationship_status")] + [System.Text.Json.Serialization.JsonPropertyName("relationship_status")] + public IList? RelationshipStatuses { get; set; } + + /// + /// 获取或设置用户付费习惯定向。 + /// + [Newtonsoft.Json.JsonProperty("user_paying_type")] + [System.Text.Json.Serialization.JsonPropertyName("user_paying_type")] + public IList? UserPayingTypes { get; set; } + + /// + /// 获取或设置联网方式定向。 + /// + [Newtonsoft.Json.JsonProperty("network_type")] + [System.Text.Json.Serialization.JsonPropertyName("network_type")] + public IList? NetworkTypes { get; set; } + + /// + /// 获取或设置移动运营商定向。 + /// + [Newtonsoft.Json.JsonProperty("network_operator")] + [System.Text.Json.Serialization.JsonPropertyName("network_operator")] + public IList? NetworkOperatorTypes { get; set; } + + /// + /// 获取或设置操作系统定向。 + /// + [Newtonsoft.Json.JsonProperty("user_os")] + [System.Text.Json.Serialization.JsonPropertyName("user_os")] + public IList? UserOSTypes { get; set; } + + /// + /// 获取或设置移动设备价格定向。 + /// + [Newtonsoft.Json.JsonProperty("device_price")] + [System.Text.Json.Serialization.JsonPropertyName("device_price")] + public IList? DevicePriceTypes { get; set; } + + /// + /// 获取或设置地理位置定向。 + /// + [Newtonsoft.Json.JsonProperty("geo_location")] + [System.Text.Json.Serialization.JsonPropertyName("geo_location")] + public Types.GeoLocation? GeoLocation { get; set; } + + /// + /// 获取或设置微信广告行为定向。 + /// + [Newtonsoft.Json.JsonProperty("wechat_ad_behavior")] + [System.Text.Json.Serialization.JsonPropertyName("wechat_ad_behavior")] + public Types.WechatAdBehavior? WechatAdBehavior { get; set; } + + /// + /// 获取或设置包含的自定义人群 ID 列表。 + /// + [Newtonsoft.Json.JsonProperty("custom_audience")] + [System.Text.Json.Serialization.JsonPropertyName("custom_audience")] + public IList? IncludedCustomAudienceIds { get; set; } + + /// + /// 获取或设置排除的自定义人群 ID 列表。 + /// + [Newtonsoft.Json.JsonProperty("excluded_custom_audience")] + [System.Text.Json.Serialization.JsonPropertyName("excluded_custom_audience")] + public IList? ExcludedCustomAudienceIds { get; set; } + } + } + + /// + /// 获取或设置推广计划 ID。 + /// + [Newtonsoft.Json.JsonProperty("campaign_id")] + [System.Text.Json.Serialization.JsonPropertyName("campaign_id")] + public long CampaignId { get; set; } + + /// + /// 获取或设置广告组名称。 + /// + [Newtonsoft.Json.JsonProperty("adgroup_name")] + [System.Text.Json.Serialization.JsonPropertyName("adgroup_name")] + public string AdGroupName { get; set; } = string.Empty; + + /// + /// 获取或设置投放站点列表。 + /// 默认值:["SITE_SET_WECHAT"] + /// + [Newtonsoft.Json.JsonProperty("site_set")] + [System.Text.Json.Serialization.JsonPropertyName("site_set")] + public IList SiteList { get; set; } = new List() { "SITE_SET_WECHAT" }; + + /// + /// 获取或设置标的物类型。 + /// + [Newtonsoft.Json.JsonProperty("product_type")] + [System.Text.Json.Serialization.JsonPropertyName("product_type")] + public string ProductType { get; set; } = string.Empty; + + /// + /// 获取或设置标的物 ID。 + /// + [Newtonsoft.Json.JsonProperty("product_refs_id")] + [System.Text.Json.Serialization.JsonPropertyName("product_refs_id")] + public string? ProductRefId { get; set; } + + /// + /// 获取或设置定向条件。 + /// + [Newtonsoft.Json.JsonProperty("targeting")] + [System.Text.Json.Serialization.JsonPropertyName("targeting")] + public Types.Target Target { get; set; } = new Types.Target(); + + /// + /// 获取或设置优化目标类型。 + /// + [Newtonsoft.Json.JsonProperty("optimization_goal")] + [System.Text.Json.Serialization.JsonPropertyName("optimization_goal")] + public string OptimizationGoalType { get; set; } = string.Empty; + + /// + /// 获取或设置出价方式类型。 + /// + [Newtonsoft.Json.JsonProperty("billing_event")] + [System.Text.Json.Serialization.JsonPropertyName("billing_event")] + public string BillingEventType { get; set; } = string.Empty; + + /// + /// 获取或设置广告出价(单位:分)。 + /// + [Newtonsoft.Json.JsonProperty("bid_amount")] + [System.Text.Json.Serialization.JsonPropertyName("bid_amount")] + public int BidAmount { get; set; } + + /// + /// 获取或设置开始投放日期字符串(格式:yyyy-MM-dd)。 + /// + [Newtonsoft.Json.JsonProperty("begin_date")] + [System.Text.Json.Serialization.JsonPropertyName("begin_date")] + public string BeginDateString { get; set; } = string.Empty; + + /// + /// 获取或设置结束投放日期字符串(格式:yyyy-MM-dd)。 + /// + [Newtonsoft.Json.JsonProperty("end_date")] + [System.Text.Json.Serialization.JsonPropertyName("end_date")] + public string EndDateString { get; set; } = string.Empty; + + /// + /// 获取或设置投放时间段。 + /// + [Newtonsoft.Json.JsonProperty("time_series")] + [System.Text.Json.Serialization.JsonPropertyName("time_series")] + public string? TimeSeries { get; set; } + + /// + /// 获取或设置日限额(单位:分)。 + /// + [Newtonsoft.Json.JsonProperty("daily_budget")] + [System.Text.Json.Serialization.JsonPropertyName("daily_budget")] + public int? DailyBudget { get; set; } + + /// + /// 获取或设置广告状态。 + /// + [Newtonsoft.Json.JsonProperty("configured_status")] + [System.Text.Json.Serialization.JsonPropertyName("configured_status")] + public string? ConfiguredStatus { get; set; } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/AdGroups/AdGroupsAddResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/AdGroups/AdGroupsAddResponse.cs new file mode 100644 index 00000000..dbaa2791 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/AdGroups/AdGroupsAddResponse.cs @@ -0,0 +1,31 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.Ads.Models +{ + /// + /// 表示 [POST] /adgroups/add 接口的响应。 + /// + public class AdGroupsAddResponse : WechatAdsResponse + { + public static class Types + { + public class Data + { + /// + /// 获取或设置广告组 ID。 + /// + [Newtonsoft.Json.JsonProperty("adgroup_id")] + [System.Text.Json.Serialization.JsonPropertyName("adgroup_id")] + public long AdGroupId { get; set; } + } + } + + /// + /// 获取或设置返回数据。 + /// + [Newtonsoft.Json.JsonProperty("data")] + [System.Text.Json.Serialization.JsonPropertyName("data")] + public Types.Data Data { get; set; } = default!; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/AdGroups/AdGroupsDeleteRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/AdGroups/AdGroupsDeleteRequest.cs new file mode 100644 index 00000000..cadf9595 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/AdGroups/AdGroupsDeleteRequest.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.Ads.Models +{ + /// + /// 表示 [POST] /adgroups/delete 接口的请求。 + /// + public class AdGroupsDeleteRequest : WechatAdsRequest + { + /// + /// 获取或设置广告组 ID。 + /// + [Newtonsoft.Json.JsonProperty("adgroup_id")] + [System.Text.Json.Serialization.JsonPropertyName("adgroup_id")] + public long AdGroupId { get; set; } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/AdGroups/AdGroupsDeleteResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/AdGroups/AdGroupsDeleteResponse.cs new file mode 100644 index 00000000..5465bd2a --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/AdGroups/AdGroupsDeleteResponse.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.Ads.Models +{ + /// + /// 表示 [POST] /adgroups/delete 接口的响应。 + /// + public class AdGroupsDeleteResponse : WechatAdsResponse + { + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/AdGroups/AdGroupsGetRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/AdGroups/AdGroupsGetRequest.cs new file mode 100644 index 00000000..65b19b69 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/AdGroups/AdGroupsGetRequest.cs @@ -0,0 +1,39 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.Ads.Models +{ + /// + /// 表示 [GET] /adgroups/get 接口的请求。 + /// + public class AdGroupsGetRequest : WechatAdsRequest + { + /// + /// 获取或设置广告组 ID。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public long? AdGroupId { get; set; } + + /// + /// 获取或设置过滤条件。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public IList? Filters { get; set; } + + /// + /// 获取或设置页大小。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public int? PageSize { get; set; } + + /// + /// 获取或设置页码。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public int? Page { get; set; } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/AdGroups/AdGroupsGetResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/AdGroups/AdGroupsGetResponse.cs new file mode 100644 index 00000000..fcd7fb0b --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/AdGroups/AdGroupsGetResponse.cs @@ -0,0 +1,352 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.Ads.Models +{ + /// + /// 表示 [GET] /adgroups/get 接口的响应。 + /// + public class AdGroupsGetResponse : WechatAdsResponse + { + public static class Types + { + public class Data + { + public static class Types + { + public class AdGroup + { + public class Types + { + public class Target + { + public static class Types + { + public class GeoLocation + { + public static class Types + { + public class CustomLocation + { + /// + /// 获取或设置经度。 + /// + [Newtonsoft.Json.JsonProperty("longitude")] + [System.Text.Json.Serialization.JsonPropertyName("longitude")] + public double Longitude { get; set; } + + /// + /// 获取或设置纬度。 + /// + [Newtonsoft.Json.JsonProperty("latitude")] + [System.Text.Json.Serialization.JsonPropertyName("latitude")] + public double Latitude { get; set; } + + /// + /// 获取或设置半径(单位:米)。 + /// + [Newtonsoft.Json.JsonProperty("radius")] + [System.Text.Json.Serialization.JsonPropertyName("radius")] + public int Radius { get; set; } + } + } + + /// + /// 获取或设置地点类型。 + /// + [Newtonsoft.Json.JsonProperty("location_types")] + [System.Text.Json.Serialization.JsonPropertyName("location_types")] + public string[] LocationTypes { get; set; } = new string[0]; + + /// + /// 获取或设置省市区县 ID 列表。 + /// + [Newtonsoft.Json.JsonProperty("regions")] + [System.Text.Json.Serialization.JsonPropertyName("regions")] + public int[]? RegionIds { get; set; } + + /// + /// 获取或设置商圈 ID 列表。 + /// + [Newtonsoft.Json.JsonProperty("business_districts")] + [System.Text.Json.Serialization.JsonPropertyName("business_districts")] + public int[]? BusinessDistrictIds { get; set; } + + /// + /// 获取或设置自定义地理位置列表。 + /// + [Newtonsoft.Json.JsonProperty("custom_locations")] + [System.Text.Json.Serialization.JsonPropertyName("custom_locations")] + public Types.CustomLocation[]? CustomLocations { get; set; } + } + + public class WechatAdBehavior + { + /// + /// 获取或设置包含的行为列表。 + /// + [Newtonsoft.Json.JsonProperty("actions")] + [System.Text.Json.Serialization.JsonPropertyName("actions")] + public string[]? IncludedActions { get; set; } + + /// + /// 获取或设置排除的行为列表。 + /// + [Newtonsoft.Json.JsonProperty("excluded_actions")] + [System.Text.Json.Serialization.JsonPropertyName("excluded_actions")] + public string[]? ExcludedActions { get; set; } + } + } + + /// + /// 获取或设置年龄定向。 + /// + [Newtonsoft.Json.JsonProperty("age")] + [System.Text.Json.Serialization.JsonPropertyName("age")] + public string[]? AgeRanges { get; set; } + + /// + /// 获取或设置性别定向。 + /// + [Newtonsoft.Json.JsonProperty("gender")] + [System.Text.Json.Serialization.JsonPropertyName("gender")] + public string[]? GenderTypes { get; set; } + + /// + /// 获取或设置学历定向。 + /// + [Newtonsoft.Json.JsonProperty("education")] + [System.Text.Json.Serialization.JsonPropertyName("education")] + public string[]? EducationTypes { get; set; } + + /// + /// 获取或设置婚恋状态定向。 + /// + [Newtonsoft.Json.JsonProperty("relationship_status")] + [System.Text.Json.Serialization.JsonPropertyName("relationship_status")] + public string[]? RelationshipStatuses { get; set; } + + /// + /// 获取或设置用户付费习惯定向。 + /// + [Newtonsoft.Json.JsonProperty("user_paying_type")] + [System.Text.Json.Serialization.JsonPropertyName("user_paying_type")] + public string[]? UserPayingTypes { get; set; } + + /// + /// 获取或设置联网方式定向。 + /// + [Newtonsoft.Json.JsonProperty("network_type")] + [System.Text.Json.Serialization.JsonPropertyName("network_type")] + public string[]? NetworkTypes { get; set; } + + /// + /// 获取或设置移动运营商定向。 + /// + [Newtonsoft.Json.JsonProperty("network_operator")] + [System.Text.Json.Serialization.JsonPropertyName("network_operator")] + public string[]? NetworkOperatorTypes { get; set; } + + /// + /// 获取或设置操作系统定向。 + /// + [Newtonsoft.Json.JsonProperty("user_os")] + [System.Text.Json.Serialization.JsonPropertyName("user_os")] + public string[]? UserOSTypes { get; set; } + + /// + /// 获取或设置移动设备价格定向。 + /// + [Newtonsoft.Json.JsonProperty("device_price")] + [System.Text.Json.Serialization.JsonPropertyName("device_price")] + public string[]? DevicePriceTypes { get; set; } + + /// + /// 获取或设置地理位置定向。 + /// + [Newtonsoft.Json.JsonProperty("geo_location")] + [System.Text.Json.Serialization.JsonPropertyName("geo_location")] + public Types.GeoLocation? GeoLocation { get; set; } + + /// + /// 获取或设置微信广告行为定向。 + /// + [Newtonsoft.Json.JsonProperty("wechat_ad_behavior")] + [System.Text.Json.Serialization.JsonPropertyName("wechat_ad_behavior")] + public Types.WechatAdBehavior? WechatAdBehavior { get; set; } + + /// + /// 获取或设置包含的自定义人群 ID 列表。 + /// + [Newtonsoft.Json.JsonProperty("custom_audience")] + [System.Text.Json.Serialization.JsonPropertyName("custom_audience")] + public int[]? IncludedCustomAudienceIds { get; set; } + + /// + /// 获取或设置排除的自定义人群 ID 列表。 + /// + [Newtonsoft.Json.JsonProperty("excluded_custom_audience")] + [System.Text.Json.Serialization.JsonPropertyName("excluded_custom_audience")] + public int[]? ExcludedCustomAudienceIds { get; set; } + } + } + + /// + /// 获取或设置推广计划 ID。 + /// + [Newtonsoft.Json.JsonProperty("campaign_id")] + [System.Text.Json.Serialization.JsonPropertyName("campaign_id")] + public long CampaignId { get; set; } + + /// + /// 获取或设置广告组 ID。 + /// + [Newtonsoft.Json.JsonProperty("adgroup_id")] + [System.Text.Json.Serialization.JsonPropertyName("adgroup_id")] + public long AdGroupId { get; set; } + + /// + /// 获取或设置广告组名称。 + /// + [Newtonsoft.Json.JsonProperty("adgroup_name")] + [System.Text.Json.Serialization.JsonPropertyName("adgroup_name")] + public string AdGroupName { get; set; } = default!; + + /// + /// 获取或设置投放站点列表。 + /// + [Newtonsoft.Json.JsonProperty("site_set")] + [System.Text.Json.Serialization.JsonPropertyName("site_set")] + public string[] SiteList { get; set; } = default!; + + /// + /// 获取或设置标的物类型。 + /// + [Newtonsoft.Json.JsonProperty("product_type")] + [System.Text.Json.Serialization.JsonPropertyName("product_type")] + public string ProductType { get; set; } = default!; + + /// + /// 获取或设置标的物 ID。 + /// + [Newtonsoft.Json.JsonProperty("product_refs_id")] + [System.Text.Json.Serialization.JsonPropertyName("product_refs_id")] + public string? ProductRefId { get; set; } + + /// + /// 获取或设置定向条件。 + /// + [Newtonsoft.Json.JsonProperty("targeting")] + [System.Text.Json.Serialization.JsonPropertyName("targeting")] + public Types.Target Target { get; set; } = default!; + + /// + /// 获取或设置优化目标类型。 + /// + [Newtonsoft.Json.JsonProperty("optimization_goal")] + [System.Text.Json.Serialization.JsonPropertyName("optimization_goal")] + public string OptimizationGoalType { get; set; } = default!; + + /// + /// 获取或设置出价方式类型。 + /// + [Newtonsoft.Json.JsonProperty("billing_event")] + [System.Text.Json.Serialization.JsonPropertyName("billing_event")] + public string BillingEventType { get; set; } = default!; + + /// + /// 获取或设置广告出价(单位:分)。 + /// + [Newtonsoft.Json.JsonProperty("bid_amount")] + [System.Text.Json.Serialization.JsonPropertyName("bid_amount")] + public int BidAmount { get; set; } + + /// + /// 获取或设置开始投放日期字符串(格式:yyyy-MM-dd)。 + /// + [Newtonsoft.Json.JsonProperty("begin_date")] + [System.Text.Json.Serialization.JsonPropertyName("begin_date")] + public string BeginDateString { get; set; } = default!; + + /// + /// 获取或设置结束投放日期字符串(格式:yyyy-MM-dd)。 + /// + [Newtonsoft.Json.JsonProperty("end_date")] + [System.Text.Json.Serialization.JsonPropertyName("end_date")] + public string EndDateString { get; set; } = default!; + + /// + /// 获取或设置投放时间段。 + /// + [Newtonsoft.Json.JsonProperty("time_series")] + [System.Text.Json.Serialization.JsonPropertyName("time_series")] + public string TimeSeries { get; set; } = default!; + + /// + /// 获取或设置日限额(单位:分)。 + /// + [Newtonsoft.Json.JsonProperty("daily_budget")] + [System.Text.Json.Serialization.JsonPropertyName("daily_budget")] + public int? DailyBudget { get; set; } + + /// + /// 获取或设置广告状态。 + /// + [Newtonsoft.Json.JsonProperty("configured_status")] + [System.Text.Json.Serialization.JsonPropertyName("configured_status")] + public string ConfiguredStatus { get; set; } = default!; + + /// + /// 获取或设置系统状态。 + /// + [Newtonsoft.Json.JsonProperty("system_status")] + [System.Text.Json.Serialization.JsonPropertyName("system_status")] + public string SystemStatus { get; set; } = default!; + + /// + /// 获取或设置审核拒绝原因。 + /// + [Newtonsoft.Json.JsonProperty("reject_message")] + [System.Text.Json.Serialization.JsonPropertyName("reject_message")] + public string? RejectReason { get; set; } + + /// + /// 获取或设置最近修改时间戳。 + /// + [Newtonsoft.Json.JsonProperty("last_modified_time")] + [System.Text.Json.Serialization.JsonPropertyName("last_modified_time")] + public long UpdateTimestamp { get; set; } + + /// + /// 获取或设置创建时间戳。 + /// + [Newtonsoft.Json.JsonProperty("created_time")] + [System.Text.Json.Serialization.JsonPropertyName("created_time")] + public long CreateTimestamp { get; set; } + } + } + + /// + /// 获取或设置广告组列表。 + /// + [Newtonsoft.Json.JsonProperty("list")] + [System.Text.Json.Serialization.JsonPropertyName("list")] + public Types.AdGroup[] AdGroupList { get; set; } = default!; + + /// + /// 获取或设置分页信息。 + /// + [Newtonsoft.Json.JsonProperty("page_info")] + [System.Text.Json.Serialization.JsonPropertyName("page_info")] + public Abstractions.CommonPagination Pagination { get; set; } = default!; + } + } + + /// + /// 获取或设置返回数据。 + /// + [Newtonsoft.Json.JsonProperty("data")] + [System.Text.Json.Serialization.JsonPropertyName("data")] + public Types.Data Data { get; set; } = default!; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/AdGroups/AdGroupsUpdateRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/AdGroups/AdGroupsUpdateRequest.cs new file mode 100644 index 00000000..171efb59 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/AdGroups/AdGroupsUpdateRequest.cs @@ -0,0 +1,81 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.Ads.Models +{ + /// + /// 表示 [POST] /adgroups/update 接口的请求。 + /// + public class AdGroupsUpdateRequest : WechatAdsRequest + { + public static class Types + { + public class Target : AdGroupsAddRequest.Types.Target + { + } + } + + /// + /// 获取或设置广告组 ID。 + /// + [Newtonsoft.Json.JsonProperty("adgroup_id")] + [System.Text.Json.Serialization.JsonPropertyName("adgroup_id")] + public long AdGroupId { get; set; } + + /// + /// 获取或设置广告组名称。 + /// + [Newtonsoft.Json.JsonProperty("adgroup_name")] + [System.Text.Json.Serialization.JsonPropertyName("adgroup_name")] + public string? AdGroupName { get; set; } + + /// + /// 获取或设置定向条件。 + /// + [Newtonsoft.Json.JsonProperty("targeting")] + [System.Text.Json.Serialization.JsonPropertyName("targeting")] + public Types.Target? Target { get; set; } + + /// + /// 获取或设置广告出价(单位:分)。 + /// + [Newtonsoft.Json.JsonProperty("bid_amount")] + [System.Text.Json.Serialization.JsonPropertyName("bid_amount")] + public int? BidAmount { get; set; } + + /// + /// 获取或设置开始投放日期字符串(格式:yyyy-MM-dd)。 + /// + [Newtonsoft.Json.JsonProperty("begin_date")] + [System.Text.Json.Serialization.JsonPropertyName("begin_date")] + public string? BeginDateString { get; set; } + + /// + /// 获取或设置结束投放日期字符串(格式:yyyy-MM-dd)。 + /// + [Newtonsoft.Json.JsonProperty("end_date")] + [System.Text.Json.Serialization.JsonPropertyName("end_date")] + public string? EndDateString { get; set; } + + /// + /// 获取或设置投放时间段。 + /// + [Newtonsoft.Json.JsonProperty("time_series")] + [System.Text.Json.Serialization.JsonPropertyName("time_series")] + public string? TimeSeries { get; set; } + + /// + /// 获取或设置日限额(单位:分)。 + /// + [Newtonsoft.Json.JsonProperty("daily_budget")] + [System.Text.Json.Serialization.JsonPropertyName("daily_budget")] + public int? DailyBudget { get; set; } + + /// + /// 获取或设置广告状态。 + /// + [Newtonsoft.Json.JsonProperty("configured_status")] + [System.Text.Json.Serialization.JsonPropertyName("configured_status")] + public string? ConfiguredStatus { get; set; } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/AdGroups/AdGroupsUpdateResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/AdGroups/AdGroupsUpdateResponse.cs new file mode 100644 index 00000000..65e279e2 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/AdGroups/AdGroupsUpdateResponse.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.Ads.Models +{ + /// + /// 表示 [POST] /adgroups/update 接口的响应。 + /// + public class AdGroupsUpdateResponse : WechatAdsResponse + { + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/Ads/AdsAddRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/Ads/AdsAddRequest.cs new file mode 100644 index 00000000..072097b4 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/Ads/AdsAddRequest.cs @@ -0,0 +1,39 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.Ads.Models +{ + /// + /// 表示 [POST] /ads/add 接口的请求。 + /// + public class AdsAddRequest : WechatAdsRequest + { + /// + /// 获取或设置广告组 ID。 + /// + [Newtonsoft.Json.JsonProperty("adgroup_id")] + [System.Text.Json.Serialization.JsonPropertyName("adgroup_id")] + public long AdGroupId { get; set; } + + /// + /// 获取或设置广告创意 ID。 + /// + [Newtonsoft.Json.JsonProperty("adcreative_id")] + [System.Text.Json.Serialization.JsonPropertyName("adcreative_id")] + public long AdCreativeId { get; set; } + + /// + /// 获取或设置广告名称。 + /// + [Newtonsoft.Json.JsonProperty("ad_name")] + [System.Text.Json.Serialization.JsonPropertyName("ad_name")] + public string AdName { get; set; } = string.Empty; + + /// + /// 获取或设置广告状态。 + /// + [Newtonsoft.Json.JsonProperty("configured_status")] + [System.Text.Json.Serialization.JsonPropertyName("configured_status")] + public string? ConfiguredStatus { get; set; } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/Ads/AdsAddResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/Ads/AdsAddResponse.cs new file mode 100644 index 00000000..cd354a09 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/Ads/AdsAddResponse.cs @@ -0,0 +1,31 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.Ads.Models +{ + /// + /// 表示 [POST] /ads/add 接口的响应。 + /// + public class AdsAddResponse : WechatAdsResponse + { + public static class Types + { + public class Data + { + /// + /// 获取或设置广告 ID。 + /// + [Newtonsoft.Json.JsonProperty("ad_id")] + [System.Text.Json.Serialization.JsonPropertyName("ad_id")] + public long AdId { get; set; } + } + } + + /// + /// 获取或设置返回数据。 + /// + [Newtonsoft.Json.JsonProperty("data")] + [System.Text.Json.Serialization.JsonPropertyName("data")] + public Types.Data Data { get; set; } = default!; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/Ads/AdsDeleteRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/Ads/AdsDeleteRequest.cs new file mode 100644 index 00000000..b94bd262 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/Ads/AdsDeleteRequest.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.Ads.Models +{ + /// + /// 表示 [POST] /ads/delete 接口的请求。 + /// + public class AdsDeleteRequest : WechatAdsRequest + { + /// + /// 获取或设置广告 ID。 + /// + [Newtonsoft.Json.JsonProperty("ad_id")] + [System.Text.Json.Serialization.JsonPropertyName("ad_id")] + public long AdId { get; set; } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/Ads/AdsDeleteResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/Ads/AdsDeleteResponse.cs new file mode 100644 index 00000000..26db8dfb --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/Ads/AdsDeleteResponse.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.Ads.Models +{ + /// + /// 表示 [POST] /ads/delete 接口的响应。 + /// + public class AdsDeleteResponse : WechatAdsResponse + { + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/Ads/AdsGetRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/Ads/AdsGetRequest.cs new file mode 100644 index 00000000..51c2fbca --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/Ads/AdsGetRequest.cs @@ -0,0 +1,39 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.Ads.Models +{ + /// + /// 表示 [GET] /ads/get 接口的请求。 + /// + public class AdsGetRequest : WechatAdsRequest + { + /// + /// 获取或设置广告 ID。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public long? AdId { get; set; } + + /// + /// 获取或设置过滤条件。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public IList? Filters { get; set; } + + /// + /// 获取或设置页大小。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public int? PageSize { get; set; } + + /// + /// 获取或设置页码。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public int? Page { get; set; } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/Ads/AdsGetResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/Ads/AdsGetResponse.cs new file mode 100644 index 00000000..62f9add2 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/Ads/AdsGetResponse.cs @@ -0,0 +1,121 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.Ads.Models +{ + /// + /// 表示 [GET] /ads/get 接口的响应。 + /// + public class AdsGetResponse : WechatAdsResponse + { + public static class Types + { + public class Data + { + public static class Types + { + public class Ad + { + public static class Types + { + public class AdCreative : AdCreativesGetResponse.Types.Data.Types.AdCreative + { + } + } + + /// + /// 获取或设置推广计划 ID。 + /// + [Newtonsoft.Json.JsonProperty("campaign_id")] + [System.Text.Json.Serialization.JsonPropertyName("campaign_id")] + public long CampaignId { get; set; } + + /// + /// 获取或设置广告 ID。 + /// + [Newtonsoft.Json.JsonProperty("ad_id")] + [System.Text.Json.Serialization.JsonPropertyName("ad_id")] + public long AdId { get; set; } + + /// + /// 获取或设置广告名称。 + /// + [Newtonsoft.Json.JsonProperty("ad_name")] + [System.Text.Json.Serialization.JsonPropertyName("ad_name")] + public string AdName { get; set; } = default!; + + /// + /// 获取或设置广告组 ID。 + /// + [Newtonsoft.Json.JsonProperty("adgroup_id")] + [System.Text.Json.Serialization.JsonPropertyName("adgroup_id")] + public long AdGroupId { get; set; } + + /// + /// 获取或设置广告创意信息。 + /// + [Newtonsoft.Json.JsonProperty("adcreative")] + [System.Text.Json.Serialization.JsonPropertyName("adcreative")] + public Types.AdCreative AdCreative { get; set; } = default!; + + /// + /// 获取或设置广告状态。 + /// + [Newtonsoft.Json.JsonProperty("configured_status")] + [System.Text.Json.Serialization.JsonPropertyName("configured_status")] + public string ConfiguredStatus { get; set; } = default!; + + /// + /// 获取或设置系统状态。 + /// + [Newtonsoft.Json.JsonProperty("system_status")] + [System.Text.Json.Serialization.JsonPropertyName("system_status")] + public string SystemStatus { get; set; } = default!; + + /// + /// 获取或设置审核拒绝原因。 + /// + [Newtonsoft.Json.JsonProperty("reject_message")] + [System.Text.Json.Serialization.JsonPropertyName("reject_message")] + public string? RejectReason { get; set; } + + /// + /// 获取或设置最近修改时间戳。 + /// + [Newtonsoft.Json.JsonProperty("last_modified_time")] + [System.Text.Json.Serialization.JsonPropertyName("last_modified_time")] + public long UpdateTimestamp { get; set; } + + /// + /// 获取或设置创建时间戳。 + /// + [Newtonsoft.Json.JsonProperty("created_time")] + [System.Text.Json.Serialization.JsonPropertyName("created_time")] + public long CreateTimestamp { get; set; } + } + } + + /// + /// 获取或设置广告列表。 + /// + [Newtonsoft.Json.JsonProperty("list")] + [System.Text.Json.Serialization.JsonPropertyName("list")] + public Types.Ad[] AdList { get; set; } = default!; + + /// + /// 获取或设置分页信息。 + /// + [Newtonsoft.Json.JsonProperty("page_info")] + [System.Text.Json.Serialization.JsonPropertyName("page_info")] + public Abstractions.CommonPagination Pagination { get; set; } = default!; + } + } + + /// + /// 获取或设置返回数据。 + /// + [Newtonsoft.Json.JsonProperty("data")] + [System.Text.Json.Serialization.JsonPropertyName("data")] + public Types.Data Data { get; set; } = default!; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/Ads/AdsUpdateRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/Ads/AdsUpdateRequest.cs new file mode 100644 index 00000000..5c564b06 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/Ads/AdsUpdateRequest.cs @@ -0,0 +1,32 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.Ads.Models +{ + /// + /// 表示 [POST] /ads/update 接口的请求。 + /// + public class AdsUpdateRequest : WechatAdsRequest + { + /// + /// 获取或设置广告 ID。 + /// + [Newtonsoft.Json.JsonProperty("ad_id")] + [System.Text.Json.Serialization.JsonPropertyName("ad_id")] + public long AdId { get; set; } + + /// + /// 获取或设置广告名称。 + /// + [Newtonsoft.Json.JsonProperty("ad_name")] + [System.Text.Json.Serialization.JsonPropertyName("ad_name")] + public string? AdName { get; set; } + + /// + /// 获取或设置广告状态。 + /// + [Newtonsoft.Json.JsonProperty("configured_status")] + [System.Text.Json.Serialization.JsonPropertyName("configured_status")] + public string? ConfiguredStatus { get; set; } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/Ads/AdsUpdateResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/Ads/AdsUpdateResponse.cs new file mode 100644 index 00000000..2697bf10 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/Ads/AdsUpdateResponse.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.Ads.Models +{ + /// + /// 表示 [POST] /ads/update 接口的响应。 + /// + public class AdsUpdateResponse : WechatAdsResponse + { + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/AsyncTasks/AsyncTasksAddRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/AsyncTasks/AsyncTasksAddRequest.cs new file mode 100644 index 00000000..9e8ca240 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/AsyncTasks/AsyncTasksAddRequest.cs @@ -0,0 +1,124 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.Ads.Models +{ + /// + /// 表示 [POST] /async_tasks/add 接口的请求。 + /// + public class AsyncTasksAddRequest : WechatAdsRequest + { + public static class Types + { + public class Specification + { + public static class Types + { + public class AdGroupHourlyReportSpec + { + /// + /// 获取或设置查询日期字符串(格式:yyyy-MM-dd)。 + /// + [Newtonsoft.Json.JsonProperty("date")] + [System.Text.Json.Serialization.JsonPropertyName("date")] + public string DateString { get; set; } = string.Empty; + } + + public class AdGroupDailyReportSpec : AdGroupHourlyReportSpec + { + } + + public class WechatAdvertisingDataSpec + { + public static class Types + { + public sealed class TimeRange + { + /// + /// 获取或设置开始时间戳。 + /// + [Newtonsoft.Json.JsonProperty("begin_time")] + [System.Text.Json.Serialization.JsonPropertyName("begin_time")] + public long BeginTimestamp { get; set; } + + /// + /// 获取或设置结束时间戳。 + /// + [Newtonsoft.Json.JsonProperty("end_time")] + [System.Text.Json.Serialization.JsonPropertyName("end_time")] + public long EndTimestamp { get; set; } + } + } + + /// + /// 获取或设置查询时间范围)。 + /// + [Newtonsoft.Json.JsonProperty("last_modified_time_range")] + [System.Text.Json.Serialization.JsonPropertyName("last_modified_time_range")] + public Types.TimeRange TimeRange { get; set; } = new Types.TimeRange(); + + /// + /// 获取或设置查询字段列表。 + /// + [Newtonsoft.Json.JsonProperty("fields")] + [System.Text.Json.Serialization.JsonPropertyName("fields")] + public IList FieldList { get; set; } = new List(); + } + + public class POIHourlyReportSpec : AdGroupHourlyReportSpec + { + } + } + + /// + /// 获取或设置广告组小时报表查询条件所需条件信息。 + /// + [Newtonsoft.Json.JsonProperty("task_type_adgroup_hourly_report_spec")] + [System.Text.Json.Serialization.JsonPropertyName("task_type_adgroup_hourly_report_spec")] + public Types.AdGroupHourlyReportSpec? AdGroupHourlyReportSpec { get; set; } + + /// + /// 获取或设置广告组天报表查询条件所需条件信息。 + /// + [Newtonsoft.Json.JsonProperty("task_type_adgroup_daily_report_spec")] + [System.Text.Json.Serialization.JsonPropertyName("task_type_adgroup_daily_report_spec")] + public Types.AdGroupDailyReportSpec? AdGroupDailyReportSpec { get; set; } + + /// + /// 获取或设置微信广告数据查询条件所需条件信息。 + /// + [Newtonsoft.Json.JsonProperty("task_type_wechat_advertising_data_spec")] + [System.Text.Json.Serialization.JsonPropertyName("task_type_wechat_advertising_data_spec")] + public Types.WechatAdvertisingDataSpec? WechatAdvertisingDataSpec { get; set; } + + /// + /// 获取或设置微信门店小时报表查询条件所需条件信息。 + /// + [Newtonsoft.Json.JsonProperty("task_type_poi_hourly_report_spec")] + [System.Text.Json.Serialization.JsonPropertyName("task_type_poi_hourly_report_spec")] + public Types.POIHourlyReportSpec? POIHourlyReportSpec { get; set; } + } + } + + /// + /// 获取或设置任务名称。 + /// + [Newtonsoft.Json.JsonProperty("task_name")] + [System.Text.Json.Serialization.JsonPropertyName("task_name")] + public string TaskName { get; set; } = string.Empty; + + /// + /// 获取或设置任务类型。 + /// + [Newtonsoft.Json.JsonProperty("task_type")] + [System.Text.Json.Serialization.JsonPropertyName("task_type")] + public string TaskType { get; set; } = string.Empty; + + /// + /// 获取或设置任务所需条件信息。 + /// + [Newtonsoft.Json.JsonProperty("task_spec")] + [System.Text.Json.Serialization.JsonPropertyName("task_spec")] + public Types.Specification TaskSpecification { get; set; } = new Types.Specification(); + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/AsyncTasks/AsyncTasksAddResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/AsyncTasks/AsyncTasksAddResponse.cs new file mode 100644 index 00000000..34097b03 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/AsyncTasks/AsyncTasksAddResponse.cs @@ -0,0 +1,31 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.Ads.Models +{ + /// + /// 表示 [POST] /async_tasks/add 接口的响应。 + /// + public class AsyncTasksAddResponse : WechatAdsResponse + { + public static class Types + { + public class Data + { + /// + /// 获取或设置任务 ID。 + /// + [Newtonsoft.Json.JsonProperty("task_id")] + [System.Text.Json.Serialization.JsonPropertyName("task_id")] + public int TaskId { get; set; } + } + } + + /// + /// 获取或设置返回数据。 + /// + [Newtonsoft.Json.JsonProperty("data")] + [System.Text.Json.Serialization.JsonPropertyName("data")] + public Types.Data Data { get; set; } = default!; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/AsyncTasks/AsyncTasksGetRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/AsyncTasks/AsyncTasksGetRequest.cs new file mode 100644 index 00000000..7b39605f --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/AsyncTasks/AsyncTasksGetRequest.cs @@ -0,0 +1,32 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.Ads.Models +{ + /// + /// 表示 [GET] /async_tasks/get 接口的请求。 + /// + public class AsyncTasksGetRequest : WechatAdsRequest + { + /// + /// 获取或设置过滤条件。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public IList? Filters { get; set; } + + /// + /// 获取或设置页大小。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public int? PageSize { get; set; } + + /// + /// 获取或设置页码。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public int? Page { get; set; } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/AsyncTasks/AsyncTasksGetResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/AsyncTasks/AsyncTasksGetResponse.cs new file mode 100644 index 00000000..8f34cbfd --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/AsyncTasks/AsyncTasksGetResponse.cs @@ -0,0 +1,146 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.Ads.Models +{ + /// + /// 表示 [GET] /async_tasks/get 接口的响应。 + /// + public class AsyncTasksGetResponse : WechatAdsResponse + { + public static class Types + { + public class Data + { + public static class Types + { + public class Task + { + public static class Types + { + public class Result + { + public static class Types + { + public class Data + { + public static class Types + { + public class File + { + /// + /// 获取或设置文件 ID。 + /// + [Newtonsoft.Json.JsonProperty("file_id")] + [System.Text.Json.Serialization.JsonPropertyName("file_id")] + public int FileId { get; set; } + + /// + /// 获取或设置文件 MD5 哈希值。 + /// + [Newtonsoft.Json.JsonProperty("md5")] + [System.Text.Json.Serialization.JsonPropertyName("md5")] + public string FileHash { get; set; } = default!; + } + } + + /// + /// 获取或设置文件列表。 + /// + [Newtonsoft.Json.JsonProperty("file_info_list")] + [System.Text.Json.Serialization.JsonPropertyName("file_info_list")] + public Types.File[] FileList { get; set; } = default!; + } + } + + /// + /// 获取或设置错误码。 + /// + [Newtonsoft.Json.JsonProperty("code")] + [System.Text.Json.Serialization.JsonPropertyName("code")] + public int ErrorCode { get; set; } + + /// + /// 获取或设置错误信息。 + /// + [Newtonsoft.Json.JsonProperty("message")] + [System.Text.Json.Serialization.JsonPropertyName("message")] + public string? ErrorMessage { get; set; } + + /// + /// 获取或设置结果数据。 + /// + [Newtonsoft.Json.JsonProperty("data")] + [System.Text.Json.Serialization.JsonPropertyName("data")] + public Types.Data? Data { get; set; } + } + } + + /// + /// 获取或设置任务 ID。 + /// + [Newtonsoft.Json.JsonProperty("task_id")] + [System.Text.Json.Serialization.JsonPropertyName("task_id")] + public int TaskId { get; set; } = default!; + + /// + /// 获取或设置任务名称。 + /// + [Newtonsoft.Json.JsonProperty("task_name")] + [System.Text.Json.Serialization.JsonPropertyName("task_name")] + public string TaskName { get; set; } = default!; + + /// + /// 获取或设置任务类型。 + /// + [Newtonsoft.Json.JsonProperty("task_type")] + [System.Text.Json.Serialization.JsonPropertyName("task_type")] + public string TaskType { get; set; } = default!; + + /// + /// 获取或设置任务状态。 + /// + [Newtonsoft.Json.JsonProperty("status")] + [System.Text.Json.Serialization.JsonPropertyName("status")] + public string Status { get; set; } = default!; + + /// + /// 获取或设置任务结果信息。 + /// + [Newtonsoft.Json.JsonProperty("result")] + [System.Text.Json.Serialization.JsonPropertyName("result")] + public Types.Result? Result { get; set; } + + /// + /// 获取或设置创建时间戳。 + /// + [Newtonsoft.Json.JsonProperty("created_time")] + [System.Text.Json.Serialization.JsonPropertyName("created_time")] + public long CreateTimestamp { get; set; } + } + } + + /// + /// 获取或设置任务列表。 + /// + [Newtonsoft.Json.JsonProperty("list")] + [System.Text.Json.Serialization.JsonPropertyName("list")] + public Types.Task[] TaskList { get; set; } = default!; + + /// + /// 获取或设置分页信息。 + /// + [Newtonsoft.Json.JsonProperty("page_info")] + [System.Text.Json.Serialization.JsonPropertyName("page_info")] + public Abstractions.CommonPagination Pagination { get; set; } = default!; + } + } + + /// + /// 获取或设置返回数据。 + /// + [Newtonsoft.Json.JsonProperty("data")] + [System.Text.Json.Serialization.JsonPropertyName("data")] + public Types.Data Data { get; set; } = default!; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/AsyncTasks/Files/AsyncTaskFilesGetRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/AsyncTasks/Files/AsyncTaskFilesGetRequest.cs new file mode 100644 index 00000000..7beae30e --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/AsyncTasks/Files/AsyncTaskFilesGetRequest.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.Ads.Models +{ + /// + /// 表示 [GET] /async_task_files/get 接口的请求。 + /// + public class AsyncTaskFilesGetRequest : WechatAdsRequest + { + /// + /// 获取或设置任务 ID。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public int TaskId { get; set; } + + /// + /// 获取或设置任务文件 ID。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public int FileId { get; set; } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/AsyncTasks/Files/AsyncTaskFilesGetResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/AsyncTasks/Files/AsyncTaskFilesGetResponse.cs new file mode 100644 index 00000000..25f584ad --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/AsyncTasks/Files/AsyncTaskFilesGetResponse.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.Ads.Models +{ + /// + /// 表示 [GET] /async_task_files/get 接口的响应。 + /// + public class AsyncTaskFilesGetResponse : WechatAdsResponse + { + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/Campaigns/CampaignsAddRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/Campaigns/CampaignsAddRequest.cs new file mode 100644 index 00000000..c5ead9e7 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/Campaigns/CampaignsAddRequest.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.Ads.Models +{ + /// + /// 表示 [POST] /campaigns/add 接口的请求。 + /// + public class CampaignsAddRequest : WechatAdsRequest + { + /// + /// 获取或设置推广计划名称。 + /// + [Newtonsoft.Json.JsonProperty("campaign_name")] + [System.Text.Json.Serialization.JsonPropertyName("campaign_name")] + public string CampaignName { get; set; } = string.Empty; + + /// + /// 获取或设置推广计划类型。 + /// + [Newtonsoft.Json.JsonProperty("campaign_type")] + [System.Text.Json.Serialization.JsonPropertyName("campaign_type")] + public string CampaignType { get; set; } = string.Empty; + + /// + /// 获取或设置推广标的物类型。 + /// + [Newtonsoft.Json.JsonProperty("product_type")] + [System.Text.Json.Serialization.JsonPropertyName("product_type")] + public string ProductType { get; set; } = string.Empty; + + /// + /// 获取或设置广告状态。 + /// + [Newtonsoft.Json.JsonProperty("configured_status")] + [System.Text.Json.Serialization.JsonPropertyName("configured_status")] + public string? ConfiguredStatus { get; set; } + + /// + /// 获取或设置日消耗限额(单位:分)。 + /// + [Newtonsoft.Json.JsonProperty("daily_budget")] + [System.Text.Json.Serialization.JsonPropertyName("daily_budget")] + public int? DailyBudget { get; set; } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/Campaigns/CampaignsAddResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/Campaigns/CampaignsAddResponse.cs new file mode 100644 index 00000000..883e6c2b --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/Campaigns/CampaignsAddResponse.cs @@ -0,0 +1,31 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.Ads.Models +{ + /// + /// 表示 [POST] /campaigns/add 接口的响应。 + /// + public class CampaignsAddResponse : WechatAdsResponse + { + public static class Types + { + public class Data + { + /// + /// 获取或设置推广计划 ID。 + /// + [Newtonsoft.Json.JsonProperty("campaign_id")] + [System.Text.Json.Serialization.JsonPropertyName("campaign_id")] + public long CampaignId { get; set; } + } + } + + /// + /// 获取或设置返回数据。 + /// + [Newtonsoft.Json.JsonProperty("data")] + [System.Text.Json.Serialization.JsonPropertyName("data")] + public Types.Data Data { get; set; } = default!; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/Campaigns/CampaignsGetRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/Campaigns/CampaignsGetRequest.cs new file mode 100644 index 00000000..ab4fc2f9 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/Campaigns/CampaignsGetRequest.cs @@ -0,0 +1,39 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.Ads.Models +{ + /// + /// 表示 [GET] /campaigns/get 接口的请求。 + /// + public class CampaignsGetRequest : WechatAdsRequest + { + /// + /// 获取或设置推广计划 ID。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public long? CampaignId { get; set; } + + /// + /// 获取或设置过滤条件。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public IList? Filters { get; set; } + + /// + /// 获取或设置页大小。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public int? PageSize { get; set; } + + /// + /// 获取或设置页码。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public int? Page { get; set; } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/Campaigns/CampaignsGetResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/Campaigns/CampaignsGetResponse.cs new file mode 100644 index 00000000..f5fe809a --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/Campaigns/CampaignsGetResponse.cs @@ -0,0 +1,108 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.Ads.Models +{ + /// + /// 表示 [GET] /campaigns/get 接口的响应。 + /// + public class CampaignsGetResponse : WechatAdsResponse + { + public static class Types + { + public class Data + { + public static class Types + { + public class Campaign + { + /// + /// 获取或设置推广计划 ID。 + /// + [Newtonsoft.Json.JsonProperty("campaign_id")] + [System.Text.Json.Serialization.JsonPropertyName("campaign_id")] + public long CampaignId { get; set; } + + /// + /// 获取或设置推广计划名称。 + /// + [Newtonsoft.Json.JsonProperty("campaign_name")] + [System.Text.Json.Serialization.JsonPropertyName("campaign_name")] + public string CampaignName { get; set; } = default!; + + /// + /// 获取或设置推广计划类型。 + /// + [Newtonsoft.Json.JsonProperty("campaign_type")] + [System.Text.Json.Serialization.JsonPropertyName("campaign_type")] + public string CampaignType { get; set; } = default!; + + /// + /// 获取或设置推广标的物类型。 + /// + [Newtonsoft.Json.JsonProperty("product_type")] + [System.Text.Json.Serialization.JsonPropertyName("product_type")] + public string ProductType { get; set; } = default!; + + /// + /// 获取或设置广告状态。 + /// + [Newtonsoft.Json.JsonProperty("configured_status")] + [System.Text.Json.Serialization.JsonPropertyName("configured_status")] + public string ConfiguredStatus { get; set; } = default!; + + /// + /// 获取或设置日消耗限额(单位:分)。 + /// + [Newtonsoft.Json.JsonProperty("daily_budget")] + [System.Text.Json.Serialization.JsonPropertyName("daily_budget")] + public int? DailyBudget { get; set; } + + /// + /// 获取或设置限额到达日期字符串(格式:yyyyMMdd)。 + /// + [Newtonsoft.Json.JsonProperty("budget_reach_date")] + [System.Text.Json.Serialization.JsonPropertyName("budget_reach_date")] + [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.NumberTypedStringConverter))] + public string? BudgetReachDateString { get; set; } + + /// + /// 获取或设置最近修改时间戳。 + /// + [Newtonsoft.Json.JsonProperty("last_modified_time")] + [System.Text.Json.Serialization.JsonPropertyName("last_modified_time")] + public long UpdateTimestamp { get; set; } + + /// + /// 获取或设置创建时间戳。 + /// + [Newtonsoft.Json.JsonProperty("created_time")] + [System.Text.Json.Serialization.JsonPropertyName("created_time")] + public long CreateTimestamp { get; set; } + } + } + + /// + /// 获取或设置推广计划列表。 + /// + [Newtonsoft.Json.JsonProperty("list")] + [System.Text.Json.Serialization.JsonPropertyName("list")] + public Types.Campaign[] CampaignList { get; set; } = default!; + + /// + /// 获取或设置分页信息。 + /// + [Newtonsoft.Json.JsonProperty("page_info")] + [System.Text.Json.Serialization.JsonPropertyName("page_info")] + public Abstractions.CommonPagination Pagination { get; set; } = default!; + } + } + + /// + /// 获取或设置返回数据。 + /// + [Newtonsoft.Json.JsonProperty("data")] + [System.Text.Json.Serialization.JsonPropertyName("data")] + public Types.Data Data { get; set; } = default!; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/Campaigns/CampaignsUpdateRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/Campaigns/CampaignsUpdateRequest.cs new file mode 100644 index 00000000..bce2f66f --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/Campaigns/CampaignsUpdateRequest.cs @@ -0,0 +1,39 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.Ads.Models +{ + /// + /// 表示 [POST] /campaigns/update 接口的请求。 + /// + public class CampaignsUpdateRequest : WechatAdsRequest + { + /// + /// 获取或设置推广计划 ID。 + /// + [Newtonsoft.Json.JsonProperty("campaign_id")] + [System.Text.Json.Serialization.JsonPropertyName("campaign_id")] + public long CampaignId { get; set; } + + /// + /// 获取或设置推广计划名称。 + /// + [Newtonsoft.Json.JsonProperty("campaign_name")] + [System.Text.Json.Serialization.JsonPropertyName("campaign_name")] + public string? CampaignName { get; set; } + + /// + /// 获取或设置广告状态。 + /// + [Newtonsoft.Json.JsonProperty("configured_status")] + [System.Text.Json.Serialization.JsonPropertyName("configured_status")] + public string? ConfiguredStatus { get; set; } + + /// + /// 获取或设置日消耗限额(单位:分)。 + /// + [Newtonsoft.Json.JsonProperty("daily_budget")] + [System.Text.Json.Serialization.JsonPropertyName("daily_budget")] + public int? DailyBudget { get; set; } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/Campaigns/CampaignsUpdateResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/Campaigns/CampaignsUpdateResponse.cs new file mode 100644 index 00000000..355e5fcc --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/Campaigns/CampaignsUpdateResponse.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.Ads.Models +{ + /// + /// 表示 [POST] /campaigns/update 接口的响应。 + /// + public class CampaignsUpdateResponse : WechatAdsResponse + { + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/CreditBills/CreditBillsGetRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/CreditBills/CreditBillsGetRequest.cs new file mode 100644 index 00000000..27f48678 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/CreditBills/CreditBillsGetRequest.cs @@ -0,0 +1,47 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.Ads.Models +{ + /// + /// 表示 [GET] /credit_bills/get 接口的请求。 + /// + public class CreditBillsGetRequest : WechatAdsRequest + { + /// + /// 获取或设置账单年份。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public int BillYear { get; set; } + + /// + /// 获取或设置账单月份。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public int BillMonth { get; set; } + + /// + /// 获取或设置页大小。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public int? PageSize { get; set; } + + /// + /// 获取或设置页码。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public int? Page { get; set; } + + /// + /// 获取或设置微信广告平台的版本号。 + /// 默认值:v1.1 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public override string? Version { get; set; } = "v1.1"; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/CreditBills/CreditBillsGetResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/CreditBills/CreditBillsGetResponse.cs new file mode 100644 index 00000000..3cb2ad06 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/CreditBills/CreditBillsGetResponse.cs @@ -0,0 +1,86 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.Ads.Models +{ + /// + /// 表示 [GET] /credit_bills/get 接口的响应。 + /// + public class CreditBillsGetResponse : WechatAdsResponse + { + public static class Types + { + public class Data + { + public static class Types + { + public class CreditBill + { + /// + /// 获取或设置出账单日期字符串(格式:yyyy-MM-dd)。 + /// + [Newtonsoft.Json.JsonProperty("bill_date")] + [System.Text.Json.Serialization.JsonPropertyName("bill_date")] + public string BillDateString { get; set; } = default!; + + /// + /// 获取或设置账单开始时间戳。 + /// + [Newtonsoft.Json.JsonProperty("start_time")] + [System.Text.Json.Serialization.JsonPropertyName("start_time")] + public long StartTimestamp { get; set; } + + /// + /// 获取或设置账单截止时间戳。 + /// + [Newtonsoft.Json.JsonProperty("end_time")] + [System.Text.Json.Serialization.JsonPropertyName("end_time")] + public long EndTimestamp { get; set; } + + /// + /// 获取或设置最后还款时间戳。 + /// + [Newtonsoft.Json.JsonProperty("due_time")] + [System.Text.Json.Serialization.JsonPropertyName("due_time")] + public long DueTimestamp { get; set; } + + /// + /// 获取或设置待还金额(单位:分)。 + /// + [Newtonsoft.Json.JsonProperty("need_repay_amount")] + [System.Text.Json.Serialization.JsonPropertyName("need_repay_amount")] + public int RepayingAmount { get; set; } + + /// + /// 获取或设置已还金额(单位:分)。 + /// + [Newtonsoft.Json.JsonProperty("repaid_amount")] + [System.Text.Json.Serialization.JsonPropertyName("repaid_amount")] + public int RepaidAmount { get; set; } + } + } + + /// + /// 获取或设置资金账户列表。 + /// + [Newtonsoft.Json.JsonProperty("list")] + [System.Text.Json.Serialization.JsonPropertyName("list")] + public Types.CreditBill[] CreditBillList { get; set; } = default!; + + /// + /// 获取或设置分页信息。 + /// + [Newtonsoft.Json.JsonProperty("page_info")] + [System.Text.Json.Serialization.JsonPropertyName("page_info")] + public Abstractions.CommonPagination Pagination { get; set; } = default!; + } + } + + /// + /// 获取或设置返回数据。 + /// + [Newtonsoft.Json.JsonProperty("data")] + [System.Text.Json.Serialization.JsonPropertyName("data")] + public Types.Data Data { get; set; } = default!; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/CustomAudiences/CustomAudiencesAddRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/CustomAudiences/CustomAudiencesAddRequest.cs new file mode 100644 index 00000000..8f0cd8ee --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/CustomAudiences/CustomAudiencesAddRequest.cs @@ -0,0 +1,32 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.Ads.Models +{ + /// + /// 表示 [POST] /custom_audiences/add 接口的请求。 + /// + public class CustomAudiencesAddRequest : WechatAdsRequest + { + /// + /// 获取或设置自定义人群名称。 + /// + [Newtonsoft.Json.JsonProperty("name")] + [System.Text.Json.Serialization.JsonPropertyName("name")] + public string CustomAudienceName { get; set; } = string.Empty; + + /// + /// 获取或设置自定义人群类型。 + /// + [Newtonsoft.Json.JsonProperty("type")] + [System.Text.Json.Serialization.JsonPropertyName("type")] + public string CustomAudienceType { get; set; } = string.Empty; + + /// + /// 获取或设置自定义人群描述。 + /// + [Newtonsoft.Json.JsonProperty("description")] + [System.Text.Json.Serialization.JsonPropertyName("description")] + public string CustomAudienceDescription { get; set; } = string.Empty; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/CustomAudiences/CustomAudiencesAddResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/CustomAudiences/CustomAudiencesAddResponse.cs new file mode 100644 index 00000000..7d5e889e --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/CustomAudiences/CustomAudiencesAddResponse.cs @@ -0,0 +1,31 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.Ads.Models +{ + /// + /// 表示 [POST] /custom_audiences/add 接口的响应。 + /// + public class CustomAudiencesAddResponse : WechatAdsResponse + { + public static class Types + { + public class Data + { + /// + /// 获取或设置自定义人群 ID。 + /// + [Newtonsoft.Json.JsonProperty("audience_id")] + [System.Text.Json.Serialization.JsonPropertyName("audience_id")] + public int CustomAudienceId { get; set; } + } + } + + /// + /// 获取或设置返回数据。 + /// + [Newtonsoft.Json.JsonProperty("data")] + [System.Text.Json.Serialization.JsonPropertyName("data")] + public Types.Data Data { get; set; } = default!; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/CustomAudiences/CustomAudiencesGetRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/CustomAudiences/CustomAudiencesGetRequest.cs new file mode 100644 index 00000000..4b40cb95 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/CustomAudiences/CustomAudiencesGetRequest.cs @@ -0,0 +1,32 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.Ads.Models +{ + /// + /// 表示 [GET] /custom_audiences/get 接口的请求。 + /// + public class CustomAudiencesGetRequest : WechatAdsRequest + { + /// + /// 获取或设置自定义人群 ID。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public int? CustomAudienceId { get; set; } + + /// + /// 获取或设置页大小。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public int? PageSize { get; set; } + + /// + /// 获取或设置页码。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public int? Page { get; set; } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/CustomAudiences/CustomAudiencesGetResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/CustomAudiences/CustomAudiencesGetResponse.cs new file mode 100644 index 00000000..22d37c49 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/CustomAudiences/CustomAudiencesGetResponse.cs @@ -0,0 +1,111 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.Ads.Models +{ + /// + /// 表示 [GET] /custom_audiences/get 接口的响应。 + /// + public class CustomAudiencesGetResponse : WechatAdsResponse + { + public static class Types + { + public class Data + { + public static class Types + { + public class CustomAudience + { + /// + /// 获取或设置自定义人群 ID。 + /// + [Newtonsoft.Json.JsonProperty("audience_id")] + [System.Text.Json.Serialization.JsonPropertyName("audience_id")] + public int CustomAudienceId { get; set; } + + /// + /// 获取或设置自定义人群名称。 + /// + [Newtonsoft.Json.JsonProperty("name")] + [System.Text.Json.Serialization.JsonPropertyName("name")] + public string CustomAudienceName { get; set; } = default!; + + /// + /// 获取或设置自定义人群类型。 + /// + [Newtonsoft.Json.JsonProperty("type")] + [System.Text.Json.Serialization.JsonPropertyName("type")] + public string CustomAudienceType { get; set; } = default!; + + /// + /// 获取或设置自定义人群描述。 + /// + [Newtonsoft.Json.JsonProperty("description")] + [System.Text.Json.Serialization.JsonPropertyName("description")] + public string CustomAudienceDescription { get; set; } = default!; + + /// + /// 获取或设置处理状态。 + /// + [Newtonsoft.Json.JsonProperty("status")] + [System.Text.Json.Serialization.JsonPropertyName("status")] + public string Status { get; set; } = default!; + + /// + /// 获取或设置错误码。 + /// + [Newtonsoft.Json.JsonProperty("error_code")] + [System.Text.Json.Serialization.JsonPropertyName("error_code")] + public int ErrorCode { get; set; } + + /// + /// 获取或设置用户覆盖数。 + /// + [Newtonsoft.Json.JsonProperty("user_count")] + [System.Text.Json.Serialization.JsonPropertyName("user_count")] + public int UserCount { get; set; } + + /// + /// 获取或设置最近修改时间戳。 + /// + [Newtonsoft.Json.JsonProperty("last_modified_time")] + [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.CommonDateTimeOffsetConverter))] + [System.Text.Json.Serialization.JsonPropertyName("last_modified_time")] + [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.CommonDateTimeOffsetConverter))] + public DateTimeOffset UpdateTime { get; set; } + + /// + /// 获取或设置创建时间戳。 + /// + [Newtonsoft.Json.JsonProperty("created_time")] + [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.CommonDateTimeOffsetConverter))] + [System.Text.Json.Serialization.JsonPropertyName("created_time")] + [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.CommonDateTimeOffsetConverter))] + public DateTimeOffset CreateTime { get; set; } + } + } + + /// + /// 获取或设置自定义人群列表。 + /// + [Newtonsoft.Json.JsonProperty("list")] + [System.Text.Json.Serialization.JsonPropertyName("list")] + public Types.CustomAudience[] CustomAudienceList { get; set; } = default!; + + /// + /// 获取或设置分页信息。 + /// + [Newtonsoft.Json.JsonProperty("page_info")] + [System.Text.Json.Serialization.JsonPropertyName("page_info")] + public Abstractions.CommonPagination Pagination { get; set; } = default!; + } + } + + /// + /// 获取或设置返回数据。 + /// + [Newtonsoft.Json.JsonProperty("data")] + [System.Text.Json.Serialization.JsonPropertyName("data")] + public Types.Data Data { get; set; } = default!; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/CustomAudiences/CustomAudiencesUpdateRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/CustomAudiences/CustomAudiencesUpdateRequest.cs new file mode 100644 index 00000000..b76e0e61 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/CustomAudiences/CustomAudiencesUpdateRequest.cs @@ -0,0 +1,32 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.Ads.Models +{ + /// + /// 表示 [POST] /custom_audiences/update 接口的请求。 + /// + public class CustomAudiencesUpdateRequest : WechatAdsRequest + { + /// + /// 获取或设置自定义人群 ID。 + /// + [Newtonsoft.Json.JsonProperty("audience_id")] + [System.Text.Json.Serialization.JsonPropertyName("audience_id")] + public int CustomAudienceId { get; set; } + + /// + /// 获取或设置自定义人群名称。 + /// + [Newtonsoft.Json.JsonProperty("name")] + [System.Text.Json.Serialization.JsonPropertyName("name")] + public string? CustomAudienceName { get; set; } + + /// + /// 获取或设置自定义人群描述。 + /// + [Newtonsoft.Json.JsonProperty("description")] + [System.Text.Json.Serialization.JsonPropertyName("description")] + public string? CustomAudienceDescription { get; set; } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/CustomAudiences/CustomAudiencesUpdateResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/CustomAudiences/CustomAudiencesUpdateResponse.cs new file mode 100644 index 00000000..34f69a67 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/CustomAudiences/CustomAudiencesUpdateResponse.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.Ads.Models +{ + /// + /// 表示 [POST] /custom_audiences/update 接口的响应。 + /// + public class CustomAudiencesUpdateResponse : WechatAdsResponse + { + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/CustomAudiences/Files/CustomAudienceFilesAddRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/CustomAudiences/Files/CustomAudienceFilesAddRequest.cs new file mode 100644 index 00000000..bcee189c --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/CustomAudiences/Files/CustomAudienceFilesAddRequest.cs @@ -0,0 +1,39 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.Ads.Models +{ + /// + /// 表示 [POST] /custom_audience_files/add 接口的请求。 + /// + public class CustomAudienceFilesAddRequest : WechatAdsRequest + { + /// + /// 获取或设置自定义人群 ID。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public int CustomAudienceId { get; set; } + + /// + /// 获取或设置用户 ID 类型。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public string UserIdType { get; set; } = string.Empty; + + /// + /// 获取或设置文件操作类型。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public string OperationType { get; set; } = string.Empty; + + /// + /// 获取或设置压缩文件字节数组。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public byte[] FileBytes { get; set; } = new byte[0]; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/CustomAudiences/Files/CustomAudienceFilesAddResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/CustomAudiences/Files/CustomAudienceFilesAddResponse.cs new file mode 100644 index 00000000..47fee94c --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/CustomAudiences/Files/CustomAudienceFilesAddResponse.cs @@ -0,0 +1,31 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.Ads.Models +{ + /// + /// 表示 [POST] /custom_audience_files/add 接口的响应。 + /// + public class CustomAudienceFilesAddResponse : WechatAdsResponse + { + public static class Types + { + public class Data + { + /// + /// 获取或设置自定义人群数据文件 ID。 + /// + [Newtonsoft.Json.JsonProperty("custom_audience_file_id")] + [System.Text.Json.Serialization.JsonPropertyName("custom_audience_file_id")] + public int CustomAudienceFileId { get; set; } + } + } + + /// + /// 获取或设置返回数据。 + /// + [Newtonsoft.Json.JsonProperty("data")] + [System.Text.Json.Serialization.JsonPropertyName("data")] + public Types.Data Data { get; set; } = default!; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/CustomAudiences/Files/CustomAudienceFilesGetRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/CustomAudiences/Files/CustomAudienceFilesGetRequest.cs new file mode 100644 index 00000000..04d6eae9 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/CustomAudiences/Files/CustomAudienceFilesGetRequest.cs @@ -0,0 +1,39 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.Ads.Models +{ + /// + /// 表示 [GET] /custom_audience_files/get 接口的请求。 + /// + public class CustomAudienceFilesGetRequest : WechatAdsRequest + { + /// + /// 获取或设置自定义人群 ID。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public int? CustomAudienceId { get; set; } + + /// + /// 获取或设置自定义人群数据文件 ID。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public int? CustomAudienceFileId { get; set; } + + /// + /// 获取或设置页大小。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public int? PageSize { get; set; } + + /// + /// 获取或设置页码。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public int? Page { get; set; } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/CustomAudiences/Files/CustomAudienceFilesGetResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/CustomAudiences/Files/CustomAudienceFilesGetResponse.cs new file mode 100644 index 00000000..06ca4f8a --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/CustomAudiences/Files/CustomAudienceFilesGetResponse.cs @@ -0,0 +1,130 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.Ads.Models +{ + /// + /// 表示 [GET] /custom_audience_files/get 接口的响应。 + /// + public class CustomAudienceFilesGetResponse : WechatAdsResponse + { + public static class Types + { + public class Data + { + public static class Types + { + public class CustomAudienceFile + { + /// + /// 获取或设置自定义人群 ID。 + /// + [Newtonsoft.Json.JsonProperty("audience_id")] + [System.Text.Json.Serialization.JsonPropertyName("audience_id")] + public int CustomAudienceId { get; set; } + + /// + /// 获取或设置自定义人群数据文件 ID。 + /// + [Newtonsoft.Json.JsonProperty("custom_audience_file_id")] + [System.Text.Json.Serialization.JsonPropertyName("custom_audience_file_id")] + public int CustomAudienceFileId { get; set; } + + /// + /// 获取或设置自定义人群数据文件名称。 + /// + [Newtonsoft.Json.JsonProperty("name")] + [System.Text.Json.Serialization.JsonPropertyName("name")] + public string CustomAudienceFileName { get; set; } = default!; + + /// + /// 获取或设置用户 ID 类型。 + /// + [Newtonsoft.Json.JsonProperty("user_id_type")] + [System.Text.Json.Serialization.JsonPropertyName("user_id_type")] + public string UserIdType { get; set; } = default!; + + /// + /// 获取或设置文件操作类型。 + /// + [Newtonsoft.Json.JsonProperty("operation_type")] + [System.Text.Json.Serialization.JsonPropertyName("operation_type")] + public string OperationType { get; set; } = default!; + + /// + /// 获取或设置处理状态。 + /// + [Newtonsoft.Json.JsonProperty("process_status")] + [System.Text.Json.Serialization.JsonPropertyName("process_status")] + public string ProcessStatus { get; set; } = default!; + + /// + /// 获取或设置错误码。 + /// + [Newtonsoft.Json.JsonProperty("process_code")] + [System.Text.Json.Serialization.JsonPropertyName("process_code")] + public int ErrorCode { get; set; } + + /// + /// 获取或设置错误信息。 + /// + [Newtonsoft.Json.JsonProperty("error_message")] + [System.Text.Json.Serialization.JsonPropertyName("error_message")] + public string? ErrorMessage { get; set; } + + /// + /// 获取或设置文件总行数。 + /// + [Newtonsoft.Json.JsonProperty("line_count")] + [System.Text.Json.Serialization.JsonPropertyName("line_count")] + public int LineCount { get; set; } + + /// + /// 获取或设置文件包含的有效行数。 + /// + [Newtonsoft.Json.JsonProperty("valid_line_count")] + [System.Text.Json.Serialization.JsonPropertyName("valid_line_count")] + public int ValidLineCount { get; set; } + + /// + /// 获取或设置文件包含的用户数。 + /// + [Newtonsoft.Json.JsonProperty("user_count")] + [System.Text.Json.Serialization.JsonPropertyName("user_count")] + public int UserCount { get; set; } + + /// + /// 获取或设置创建时间戳。 + /// + [Newtonsoft.Json.JsonProperty("created_time")] + [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.CommonDateTimeOffsetConverter))] + [System.Text.Json.Serialization.JsonPropertyName("created_time")] + [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.CommonDateTimeOffsetConverter))] + public DateTimeOffset CreateTime { get; set; } + } + } + + /// + /// 获取或设置自定义人群数据文件列表。 + /// + [Newtonsoft.Json.JsonProperty("list")] + [System.Text.Json.Serialization.JsonPropertyName("list")] + public Types.CustomAudienceFile[] CustomAudienceFileList { get; set; } = default!; + + /// + /// 获取或设置分页信息。 + /// + [Newtonsoft.Json.JsonProperty("page_info")] + [System.Text.Json.Serialization.JsonPropertyName("page_info")] + public Abstractions.CommonPagination Pagination { get; set; } = default!; + } + } + + /// + /// 获取或设置返回数据。 + /// + [Newtonsoft.Json.JsonProperty("data")] + [System.Text.Json.Serialization.JsonPropertyName("data")] + public Types.Data Data { get; set; } = default!; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/Estimation/EstimationGetRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/Estimation/EstimationGetRequest.cs new file mode 100644 index 00000000..a14b2901 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/Estimation/EstimationGetRequest.cs @@ -0,0 +1,32 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.Ads.Models +{ + /// + /// 表示 [POST] /estimation/get 接口的请求。 + /// + public class EstimationGetRequest : WechatAdsRequest + { + public static class Types + { + public class Target : AdGroupsAddRequest.Types.Target + { + } + } + + /// + /// 获取或设置推广计划类型。 + /// + [Newtonsoft.Json.JsonProperty("campaign_type")] + [System.Text.Json.Serialization.JsonPropertyName("campaign_type")] + public string CampaignType { get; set; } = string.Empty; + + /// + /// 获取或设置定向条件。 + /// + [Newtonsoft.Json.JsonProperty("targeting")] + [System.Text.Json.Serialization.JsonPropertyName("targeting")] + public Types.Target Target { get; set; } = new Types.Target(); + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/Estimation/EstimationGetResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/Estimation/EstimationGetResponse.cs new file mode 100644 index 00000000..5c151e11 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/Estimation/EstimationGetResponse.cs @@ -0,0 +1,38 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.Ads.Models +{ + /// + /// 表示 [POST] /estimation/get 接口的响应。 + /// + public class EstimationGetResponse : WechatAdsResponse + { + public static class Types + { + public class Data + { + /// + /// 获取或设置预估覆盖人数。 + /// + [Newtonsoft.Json.JsonProperty("approximate_count")] + [System.Text.Json.Serialization.JsonPropertyName("approximate_count")] + public int ApproximateCount { get; set; } + + /// + /// 获取或设置预估曝光量。 + /// + [Newtonsoft.Json.JsonProperty("impression")] + [System.Text.Json.Serialization.JsonPropertyName("impression")] + public int ImpressCount { get; set; } + } + } + + /// + /// 获取或设置返回数据。 + /// + [Newtonsoft.Json.JsonProperty("data")] + [System.Text.Json.Serialization.JsonPropertyName("data")] + public Types.Data Data { get; set; } = default!; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/Funds/FundStatementsDetailedGetRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/Funds/FundStatementsDetailedGetRequest.cs new file mode 100644 index 00000000..d96dbf61 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/Funds/FundStatementsDetailedGetRequest.cs @@ -0,0 +1,47 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.Ads.Models +{ + /// + /// 表示 [GET] /fund_statements_detailed/get 接口的请求。 + /// + public class FundStatementsDetailedGetRequest : WechatAdsRequest + { + /// + /// 获取或设置时间范围。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public Abstractions.CommonDateRange DateRange { get; set; } = new Abstractions.CommonDateRange(); + + /// + /// 获取或设置交易类型。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public string? TradeType { get; set; } + + /// + /// 获取或设置页大小。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public int? PageSize { get; set; } + + /// + /// 获取或设置页码。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public int? Page { get; set; } + + /// + /// 获取或设置微信广告平台的版本号。 + /// 默认值:v1.1 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public override string? Version { get; set; } = "v1.1"; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/Funds/FundStatementsDetailedGetResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/Funds/FundStatementsDetailedGetResponse.cs new file mode 100644 index 00000000..39472365 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/Funds/FundStatementsDetailedGetResponse.cs @@ -0,0 +1,79 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.Ads.Models +{ + /// + /// 表示 [GET] /fund_statements_detailed/get 接口的响应。 + /// + public class FundStatementsDetailedGetResponse : WechatAdsResponse + { + public static class Types + { + public class Data + { + public static class Types + { + public class FundStatement + { + /// + /// 获取或设置资金账户类型。 + /// + [Newtonsoft.Json.JsonProperty("fund_type")] + [System.Text.Json.Serialization.JsonPropertyName("fund_type")] + public string FundType { get; set; } = default!; + + /// + /// 获取或设置余额(单位:分)。 + /// + [Newtonsoft.Json.JsonProperty("amount")] + [System.Text.Json.Serialization.JsonPropertyName("amount")] + public int Amount { get; set; } + + /// + /// 获取或设置交易单号。 + /// + [Newtonsoft.Json.JsonProperty("bill_number")] + [System.Text.Json.Serialization.JsonPropertyName("bill_number")] + public string BillNumber { get; set; } = default!; + + /// + /// 获取或设置交易描述。 + /// + [Newtonsoft.Json.JsonProperty("description")] + [System.Text.Json.Serialization.JsonPropertyName("description")] + public string Description { get; set; } = default!; + + /// + /// 获取或设置交易发生时间戳。 + /// + [Newtonsoft.Json.JsonProperty("time")] + [System.Text.Json.Serialization.JsonPropertyName("time")] + public long CreateTimestamp { get; set; } + } + } + + /// + /// 获取或设置资金账户列表。 + /// + [Newtonsoft.Json.JsonProperty("list")] + [System.Text.Json.Serialization.JsonPropertyName("list")] + public Types.FundStatement[] FundStatementList { get; set; } = default!; + + /// + /// 获取或设置分页信息。 + /// + [Newtonsoft.Json.JsonProperty("page_info")] + [System.Text.Json.Serialization.JsonPropertyName("page_info")] + public Abstractions.CommonPagination Pagination { get; set; } = default!; + } + } + + /// + /// 获取或设置返回数据。 + /// + [Newtonsoft.Json.JsonProperty("data")] + [System.Text.Json.Serialization.JsonPropertyName("data")] + public Types.Data Data { get; set; } = default!; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/Funds/FundTransferAddRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/Funds/FundTransferAddRequest.cs new file mode 100644 index 00000000..434ee28d --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/Funds/FundTransferAddRequest.cs @@ -0,0 +1,39 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.Ads.Models +{ + /// + /// 表示 [POST] /fund_transfer/add 接口的请求。 + /// + public class FundTransferAddRequest : WechatAdsRequest + { + /// + /// 获取或设置资金账户类型。 + /// + [Newtonsoft.Json.JsonProperty("fund_type")] + [System.Text.Json.Serialization.JsonPropertyName("fund_type")] + public string FundType { get; set; } = string.Empty; + + /// + /// 获取或设置金额(单位:分)。 + /// + [Newtonsoft.Json.JsonProperty("amount")] + [System.Text.Json.Serialization.JsonPropertyName("amount")] + public int Amount { get; set; } + + /// + /// 获取或设置调用方订单号。 + /// + [Newtonsoft.Json.JsonProperty("external_bill_no")] + [System.Text.Json.Serialization.JsonPropertyName("external_bill_no")] + public string? ExternalBillNumber { get; set; } + + /// + /// 获取或设置备注信息。 + /// + [Newtonsoft.Json.JsonProperty("memo")] + [System.Text.Json.Serialization.JsonPropertyName("memo")] + public string? Memo { get; set; } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/Funds/FundTransferAddResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/Funds/FundTransferAddResponse.cs new file mode 100644 index 00000000..8d96f69e --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/Funds/FundTransferAddResponse.cs @@ -0,0 +1,59 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.Ads.Models +{ + /// + /// 表示 [POST] /fund_transfer/add 接口的响应。 + /// + public class FundTransferAddResponse : WechatAdsResponse + { + public static class Types + { + public class Data + { + /// + /// 获取或设置资金账户类型。 + /// + [Newtonsoft.Json.JsonProperty("fund_type")] + [System.Text.Json.Serialization.JsonPropertyName("fund_type")] + public string FundType { get; set; } = default!; + + /// + /// 获取或设置金额(单位:分)。 + /// + [Newtonsoft.Json.JsonProperty("amount")] + [System.Text.Json.Serialization.JsonPropertyName("amount")] + public int Amount { get; set; } + + /// + /// 获取或设置调用方订单号。 + /// + [Newtonsoft.Json.JsonProperty("external_bill_no")] + [System.Text.Json.Serialization.JsonPropertyName("external_bill_no")] + public string? ExternalBillNumber { get; set; } + + /// + /// 获取或设置是否重复转账。 + /// + [Newtonsoft.Json.JsonProperty("is_repeated")] + [System.Text.Json.Serialization.JsonPropertyName("is_repeated")] + public bool IsRepeated { get; set; } + + /// + /// 获取或设置交易时间戳。 + /// + [Newtonsoft.Json.JsonProperty("time")] + [System.Text.Json.Serialization.JsonPropertyName("time")] + public long CreateTimestamp { get; set; } + } + } + + /// + /// 获取或设置返回数据。 + /// + [Newtonsoft.Json.JsonProperty("data")] + [System.Text.Json.Serialization.JsonPropertyName("data")] + public Types.Data Data { get; set; } = default!; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/Funds/FundsGetRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/Funds/FundsGetRequest.cs new file mode 100644 index 00000000..3c4ba86d --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/Funds/FundsGetRequest.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.Ads.Models +{ + /// + /// 表示 [GET] /funds/get 接口的请求。 + /// + public class FundsGetRequest : WechatAdsRequest + { + /// + /// 获取或设置微信广告平台的版本号。 + /// 默认值:v1.1 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public override string? Version { get; set; } = "v1.1"; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/Funds/FundsGetResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/Funds/FundsGetResponse.cs new file mode 100644 index 00000000..553b3710 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/Funds/FundsGetResponse.cs @@ -0,0 +1,85 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.Ads.Models +{ + /// + /// 表示 [GET] /funds/get 接口的响应。 + /// + public class FundsGetResponse : WechatAdsResponse + { + public static class Types + { + public class Data + { + public static class Types + { + public class Fund + { + public static class Types + { + public class Credit + { + /// + /// 获取或设置额度(单位:分)。 + /// + [Newtonsoft.Json.JsonProperty("limit_amount")] + [System.Text.Json.Serialization.JsonPropertyName("limit_amount")] + public int LimitAmount { get; set; } + + /// + /// 获取或设置可分配金额(单位:分)。 + /// + [Newtonsoft.Json.JsonProperty("usable_amount")] + [System.Text.Json.Serialization.JsonPropertyName("usable_amount")] + public int UsableAmount { get; set; } + + /// + /// 获取或设置已用金额(单位:分)。 + /// + [Newtonsoft.Json.JsonProperty("used_amount")] + [System.Text.Json.Serialization.JsonPropertyName("used_amount")] + public int UsedAmount { get; set; } + } + } + + /// + /// 获取或设置资金账户类型。 + /// + [Newtonsoft.Json.JsonProperty("fund_type")] + [System.Text.Json.Serialization.JsonPropertyName("fund_type")] + public string FundType { get; set; } = default!; + + /// + /// 获取或设置资金余额(单位:分)。 + /// + [Newtonsoft.Json.JsonProperty("balance")] + [System.Text.Json.Serialization.JsonPropertyName("balance")] + public int Balance { get; set; } + + /// + /// 获取或设置固定信用金信息。 + /// + [Newtonsoft.Json.JsonProperty("credit_roll_spec")] + [System.Text.Json.Serialization.JsonPropertyName("credit_roll_spec")] + public Types.Credit? Credit { get; set; } + } + } + + /// + /// 获取或设置资金账户列表。 + /// + [Newtonsoft.Json.JsonProperty("list")] + [System.Text.Json.Serialization.JsonPropertyName("list")] + public Types.Fund[] FundList { get; set; } = default!; + } + } + + /// + /// 获取或设置返回数据。 + /// + [Newtonsoft.Json.JsonProperty("data")] + [System.Text.Json.Serialization.JsonPropertyName("data")] + public Types.Data Data { get; set; } = default!; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/Images/ImagesAddRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/Images/ImagesAddRequest.cs index f69ee2f5..1a0e417a 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/Images/ImagesAddRequest.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/Images/ImagesAddRequest.cs @@ -30,7 +30,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Ads.Models public string? FileContentType { get; set; } /// - /// 获取或设置图片文件的哈希值。如果不指定将由系统自动生成。 + /// 获取或设置图片文件的 MD5 哈希值。如果不指定将由系统自动生成。 /// [Newtonsoft.Json.JsonIgnore] [System.Text.Json.Serialization.JsonIgnore] diff --git a/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/Images/ImagesGetRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/Images/ImagesGetRequest.cs index 1924a3a8..d8767343 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/Images/ImagesGetRequest.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/Images/ImagesGetRequest.cs @@ -13,7 +13,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Ads.Models /// [Newtonsoft.Json.JsonIgnore] [System.Text.Json.Serialization.JsonIgnore] - public string ImageId { get; set; } = string.Empty; + public string? ImageId { get; set; } /// /// 获取或设置过滤条件。 diff --git a/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/Images/ImagesGetResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/Images/ImagesGetResponse.cs index b27fcb52..0ec0881d 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/Images/ImagesGetResponse.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/Images/ImagesGetResponse.cs @@ -52,7 +52,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Ads.Models public int FileSize { get; set; } /// - /// 获取或设置图片文件的哈希值。 + /// 获取或设置图片文件的 MD5 哈希值。 /// [Newtonsoft.Json.JsonProperty("signature")] [System.Text.Json.Serialization.JsonPropertyName("signature")] diff --git a/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/Qualifications/QualificationsAddRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/Qualifications/QualificationsAddRequest.cs new file mode 100644 index 00000000..8fa90732 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/Qualifications/QualificationsAddRequest.cs @@ -0,0 +1,32 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.Ads.Models +{ + /// + /// 表示 [POST] /qualifications/add 接口的请求。 + /// + public class QualificationsAddRequest : WechatAdsRequest + { + /// + /// 获取或设置资质类型。 + /// + [Newtonsoft.Json.JsonProperty("qualification_type")] + [System.Text.Json.Serialization.JsonPropertyName("qualification_type")] + public string QualificationType { get; set; } = string.Empty; + + /// + /// 获取或设置资质名称。 + /// + [Newtonsoft.Json.JsonProperty("qualification_name")] + [System.Text.Json.Serialization.JsonPropertyName("qualification_name")] + public string QualificationName { get; set; } = string.Empty; + + /// + /// 获取或设置资质证明文件图片 ID。 + /// + [Newtonsoft.Json.JsonProperty("qualification_image_id")] + [System.Text.Json.Serialization.JsonPropertyName("qualification_image_id")] + public string QualificationImageId { get; set; } = string.Empty; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/Qualifications/QualificationsAddResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/Qualifications/QualificationsAddResponse.cs new file mode 100644 index 00000000..3f8da661 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/Qualifications/QualificationsAddResponse.cs @@ -0,0 +1,31 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.Ads.Models +{ + /// + /// 表示 [POST] /qualifications/add 接口的响应。 + /// + public class QualificationsAddResponse : WechatAdsResponse + { + public static class Types + { + public class Data + { + /// + /// 获取或设置资质 ID。 + /// + [Newtonsoft.Json.JsonProperty("qualification_id")] + [System.Text.Json.Serialization.JsonPropertyName("qualification_id")] + public int QualificationId { get; set; } + } + } + + /// + /// 获取或设置返回数据。 + /// + [Newtonsoft.Json.JsonProperty("data")] + [System.Text.Json.Serialization.JsonPropertyName("data")] + public Types.Data Data { get; set; } = default!; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/Qualifications/QualificationsDeleteRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/Qualifications/QualificationsDeleteRequest.cs new file mode 100644 index 00000000..1abc4850 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/Qualifications/QualificationsDeleteRequest.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.Ads.Models +{ + /// + /// 表示 [POST] /qualifications/delete 接口的请求。 + /// + public class QualificationsDeleteRequest : WechatAdsRequest + { + /// + /// 获取或设置资质 ID。 + /// + [Newtonsoft.Json.JsonProperty("qualification_id")] + [System.Text.Json.Serialization.JsonPropertyName("qualification_id")] + public long QualificationId { get; set; } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/Qualifications/QualificationsDeleteResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/Qualifications/QualificationsDeleteResponse.cs new file mode 100644 index 00000000..bc578cc5 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/Qualifications/QualificationsDeleteResponse.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.Ads.Models +{ + /// + /// 表示 [POST] /qualifications/delete 接口的响应。 + /// + public class QualificationsDeleteResponse : WechatAdsResponse + { + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/Qualifications/QualificationsGetRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/Qualifications/QualificationsGetRequest.cs new file mode 100644 index 00000000..eb443c90 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/Qualifications/QualificationsGetRequest.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.Ads.Models +{ + /// + /// 表示 [GET] /qualifications/get 接口的请求。 + /// + public class QualificationsGetRequest : WechatAdsRequest + { + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/Qualifications/QualificationsGetResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/Qualifications/QualificationsGetResponse.cs new file mode 100644 index 00000000..7a51ecf2 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/Qualifications/QualificationsGetResponse.cs @@ -0,0 +1,93 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.Ads.Models +{ + /// + /// 表示 [GET] /qualifications/get 接口的响应。 + /// + public class QualificationsGetResponse : WechatAdsResponse + { + public static class Types + { + public class Data + { + public static class Types + { + public class Qualification + { + /// + /// 获取或设置资质 ID。 + /// + [Newtonsoft.Json.JsonProperty("qualification_id")] + [System.Text.Json.Serialization.JsonPropertyName("qualification_id")] + public long QualificationId { get; set; } + + /// + /// 获取或设置资质类型。 + /// + [Newtonsoft.Json.JsonProperty("qualification_type")] + [System.Text.Json.Serialization.JsonPropertyName("qualification_type")] + public string QualificationType { get; set; } = default!; + + /// + /// 获取或设置资质名称。 + /// + [Newtonsoft.Json.JsonProperty("qualification_name")] + [System.Text.Json.Serialization.JsonPropertyName("qualification_name")] + public string QualificationName { get; set; } = default!; + + /// + /// 获取或设置资质证明文件图片 URL。 + /// + [Newtonsoft.Json.JsonProperty("qualification_url")] + [System.Text.Json.Serialization.JsonPropertyName("qualification_url")] + public string QualificationImageUrl { get; set; } = default!; + + /// + /// 获取或设置资质状态。 + /// + [Newtonsoft.Json.JsonProperty("qualification_status")] + [System.Text.Json.Serialization.JsonPropertyName("qualification_status")] + public string QualificationStatus { get; set; } = default!; + + /// + /// 获取或设置资质有效日期(格式:yyyy-MM-dd)。 + /// + [Newtonsoft.Json.JsonProperty("valid_date")] + [System.Text.Json.Serialization.JsonPropertyName("valid_date")] + public string? ValidDateString { get; set; } + + /// + /// 获取或设置审核拒绝原因。 + /// + [Newtonsoft.Json.JsonProperty("reject_message")] + [System.Text.Json.Serialization.JsonPropertyName("reject_message")] + public string? RejectReason { get; set; } + } + } + + /// + /// 获取或设置资质列表。 + /// + [Newtonsoft.Json.JsonProperty("list")] + [System.Text.Json.Serialization.JsonPropertyName("list")] + public Types.Qualification[] QualificationList { get; set; } = default!; + + /// + /// 获取或设置分页信息。 + /// + [Newtonsoft.Json.JsonProperty("page_info")] + [System.Text.Json.Serialization.JsonPropertyName("page_info")] + public Abstractions.CommonPagination Pagination { get; set; } = default!; + } + } + + /// + /// 获取或设置返回数据。 + /// + [Newtonsoft.Json.JsonProperty("data")] + [System.Text.Json.Serialization.JsonPropertyName("data")] + public Types.Data Data { get; set; } = default!; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/Reports/DailyReportsGetRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/Reports/DailyReportsGetRequest.cs new file mode 100644 index 00000000..b4ca7568 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/Reports/DailyReportsGetRequest.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.Ads.Models +{ + /// + /// 表示 [GET] /daily_reports/get 接口的请求。 + /// + public class DailyReportsGetRequest : WechatAdsRequest + { + /// + /// 获取或设置时间范围。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public Abstractions.CommonDateRange DateRange { get; set; } = new Abstractions.CommonDateRange(); + + /// + /// 获取或设置报表类型。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public string? ReportType { get; set; } + + /// + /// 获取或设置报表层级。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public string? ReportLevel { get; set; } + + /// + /// 获取或设置页大小。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public int? PageSize { get; set; } + + /// + /// 获取或设置页码。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public int? Page { get; set; } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/Reports/DailyReportsGetResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/Reports/DailyReportsGetResponse.cs new file mode 100644 index 00000000..b6a58785 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/Reports/DailyReportsGetResponse.cs @@ -0,0 +1,142 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.Ads.Models +{ + /// + /// 表示 [GET] /daily_reports/get 接口的响应。 + /// + public class DailyReportsGetResponse : WechatAdsResponse + { + public static class Types + { + public class Data + { + public static class Types + { + public class DailyReport + { + /// + /// 获取或设置查询日期字符串(格式:yyyy-MM-dd)。 + /// + [Newtonsoft.Json.JsonProperty("date")] + [System.Text.Json.Serialization.JsonPropertyName("date")] + public string DateString { get; set; } = default!; + + /// + /// 获取或设置推广计划 ID。 + /// + [Newtonsoft.Json.JsonProperty("campaign_id")] + [System.Text.Json.Serialization.JsonPropertyName("campaign_id")] + public long? CampaignId { get; set; } + + /// + /// 获取或设置推广计划名称。 + /// + [Newtonsoft.Json.JsonProperty("campaign_name")] + [System.Text.Json.Serialization.JsonPropertyName("campaign_name")] + public string? CampaignName { get; set; } + + /// + /// 获取或设置广告组 ID。 + /// + [Newtonsoft.Json.JsonProperty("adgroup_id")] + [System.Text.Json.Serialization.JsonPropertyName("adgroup_id")] + public long? AdGroupId { get; set; } + + /// + /// 获取或设置广告组名称。 + /// + [Newtonsoft.Json.JsonProperty("adgroup_name")] + [System.Text.Json.Serialization.JsonPropertyName("adgroup_name")] + public string? AdGroupName { get; set; } + + /// + /// 获取或设置曝光量。 + /// + [Newtonsoft.Json.JsonProperty("impression")] + [System.Text.Json.Serialization.JsonPropertyName("impression")] + public int ImpressCount { get; set; } + + /// + /// 获取或设置点击量。 + /// + [Newtonsoft.Json.JsonProperty("click")] + [System.Text.Json.Serialization.JsonPropertyName("click")] + public int ClickCount { get; set; } + + /// + /// 获取或设置消耗金额(单位:分)。 + /// + [Newtonsoft.Json.JsonProperty("cost")] + [System.Text.Json.Serialization.JsonPropertyName("cost")] + public int Cost { get; set; } + + /// + /// 获取或设置点赞或评论量。 + /// + [Newtonsoft.Json.JsonProperty("like_or_comment")] + [System.Text.Json.Serialization.JsonPropertyName("like_or_comment")] + public int LikeOrCommentCount { get; set; } + + /// + /// 获取或设置图片点击量。 + /// + [Newtonsoft.Json.JsonProperty("image_click")] + [System.Text.Json.Serialization.JsonPropertyName("image_click")] + public int ImageClickCount { get; set; } + + /// + /// 获取或设置关注量。 + /// + [Newtonsoft.Json.JsonProperty("follow")] + [System.Text.Json.Serialization.JsonPropertyName("follow")] + public int FollowCount { get; set; } + + /// + /// 获取或设置转发量。 + /// + [Newtonsoft.Json.JsonProperty("share")] + [System.Text.Json.Serialization.JsonPropertyName("share")] + public int ShareCount { get; set; } + + /// + /// 获取或设置本地门店访问人次。 + /// + [Newtonsoft.Json.JsonProperty("lbs_wechat_pv")] + [System.Text.Json.Serialization.JsonPropertyName("lbs_wechat_pv")] + public int LBSWechatPV { get; set; } + + /// + /// 获取或设置本地门店访问人数。 + /// + [Newtonsoft.Json.JsonProperty("lbs_wechat_uv")] + [System.Text.Json.Serialization.JsonPropertyName("lbs_wechat_uv")] + public int LBSWechatUV { get; set; } + } + } + + /// + /// 获取或设置日报列表。 + /// + [Newtonsoft.Json.JsonProperty("list")] + [System.Text.Json.Serialization.JsonPropertyName("list")] + public Types.DailyReport[] DailyReportList { get; set; } = default!; + + /// + /// 获取或设置分页信息。 + /// + [Newtonsoft.Json.JsonProperty("page_info")] + [System.Text.Json.Serialization.JsonPropertyName("page_info")] + public Abstractions.CommonPagination Pagination { get; set; } = default!; + } + } + + /// + /// 获取或设置返回数据。 + /// + [Newtonsoft.Json.JsonProperty("data")] + [System.Text.Json.Serialization.JsonPropertyName("data")] + public Types.Data Data { get; set; } = default!; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/Reports/RealtimeCostGetRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/Reports/RealtimeCostGetRequest.cs new file mode 100644 index 00000000..5564388c --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/Reports/RealtimeCostGetRequest.cs @@ -0,0 +1,33 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.Ads.Models +{ + /// + /// 表示 [GET] /realtime_cost/get 接口的请求。 + /// + public class RealtimeCostGetRequest : WechatAdsRequest + { + /// + /// 获取或设置查询日期字符串(格式:yyyy-MM-dd)。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public string DateString { get; set; } = string.Empty; + + /// + /// 获取或设置类型级别。 + /// 默认值:ADGROUP + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public string Level { get; set; } = "ADGROUP"; + + /// + /// 获取或设置过滤条件。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public IList? Filters { get; set; } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/Reports/RealtimeCostGetResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/Reports/RealtimeCostGetResponse.cs new file mode 100644 index 00000000..ffb0964c --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/Reports/RealtimeCostGetResponse.cs @@ -0,0 +1,65 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.Ads.Models +{ + /// + /// 表示 [GET] /realtime_cost/get 接口的响应。 + /// + public class RealtimeCostGetResponse : WechatAdsResponse + { + public static class Types + { + public class Data + { + public static class Types + { + public class RealtimeCost + { + /// + /// 获取或设置推广计划 ID。 + /// + [Newtonsoft.Json.JsonProperty("campaign_id")] + [System.Text.Json.Serialization.JsonPropertyName("campaign_id")] + public long CampaignId { get; set; } + + /// + /// 获取或设置广告组 ID。 + /// + [Newtonsoft.Json.JsonProperty("adgroup_id")] + [System.Text.Json.Serialization.JsonPropertyName("adgroup_id")] + public long AdGroupId { get; set; } + + /// + /// 获取或设置消耗金额(单位:分)。 + /// + [Newtonsoft.Json.JsonProperty("cost")] + [System.Text.Json.Serialization.JsonPropertyName("cost")] + public int Cost { get; set; } + } + } + + /// + /// 获取或设置实时消耗列表。 + /// + [Newtonsoft.Json.JsonProperty("list")] + [System.Text.Json.Serialization.JsonPropertyName("list")] + public Types.RealtimeCost[] RealtimeCostList { get; set; } = default!; + + /// + /// 获取或设置分页信息。 + /// + [Newtonsoft.Json.JsonProperty("page_info")] + [System.Text.Json.Serialization.JsonPropertyName("page_info")] + public Abstractions.CommonPagination Pagination { get; set; } = default!; + } + } + + /// + /// 获取或设置返回数据。 + /// + [Newtonsoft.Json.JsonProperty("data")] + [System.Text.Json.Serialization.JsonPropertyName("data")] + public Types.Data Data { get; set; } = default!; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/SpEntrustment/SpEntrustmentAddRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/SpEntrustment/SpEntrustmentAddRequest.cs new file mode 100644 index 00000000..41d157f6 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/SpEntrustment/SpEntrustmentAddRequest.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.Ads.Models +{ + /// + /// 表示 [POST] /sp_entrustment/add 接口的请求。 + /// + public class SpEntrustmentAddRequest : WechatAdsRequest + { + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/SpEntrustment/SpEntrustmentAddResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/SpEntrustment/SpEntrustmentAddResponse.cs new file mode 100644 index 00000000..ea66c714 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/SpEntrustment/SpEntrustmentAddResponse.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.Ads.Models +{ + /// + /// 表示 [POST] /sp_entrustment/add 接口的响应。 + /// + public class SpEntrustmentAddResponse : WechatAdsResponse + { + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/SpEntrustment/SpEntrustmentGetRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/SpEntrustment/SpEntrustmentGetRequest.cs new file mode 100644 index 00000000..e6f39a85 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/SpEntrustment/SpEntrustmentGetRequest.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.Ads.Models +{ + /// + /// 表示 [GET] /sp_entrustment/get 接口的请求。 + /// + public class SpEntrustmentGetRequest : WechatAdsRequest + { + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/SpEntrustment/SpEntrustmentGetResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/SpEntrustment/SpEntrustmentGetResponse.cs new file mode 100644 index 00000000..41da44ef --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/SpEntrustment/SpEntrustmentGetResponse.cs @@ -0,0 +1,31 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.Ads.Models +{ + /// + /// 表示 [GET] /sp_entrustment/get 接口的响应。 + /// + public class SpEntrustmentGetResponse : WechatAdsResponse + { + public static class Types + { + public class Data + { + /// + /// 获取或设置是否有授权关系。 + /// + [Newtonsoft.Json.JsonProperty("entrusted")] + [System.Text.Json.Serialization.JsonPropertyName("entrusted")] + public bool IsEntrusted { get; set; } + } + } + + /// + /// 获取或设置返回数据。 + /// + [Newtonsoft.Json.JsonProperty("data")] + [System.Text.Json.Serialization.JsonPropertyName("data")] + public Types.Data Data { get; set; } = default!; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/TargetingTags/TargetingTagsGetRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/TargetingTags/TargetingTagsGetRequest.cs new file mode 100644 index 00000000..491060b3 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/TargetingTags/TargetingTagsGetRequest.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.Ads.Models +{ + /// + /// 表示 [GET] /targeting_tags/get 接口的请求。 + /// + public class TargetingTagsGetRequest : WechatAdsRequest + { + /// + /// 获取或设置标签类型。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public string TagType { get; set; } = string.Empty; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/TargetingTags/TargetingTagsGetResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/TargetingTags/TargetingTagsGetResponse.cs new file mode 100644 index 00000000..c1030585 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/TargetingTags/TargetingTagsGetResponse.cs @@ -0,0 +1,72 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.Ads.Models +{ + /// + /// 表示 [GET] /targeting_tags/get 接口的响应。 + /// + public class TargetingTagsGetResponse : WechatAdsResponse + { + public static class Types + { + public class Data + { + public static class Types + { + public class Tag + { + /// + /// 获取或设置 ID。 + /// + [Newtonsoft.Json.JsonProperty("id")] + [System.Text.Json.Serialization.JsonPropertyName("id")] + public int Id { get; set; } + + /// + /// 获取或设置名称。 + /// + [Newtonsoft.Json.JsonProperty("name")] + [System.Text.Json.Serialization.JsonPropertyName("name")] + public string Name { get; set; } = default!; + + /// + /// 获取或设置上级 ID。 + /// + [Newtonsoft.Json.JsonProperty("parent_id")] + [System.Text.Json.Serialization.JsonPropertyName("parent_id")] + public int ParentId { get; set; } + + /// + /// 获取或设置上级名称。 + /// + [Newtonsoft.Json.JsonProperty("parent_name")] + [System.Text.Json.Serialization.JsonPropertyName("parent_name")] + public string ParentName { get; set; } = default!; + + /// + /// 获取或设置城市级别。 + /// + [Newtonsoft.Json.JsonProperty("city_level")] + [System.Text.Json.Serialization.JsonPropertyName("city_level")] + public string? CityLevel { get; set; } + } + } + + /// + /// 获取或设置标签列表。 + /// + [Newtonsoft.Json.JsonProperty("list")] + [System.Text.Json.Serialization.JsonPropertyName("list")] + public Types.Tag[] TagList { get; set; } = default!; + } + } + + /// + /// 获取或设置返回数据。 + /// + [Newtonsoft.Json.JsonProperty("data")] + [System.Text.Json.Serialization.JsonPropertyName("data")] + public Types.Data Data { get; set; } = default!; + } +}