diff --git a/CHANGELOG.md b/CHANGELOG.md
index 2e14912c..922bead9 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -33,6 +33,10 @@
[展开查看]
+- Release 2.23.0
+
+ - **新增**:新增第三方平台小程序流量主代运营相关接口。
+
- Release 2.22.0
- **新增**:新增第三方平台小程序流量主代运营相关接口。
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Extensions/WechatApiClientExecuteChannelsExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Extensions/WechatApiClientExecuteChannelsExtensions.cs
index 044c12b8..f62376b9 100644
--- a/src/SKIT.FlurlHttpClient.Wechat.Api/Extensions/WechatApiClientExecuteChannelsExtensions.cs
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Extensions/WechatApiClientExecuteChannelsExtensions.cs
@@ -2124,5 +2124,67 @@ namespace SKIT.FlurlHttpClient.Wechat.Api
return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken);
}
#endregion
+
+ #region Leads
+ ///
+ /// 异步调用 [POST] /channels/leads/get_leads_info_by_component_id 接口。
+ /// REF: https://developers.weixin.qq.com/doc/channels/API/leads/get_leads_info_by_component_id.html
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteChannelsLeadsGetLeadsInfoByComponentIdAsync(this WechatApiClient client, Models.ChannelsLeadsGetLeadsInfoByComponentIdRequest request, CancellationToken cancellationToken = default)
+ {
+ if (client is null) throw new ArgumentNullException(nameof(client));
+ if (request is null) throw new ArgumentNullException(nameof(request));
+
+ IFlurlRequest flurlReq = client
+ .CreateRequest(request, HttpMethod.Post, "channels", "leads", "get_leads_info_by_component_id")
+ .SetQueryParam("access_token", request.AccessToken);
+
+ return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken);
+ }
+
+ ///
+ /// 异步调用 [POST] /channels/leads/get_leads_info_by_request_id 接口。
+ /// REF: https://developers.weixin.qq.com/doc/channels/API/leads/get_leads_info_by_request_id.html
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteChannelsLeadsGetLeadsInfoByRequestIdAsync(this WechatApiClient client, Models.ChannelsLeadsGetLeadsInfoByRequestIdRequest request, CancellationToken cancellationToken = default)
+ {
+ if (client is null) throw new ArgumentNullException(nameof(client));
+ if (request is null) throw new ArgumentNullException(nameof(request));
+
+ IFlurlRequest flurlReq = client
+ .CreateRequest(request, HttpMethod.Post, "channels", "leads", "get_leads_info_by_request_id")
+ .SetQueryParam("access_token", request.AccessToken);
+
+ return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken);
+ }
+
+ ///
+ /// 异步调用 [POST] /channels/leads/get_leads_request_id 接口。
+ /// REF: https://developers.weixin.qq.com/doc/channels/API/leads/get_leads_request_id.html
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteChannelsLeadsGetLeadsRequestIdAsync(this WechatApiClient client, Models.ChannelsLeadsGetLeadsRequestIdRequest request, CancellationToken cancellationToken = default)
+ {
+ if (client is null) throw new ArgumentNullException(nameof(client));
+ if (request is null) throw new ArgumentNullException(nameof(request));
+
+ IFlurlRequest flurlReq = client
+ .CreateRequest(request, HttpMethod.Post, "channels", "leads", "get_leads_request_id")
+ .SetQueryParam("access_token", request.AccessToken);
+
+ return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken);
+ }
+ #endregion
}
}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/ECBrand/ChannelsECBrandAllResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/ECBrand/ChannelsECBrandAllResponse.cs
index 3bd3beed..6717eb4a 100644
--- a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/ECBrand/ChannelsECBrandAllResponse.cs
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/ECBrand/ChannelsECBrandAllResponse.cs
@@ -40,18 +40,18 @@ namespace SKIT.FlurlHttpClient.Wechat.Api.Models
[System.Text.Json.Serialization.JsonPropertyName("brands")]
public Types.Brand[] BrandList { get; set; } = default!;
- ///
- /// 获取或设置翻页标记。
- ///
- [Newtonsoft.Json.JsonProperty("next_key")]
- [System.Text.Json.Serialization.JsonPropertyName("next_key")]
- public string? NextCursor { get; set; }
-
///
/// 获取或设置是否还有更多。
///
[Newtonsoft.Json.JsonProperty("continue_flag")]
[System.Text.Json.Serialization.JsonPropertyName("continue_flag")]
public bool HasMore { get; set; }
+
+ ///
+ /// 获取或设置翻页标记。
+ ///
+ [Newtonsoft.Json.JsonProperty("next_key")]
+ [System.Text.Json.Serialization.JsonPropertyName("next_key")]
+ public string? NextCursor { get; set; }
}
}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/Leads/ChannelsLeadsGetLeadsInfoByComponentIdRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/Leads/ChannelsLeadsGetLeadsInfoByComponentIdRequest.cs
new file mode 100644
index 00000000..e64824e4
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/Leads/ChannelsLeadsGetLeadsInfoByComponentIdRequest.cs
@@ -0,0 +1,36 @@
+namespace SKIT.FlurlHttpClient.Wechat.Api.Models
+{
+ ///
+ /// 表示 [POST] /channels/leads/get_leads_info_by_component_id 接口的请求。
+ ///
+ public class ChannelsLeadsGetLeadsInfoByComponentIdRequest : WechatApiRequest, IInferable
+ {
+ ///
+ /// 获取或设置留资组件 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("leads_component_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("leads_component_id")]
+ public string LeadsComponentId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置开始时间戳。
+ ///
+ [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("last_buffer")]
+ [System.Text.Json.Serialization.JsonPropertyName("last_buffer")]
+ public string? Cursor { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/Leads/ChannelsLeadsGetLeadsInfoByComponentIdResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/Leads/ChannelsLeadsGetLeadsInfoByComponentIdResponse.cs
new file mode 100644
index 00000000..0a2165fe
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/Leads/ChannelsLeadsGetLeadsInfoByComponentIdResponse.cs
@@ -0,0 +1,42 @@
+namespace SKIT.FlurlHttpClient.Wechat.Api.Models
+{
+ ///
+ /// 表示 [POST] /channels/leads/get_leads_info_by_component_id 接口的响应。
+ ///
+ public class ChannelsLeadsGetLeadsInfoByComponentIdResponse : WechatApiResponse
+ {
+ public static class Types
+ {
+ public class UserData
+ {
+ ///
+ /// 获取或设置电话号码。
+ ///
+ [Newtonsoft.Json.JsonProperty("phone")]
+ [System.Text.Json.Serialization.JsonPropertyName("phone")]
+ public string PhoneNumber { get; set; } = default!;
+ }
+ }
+
+ ///
+ /// 获取或设置用户留资信息列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("user_data")]
+ [System.Text.Json.Serialization.JsonPropertyName("user_data")]
+ public Types.UserData[] UserDataList { get; set; } = default!;
+
+ ///
+ /// 获取或设置是否还有更多。
+ ///
+ [Newtonsoft.Json.JsonProperty("continue_flag")]
+ [System.Text.Json.Serialization.JsonPropertyName("continue_flag")]
+ public bool HasMore { get; set; }
+
+ ///
+ /// 获取或设置翻页标记。
+ ///
+ [Newtonsoft.Json.JsonProperty("last_buffer")]
+ [System.Text.Json.Serialization.JsonPropertyName("last_buffer")]
+ public string? NextCursor { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/Leads/ChannelsLeadsGetLeadsInfoByRequestIdRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/Leads/ChannelsLeadsGetLeadsInfoByRequestIdRequest.cs
new file mode 100644
index 00000000..c005857d
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/Leads/ChannelsLeadsGetLeadsInfoByRequestIdRequest.cs
@@ -0,0 +1,22 @@
+namespace SKIT.FlurlHttpClient.Wechat.Api.Models
+{
+ ///
+ /// 表示 [POST] /channels/leads/get_leads_info_by_request_id 接口的请求。
+ ///
+ public class ChannelsLeadsGetLeadsInfoByRequestIdRequest : WechatApiRequest, IInferable
+ {
+ ///
+ /// 获取或设置留资请求 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("request_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("request_id")]
+ public string RequestId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置翻页标记。
+ ///
+ [Newtonsoft.Json.JsonProperty("last_buffer")]
+ [System.Text.Json.Serialization.JsonPropertyName("last_buffer")]
+ public string? Cursor { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/Leads/ChannelsLeadsGetLeadsInfoByRequestIdResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/Leads/ChannelsLeadsGetLeadsInfoByRequestIdResponse.cs
new file mode 100644
index 00000000..fc54f3be
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/Leads/ChannelsLeadsGetLeadsInfoByRequestIdResponse.cs
@@ -0,0 +1,36 @@
+namespace SKIT.FlurlHttpClient.Wechat.Api.Models
+{
+ ///
+ /// 表示 [POST] /channels/leads/get_leads_info_by_request_id 接口的响应。
+ ///
+ public class ChannelsLeadsGetLeadsInfoByRequestIdResponse : WechatApiResponse
+ {
+ public static class Types
+ {
+ public class UserData : ChannelsLeadsGetLeadsInfoByComponentIdResponse.Types.UserData
+ {
+ }
+ }
+
+ ///
+ /// 获取或设置用户留资信息列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("user_data")]
+ [System.Text.Json.Serialization.JsonPropertyName("user_data")]
+ public Types.UserData[] UserDataList { get; set; } = default!;
+
+ ///
+ /// 获取或设置是否还有更多。
+ ///
+ [Newtonsoft.Json.JsonProperty("continue_flag")]
+ [System.Text.Json.Serialization.JsonPropertyName("continue_flag")]
+ public bool HasMore { get; set; }
+
+ ///
+ /// 获取或设置翻页标记。
+ ///
+ [Newtonsoft.Json.JsonProperty("last_buffer")]
+ [System.Text.Json.Serialization.JsonPropertyName("last_buffer")]
+ public string? NextCursor { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/Leads/ChannelsLeadsGetLeadsRequestIdRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/Leads/ChannelsLeadsGetLeadsRequestIdRequest.cs
new file mode 100644
index 00000000..5444f816
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/Leads/ChannelsLeadsGetLeadsRequestIdRequest.cs
@@ -0,0 +1,22 @@
+namespace SKIT.FlurlHttpClient.Wechat.Api.Models
+{
+ ///
+ /// 表示 [POST] /channels/leads/get_leads_request_id 接口的请求。
+ ///
+ public class ChannelsLeadsGetLeadsRequestIdRequest : WechatApiRequest, IInferable
+ {
+ ///
+ /// 获取或设置留资组件 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("leads_component_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("leads_component_id")]
+ public string LeadsComponentId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置翻页标记。
+ ///
+ [Newtonsoft.Json.JsonProperty("last_buffer")]
+ [System.Text.Json.Serialization.JsonPropertyName("last_buffer")]
+ public string? Cursor { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/Leads/ChannelsLeadsGetLeadsRequestIdResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/Leads/ChannelsLeadsGetLeadsRequestIdResponse.cs
new file mode 100644
index 00000000..3b21e4d2
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Channels/Leads/ChannelsLeadsGetLeadsRequestIdResponse.cs
@@ -0,0 +1,56 @@
+namespace SKIT.FlurlHttpClient.Wechat.Api.Models
+{
+ ///
+ /// 表示 [POST] /channels/leads/get_leads_request_id 接口的响应。
+ ///
+ public class ChannelsLeadsGetLeadsRequestIdResponse : WechatApiResponse
+ {
+ public static class Types
+ {
+ public class Request
+ {
+ ///
+ /// 获取或设置留资请求 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("request_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("request_id")]
+ public string RequestId { get; set; } = default!;
+
+ ///
+ /// 获取或设置直播开始时间戳。
+ ///
+ [Newtonsoft.Json.JsonProperty("live_start_time")]
+ [System.Text.Json.Serialization.JsonPropertyName("live_start_time")]
+ public long LiveStartTimestamp { get; set; }
+
+ ///
+ /// 获取或设置直播描述。
+ ///
+ [Newtonsoft.Json.JsonProperty("live_description")]
+ [System.Text.Json.Serialization.JsonPropertyName("live_description")]
+ public string LiveDescription { get; set; } = default!;
+ }
+ }
+
+ ///
+ /// 获取或设置留资请求列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("item")]
+ [System.Text.Json.Serialization.JsonPropertyName("item")]
+ public Types.Request[] RequestList { get; set; } = default!;
+
+ ///
+ /// 获取或设置是否还有更多。
+ ///
+ [Newtonsoft.Json.JsonProperty("continue_flag")]
+ [System.Text.Json.Serialization.JsonPropertyName("continue_flag")]
+ public bool HasMore { get; set; }
+
+ ///
+ /// 获取或设置翻页标记。
+ ///
+ [Newtonsoft.Json.JsonProperty("last_buffer")]
+ [System.Text.Json.Serialization.JsonPropertyName("last_buffer")]
+ public string? NextCursor { get; set; }
+ }
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/Channels/Leads/ChannelsLeadsGetLeadsInfoByComponentIdRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/Channels/Leads/ChannelsLeadsGetLeadsInfoByComponentIdRequest.json
new file mode 100644
index 00000000..a668f770
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/Channels/Leads/ChannelsLeadsGetLeadsInfoByComponentIdRequest.json
@@ -0,0 +1,6 @@
+{
+ "leads_component_id": "100234056999000000",
+ "start_time": 0,
+ "end_time": 1668676968,
+ "last_buffer": "EB4YAg"
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/Channels/Leads/ChannelsLeadsGetLeadsInfoByComponentIdResponse.json b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/Channels/Leads/ChannelsLeadsGetLeadsInfoByComponentIdResponse.json
new file mode 100644
index 00000000..84330481
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/Channels/Leads/ChannelsLeadsGetLeadsInfoByComponentIdResponse.json
@@ -0,0 +1,11 @@
+{
+ "errcode": 0,
+ "errmsg": "ok",
+ "user_data": [
+ {
+ "phone": "18881222222"
+ }
+ ],
+ "last_buffer": "EB4YAg=",
+ "continue_flag": true
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/Channels/Leads/ChannelsLeadsGetLeadsInfoByRequestIdRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/Channels/Leads/ChannelsLeadsGetLeadsInfoByRequestIdRequest.json
new file mode 100644
index 00000000..d0b7b1cb
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/Channels/Leads/ChannelsLeadsGetLeadsInfoByRequestIdRequest.json
@@ -0,0 +1,4 @@
+{
+ "request_id": "100234056",
+ "last_buffer": "EB4YAg"
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/Channels/Leads/ChannelsLeadsGetLeadsInfoByRequestIdResponse.json b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/Channels/Leads/ChannelsLeadsGetLeadsInfoByRequestIdResponse.json
new file mode 100644
index 00000000..84330481
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/Channels/Leads/ChannelsLeadsGetLeadsInfoByRequestIdResponse.json
@@ -0,0 +1,11 @@
+{
+ "errcode": 0,
+ "errmsg": "ok",
+ "user_data": [
+ {
+ "phone": "18881222222"
+ }
+ ],
+ "last_buffer": "EB4YAg=",
+ "continue_flag": true
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/Channels/Leads/ChannelsLeadsGetLeadsRequestIdRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/Channels/Leads/ChannelsLeadsGetLeadsRequestIdRequest.json
new file mode 100644
index 00000000..c514c17b
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/Channels/Leads/ChannelsLeadsGetLeadsRequestIdRequest.json
@@ -0,0 +1,4 @@
+{
+ "leads_component_id": "100234056",
+ "last_buffer": "EB4YAg"
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/Channels/Leads/ChannelsLeadsGetLeadsRequestIdResponse.json b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/Channels/Leads/ChannelsLeadsGetLeadsRequestIdResponse.json
new file mode 100644
index 00000000..a9a7f35c
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/Channels/Leads/ChannelsLeadsGetLeadsRequestIdResponse.json
@@ -0,0 +1,13 @@
+{
+ "errcode": 0,
+ "errmsg": "ok",
+ "item": [
+ {
+ "request_id": "18881222222",
+ "live_start_time": 1668676968,
+ "live_description": "xxx的直播"
+ }
+ ],
+ "last_buffer": "EB4YAg=",
+ "continue_flag": true
+}