diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Extensions/WechatApiClientExecuteWeDataExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Extensions/WechatApiClientExecuteWeDataExtensions.cs
new file mode 100644
index 00000000..a675db35
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Extensions/WechatApiClientExecuteWeDataExtensions.cs
@@ -0,0 +1,152 @@
+using System;
+using System.Net.Http;
+using System.Threading;
+using System.Threading.Tasks;
+using Flurl;
+using Flurl.Http;
+
+namespace SKIT.FlurlHttpClient.Wechat.Api
+{
+ public static class WechatApiClientExecuteWeDataExtensions
+ {
+ ///
+ /// 异步调用 [POST] /wedata/wedata_get_login_config 接口。
+ /// REF: https://developers.weixin.qq.com/doc/oplatform/openApi/OpenApiDoc/miniprogram-management/we-analysis/weDataGetLoginConfig.html
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteWeDataGetLoginConfigAsync(this WechatApiClient client, Models.WeDataGetLoginConfigRequest 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, "wedata", "wedata_get_login_config")
+ .SetQueryParam("access_token", request.ComponentAccessToken);
+
+ return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken);
+ }
+
+ ///
+ /// 异步调用 [POST] /wedata/wedata_set_login_config 接口。
+ /// REF: https://developers.weixin.qq.com/doc/oplatform/openApi/OpenApiDoc/miniprogram-management/we-analysis/weDataSetLoginConfig.html
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteWeDataSetLoginConfigAsync(this WechatApiClient client, Models.WeDataSetLoginConfigRequest 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, "wedata", "wedata_set_login_config")
+ .SetQueryParam("access_token", request.ComponentAccessToken);
+
+ return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken);
+ }
+
+ ///
+ /// 异步调用 [POST] /wedata/wedata_get_perm_list 接口。
+ /// REF: https://developers.weixin.qq.com/doc/oplatform/openApi/OpenApiDoc/miniprogram-management/we-analysis/weDataGetPermList.html
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteWeDataGetPermissionListAsync(this WechatApiClient client, Models.WeDataGetPermissionListRequest 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, "wedata", "wedata_get_perm_list")
+ .SetQueryParam("access_token", request.AccessToken);
+
+ return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken);
+ }
+
+ ///
+ /// 异步调用 [POST] /wedata/wedata_set_user_perm 接口。
+ /// REF: https://developers.weixin.qq.com/doc/oplatform/openApi/OpenApiDoc/miniprogram-management/we-analysis/weDataSetUserPerm.html
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteWeDataSetUserPermissionAsync(this WechatApiClient client, Models.WeDataSetUserPermissionRequest 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, "wedata", "wedata_set_user_perm")
+ .SetQueryParam("access_token", request.AccessToken);
+
+ return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken);
+ }
+
+ ///
+ /// 异步调用 [POST] /wedata/wedata_query_bind_list 接口。
+ /// REF: https://developers.weixin.qq.com/doc/oplatform/openApi/OpenApiDoc/miniprogram-management/we-analysis/weDataQueryBindList.html
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteWeDataQueryBindListAsync(this WechatApiClient client, Models.WeDataQueryBindListRequest 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, "wedata", "wedata_query_bind_list")
+ .SetQueryParam("access_token", request.AccessToken);
+
+ return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken);
+ }
+
+ ///
+ /// 异步调用 [POST] /wedata/wedata_unbind_user 接口。
+ /// REF: https://developers.weixin.qq.com/doc/oplatform/openApi/OpenApiDoc/miniprogram-management/we-analysis/weDataUnbindUser.html
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteWeDataUnbindUserAsync(this WechatApiClient client, Models.WeDataUnbindUserRequest 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, "wedata", "wedata_unbind_user")
+ .SetQueryParam("access_token", request.AccessToken);
+
+ return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken);
+ }
+
+ ///
+ /// 异步调用 [POST] /wedata/wedata_login 接口。
+ /// REF: https://developers.weixin.qq.com/doc/oplatform/openApi/OpenApiDoc/miniprogram-management/we-analysis/wedata_login.html
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteWeDataLoginAsync(this WechatApiClient client, Models.WeDataLoginRequest 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, "wedata", "wedata_login")
+ .SetQueryParam("access_token", request.AccessToken);
+
+ return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken);
+ }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/WeData/WeDataGetLoginConfigRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/WeData/WeDataGetLoginConfigRequest.cs
new file mode 100644
index 00000000..e4046800
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/WeData/WeDataGetLoginConfigRequest.cs
@@ -0,0 +1,15 @@
+namespace SKIT.FlurlHttpClient.Wechat.Api.Models
+{
+ ///
+ /// 表示 [POST] /wedata/wedata_get_login_config 接口的请求。
+ ///
+ public class WeDataGetLoginConfigRequest : WechatApiRequest, IInferable
+ {
+ ///
+ /// 获取或设置第三方平台 AccessToken。
+ ///
+ [Newtonsoft.Json.JsonIgnore]
+ [System.Text.Json.Serialization.JsonIgnore]
+ public string ComponentAccessToken { get; set; } = string.Empty;
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/WeData/WeDataGetLoginConfigResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/WeData/WeDataGetLoginConfigResponse.cs
new file mode 100644
index 00000000..a7c99678
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/WeData/WeDataGetLoginConfigResponse.cs
@@ -0,0 +1,56 @@
+namespace SKIT.FlurlHttpClient.Wechat.Api.Models
+{
+ ///
+ /// 表示 [POST] /wedata/wedata_get_login_config 接口的响应。
+ ///
+ public class WeDataGetLoginConfigResponse : WechatApiResponse
+ {
+ public static class Types
+ {
+ public class AppInfo
+ {
+ ///
+ /// 获取或设置小程序 AppId。
+ ///
+ [Newtonsoft.Json.JsonProperty("appid")]
+ [System.Text.Json.Serialization.JsonPropertyName("appid")]
+ public string AppId { get; set; } = default!;
+
+ ///
+ /// 获取或设置小程序昵称。
+ ///
+ [Newtonsoft.Json.JsonProperty("nickname")]
+ [System.Text.Json.Serialization.JsonPropertyName("nickname")]
+ public string Nickname { get; set; } = default!;
+ }
+ }
+
+ ///
+ /// 获取或设置服务商 AppId。
+ ///
+ [Newtonsoft.Json.JsonProperty("component_appid")]
+ [System.Text.Json.Serialization.JsonPropertyName("component_appid")]
+ public string ComponentAppId { get; set; } = default!;
+
+ ///
+ /// 获取或设置服务商昵称。
+ ///
+ [Newtonsoft.Json.JsonProperty("component_nickname")]
+ [System.Text.Json.Serialization.JsonPropertyName("component_nickname")]
+ public string ComponentNickname { get; set; } = default!;
+
+ ///
+ /// 获取或设置反查地址。
+ ///
+ [Newtonsoft.Json.JsonProperty("recheck_url")]
+ [System.Text.Json.Serialization.JsonPropertyName("recheck_url")]
+ public string RecheckUrl { get; set; } = default!;
+
+ ///
+ /// 获取或设置关联小程序列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("appinfo")]
+ [System.Text.Json.Serialization.JsonPropertyName("appinfo")]
+ public Types.AppInfo[] AssociatedAppList { get; set; } = default!;
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/WeData/WeDataGetPermissionListRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/WeData/WeDataGetPermissionListRequest.cs
new file mode 100644
index 00000000..2f2fb097
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/WeData/WeDataGetPermissionListRequest.cs
@@ -0,0 +1,9 @@
+namespace SKIT.FlurlHttpClient.Wechat.Api.Models
+{
+ ///
+ /// 表示 [POST] /wedata/wedata_get_perm_list 接口的请求。
+ ///
+ public class WeDataGetPermissionListRequest : WechatApiRequest, IInferable
+ {
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/WeData/WeDataGetPermissionListResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/WeData/WeDataGetPermissionListResponse.cs
new file mode 100644
index 00000000..5ab69e5a
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/WeData/WeDataGetPermissionListResponse.cs
@@ -0,0 +1,42 @@
+namespace SKIT.FlurlHttpClient.Wechat.Api.Models
+{
+ ///
+ /// 表示 [POST] /wedata/wedata_get_perm_list 接口的响应。
+ ///
+ public class WeDataGetPermissionListResponse : WechatApiResponse
+ {
+ public static class Types
+ {
+ public class Permission
+ {
+ ///
+ /// 获取或设置权限集 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("perm_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("perm_id")]
+ public string PermissionId { get; set; } = default!;
+
+ ///
+ /// 获取或设置权限集名称。
+ ///
+ [Newtonsoft.Json.JsonProperty("name")]
+ [System.Text.Json.Serialization.JsonPropertyName("name")]
+ public string Name { get; set; } = default!;
+
+ ///
+ /// 获取或设置权限集描述。
+ ///
+ [Newtonsoft.Json.JsonProperty("desc")]
+ [System.Text.Json.Serialization.JsonPropertyName("desc")]
+ public string Description { get; set; } = default!;
+ }
+ }
+
+ ///
+ /// 获取或设置权限集列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("perm")]
+ [System.Text.Json.Serialization.JsonPropertyName("perm")]
+ public Types.Permission[] PermissionList { get; set; } = default!;
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/WeData/WeDataLoginRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/WeData/WeDataLoginRequest.cs
new file mode 100644
index 00000000..f8c8ce4a
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/WeData/WeDataLoginRequest.cs
@@ -0,0 +1,36 @@
+namespace SKIT.FlurlHttpClient.Wechat.Api.Models
+{
+ ///
+ /// 表示 [POST] /wedata/wedata_login 接口的请求。
+ ///
+ public class WeDataLoginRequest : WechatApiRequest, IInferable
+ {
+ ///
+ /// 获取或设置用户在服务商系统的唯一标识。
+ ///
+ [Newtonsoft.Json.JsonProperty("uid")]
+ [System.Text.Json.Serialization.JsonPropertyName("uid")]
+ public string UserId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置用户在服务商系统的会话标识。
+ ///
+ [Newtonsoft.Json.JsonProperty("user_session")]
+ [System.Text.Json.Serialization.JsonPropertyName("user_session")]
+ public string UserSession { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置用户 IP。
+ ///
+ [Newtonsoft.Json.JsonProperty("client_ip")]
+ [System.Text.Json.Serialization.JsonPropertyName("client_ip")]
+ public string? ClientIp { get; set; }
+
+ ///
+ /// 获取或设置用户 UserAgent。
+ ///
+ [Newtonsoft.Json.JsonProperty("user_agent")]
+ [System.Text.Json.Serialization.JsonPropertyName("user_agent")]
+ public string? UserAgent { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/WeData/WeDataLoginResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/WeData/WeDataLoginResponse.cs
new file mode 100644
index 00000000..c362a007
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/WeData/WeDataLoginResponse.cs
@@ -0,0 +1,54 @@
+namespace SKIT.FlurlHttpClient.Wechat.Api.Models
+{
+ ///
+ /// 表示 [POST] /wedata/wedata_login 接口的响应。
+ ///
+ public class WeDataLoginResponse : WechatApiResponse
+ {
+ public static class Types
+ {
+ public class BaseResponse
+ {
+ ///
+ /// 获取或设置错误码。
+ ///
+ [Newtonsoft.Json.JsonProperty("ret")]
+ [System.Text.Json.Serialization.JsonPropertyName("ret")]
+ public int ErrorCode { get; set; }
+
+ ///
+ /// 获取或设置错误信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("err_msg")]
+ [System.Text.Json.Serialization.JsonPropertyName("err_msg")]
+ public string ErrorMessage { get; set; } = default!;
+ }
+ }
+
+ ///
+ /// 获取或设置基本响应信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("base_resp")]
+ [System.Text.Json.Serialization.JsonPropertyName("base_resp")]
+ public Types.BaseResponse BaseResponse { get; set; } = default!;
+
+ ///
+ /// 获取或设置 We 分析登录链接。
+ ///
+ [Newtonsoft.Json.JsonProperty("redirect_url")]
+ [System.Text.Json.Serialization.JsonPropertyName("redirect_url")]
+ public string? RedirectUrl { get; set; }
+
+ ///
+ /// 获取或设置过期时间戳。
+ ///
+ [Newtonsoft.Json.JsonProperty("expire_at")]
+ [System.Text.Json.Serialization.JsonPropertyName("expire_at")]
+ public long? ExpireTimestamp { get; set; }
+
+ public override bool IsSuccessful()
+ {
+ return base.IsSuccessful() && BaseResponse != null && BaseResponse.ErrorCode == 0;
+ }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/WeData/WeDataQueryBindListRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/WeData/WeDataQueryBindListRequest.cs
new file mode 100644
index 00000000..0310d6cd
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/WeData/WeDataQueryBindListRequest.cs
@@ -0,0 +1,9 @@
+namespace SKIT.FlurlHttpClient.Wechat.Api.Models
+{
+ ///
+ /// 表示 [POST] /wedata/wedata_query_bind_list 接口的请求。
+ ///
+ public class WeDataQueryBindListRequest : WechatApiRequest, IInferable
+ {
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/WeData/WeDataQueryBindListResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/WeData/WeDataQueryBindListResponse.cs
new file mode 100644
index 00000000..0e249630
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/WeData/WeDataQueryBindListResponse.cs
@@ -0,0 +1,79 @@
+namespace SKIT.FlurlHttpClient.Wechat.Api.Models
+{
+ ///
+ /// 表示 [POST] /wedata/wedata_query_bind_list 接口的响应。
+ ///
+ public class WeDataQueryBindListResponse : WechatApiResponse
+ {
+ public static class Types
+ {
+ public class UserInfo
+ {
+ public static class Types
+ {
+ public class Permission : WeDataGetPermissionListResponse.Types.Permission
+ {
+ }
+ }
+
+ ///
+ /// 获取或设置用户在服务商系统的唯一标识。
+ ///
+ [Newtonsoft.Json.JsonProperty("uid")]
+ [System.Text.Json.Serialization.JsonPropertyName("uid")]
+ public string UserId { get; set; } = default!;
+
+ ///
+ /// 获取或设置是否绑定了微信号。
+ ///
+ [Newtonsoft.Json.JsonProperty("is_bind")]
+ [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.NumericalBooleanConverter))]
+ [System.Text.Json.Serialization.JsonPropertyName("is_bind")]
+ [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.NumericalBooleanConverter))]
+ public bool IsBind { get; set; }
+
+ ///
+ /// 获取或设置用户微信昵称。
+ ///
+ [Newtonsoft.Json.JsonProperty("nickname")]
+ [System.Text.Json.Serialization.JsonPropertyName("nickname")]
+ public string? Nickname { get; set; }
+
+ ///
+ /// 获取或设置用户微信头像 URL。
+ ///
+ [Newtonsoft.Json.JsonProperty("head_url")]
+ [System.Text.Json.Serialization.JsonPropertyName("head_url")]
+ public string? HeadImageUrl { get; set; }
+
+ ///
+ /// 获取或设置创建时间戳。
+ ///
+ [Newtonsoft.Json.JsonProperty("create_time")]
+ [System.Text.Json.Serialization.JsonPropertyName("create_time")]
+ public long CreateTimestamp { get; set; }
+
+ ///
+ /// 获取或设置更新建时间戳。
+ ///
+ [Newtonsoft.Json.JsonProperty("update_time")]
+ [System.Text.Json.Serialization.JsonPropertyName("update_time")]
+ public long UpdateTimestamp { get; set; }
+
+ ///
+ /// 获取或设置用户权限集列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("perm")]
+ [System.Text.Json.Serialization.JsonPropertyName("perm")]
+ public Types.Permission[]? PermissionList { get; set; }
+ }
+ }
+
+ ///
+ /// 获取或设置用户绑定信息列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("info")]
+ [System.Text.Json.Serialization.JsonPropertyName("info")]
+ public Types.UserInfo[] UserList { get; set; } = default!;
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/WeData/WeDataSetLoginConfigRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/WeData/WeDataSetLoginConfigRequest.cs
new file mode 100644
index 00000000..13426285
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/WeData/WeDataSetLoginConfigRequest.cs
@@ -0,0 +1,38 @@
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.Api.Models
+{
+ ///
+ /// 表示 [POST] /wedata/wedata_set_login_config 接口的请求。
+ ///
+ public class WeDataSetLoginConfigRequest : WechatApiRequest, IInferable
+ {
+ ///
+ /// 获取或设置第三方平台 AccessToken。
+ ///
+ [Newtonsoft.Json.JsonIgnore]
+ [System.Text.Json.Serialization.JsonIgnore]
+ public string ComponentAccessToken { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置设置类型。
+ ///
+ [Newtonsoft.Json.JsonProperty("set_type")]
+ [System.Text.Json.Serialization.JsonPropertyName("set_type")]
+ public int SetType { get; set; }
+
+ ///
+ /// 获取或设置反查地址。
+ ///
+ [Newtonsoft.Json.JsonProperty("recheck_url")]
+ [System.Text.Json.Serialization.JsonPropertyName("recheck_url")]
+ public string? RecheckUrl { get; set; }
+
+ ///
+ /// 获取或设置关联小程序 AppId。
+ ///
+ [Newtonsoft.Json.JsonProperty("associate_appid")]
+ [System.Text.Json.Serialization.JsonPropertyName("associate_appid")]
+ public IList? AssociatedAppIdList { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/WeData/WeDataSetLoginConfigResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/WeData/WeDataSetLoginConfigResponse.cs
new file mode 100644
index 00000000..4f76a71f
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/WeData/WeDataSetLoginConfigResponse.cs
@@ -0,0 +1,9 @@
+namespace SKIT.FlurlHttpClient.Wechat.Api.Models
+{
+ ///
+ /// 表示 [POST] /wedata/wedata_set_login_config 接口的响应。
+ ///
+ public class WeDataSetLoginConfigResponse : WechatApiResponse
+ {
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/WeData/WeDataSetUserPermissionRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/WeData/WeDataSetUserPermissionRequest.cs
new file mode 100644
index 00000000..75bacd99
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/WeData/WeDataSetUserPermissionRequest.cs
@@ -0,0 +1,51 @@
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.Api.Models
+{
+ ///
+ /// 表示 [POST] /wedata/wedata_set_user_perm 接口的请求。
+ ///
+ public class WeDataSetUserPermissionRequest : WechatApiRequest, IInferable
+ {
+ public static class Types
+ {
+ public class Permission
+ {
+ ///
+ /// 获取或设置权限集 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("perm_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("perm_id")]
+ public string PermissionId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置权限集名称。
+ ///
+ [Newtonsoft.Json.JsonProperty("name")]
+ [System.Text.Json.Serialization.JsonPropertyName("name")]
+ public string? Name { get; set; }
+
+ ///
+ /// 获取或设置权限集描述。
+ ///
+ [Newtonsoft.Json.JsonProperty("desc")]
+ [System.Text.Json.Serialization.JsonPropertyName("desc")]
+ public string? Description { get; set; }
+ }
+ }
+
+ ///
+ /// 获取或设置用户在服务商系统的唯一标识。
+ ///
+ [Newtonsoft.Json.JsonProperty("uid")]
+ [System.Text.Json.Serialization.JsonPropertyName("uid")]
+ public string UserId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置权限集列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("perm")]
+ [System.Text.Json.Serialization.JsonPropertyName("perm")]
+ public IList PermissionList { get; set; } = new List();
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/WeData/WeDataSetUserPermissionResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/WeData/WeDataSetUserPermissionResponse.cs
new file mode 100644
index 00000000..53b00714
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/WeData/WeDataSetUserPermissionResponse.cs
@@ -0,0 +1,9 @@
+namespace SKIT.FlurlHttpClient.Wechat.Api.Models
+{
+ ///
+ /// 表示 [POST] /wedata/wedata_set_user_perm 接口的响应。
+ ///
+ public class WeDataSetUserPermissionResponse : WechatApiResponse
+ {
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/WeData/WeDataUnbindUserRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/WeData/WeDataUnbindUserRequest.cs
new file mode 100644
index 00000000..806c0817
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/WeData/WeDataUnbindUserRequest.cs
@@ -0,0 +1,15 @@
+namespace SKIT.FlurlHttpClient.Wechat.Api.Models
+{
+ ///
+ /// 表示 [POST] /wedata/wedata_unbind_user 接口的请求。
+ ///
+ public class WeDataUnbindUserRequest : WechatApiRequest, IInferable
+ {
+ ///
+ /// 获取或设置用户在服务商系统的唯一标识。
+ ///
+ [Newtonsoft.Json.JsonProperty("uid")]
+ [System.Text.Json.Serialization.JsonPropertyName("uid")]
+ public string UserId { get; set; } = string.Empty;
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/WeData/WeDataUnbindUserResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/WeData/WeDataUnbindUserResponse.cs
new file mode 100644
index 00000000..14d9bfcd
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/WeData/WeDataUnbindUserResponse.cs
@@ -0,0 +1,9 @@
+namespace SKIT.FlurlHttpClient.Wechat.Api.Models
+{
+ ///
+ /// 表示 [POST] /wedata/wedata_unbind_user 接口的响应。
+ ///
+ public class WeDataUnbindUserResponse : WechatApiResponse
+ {
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/WxaComponent/Code/WxaUploadMediaResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/WxaComponent/Code/WxaUploadMediaResponse.cs
index e8a5f84b..73e759fa 100644
--- a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/WxaComponent/Code/WxaUploadMediaResponse.cs
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/WxaComponent/Code/WxaUploadMediaResponse.cs
@@ -15,8 +15,8 @@ namespace SKIT.FlurlHttpClient.Wechat.Api.Models
///
/// 获取或设置媒体文件标识。
///
- [Newtonsoft.Json.JsonProperty("media_id")]
- [System.Text.Json.Serialization.JsonPropertyName("media_id")]
+ [Newtonsoft.Json.JsonProperty("mediaid")]
+ [System.Text.Json.Serialization.JsonPropertyName("mediaid")]
public string MediaId { get; set; } = default!;
}
}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/WeData/WeDataGetLoginConfigResponse.json b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/WeData/WeDataGetLoginConfigResponse.json
new file mode 100644
index 00000000..d56b29e9
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/WeData/WeDataGetLoginConfigResponse.json
@@ -0,0 +1,13 @@
+{
+ "errcode": 0,
+ "errmsg": "OK",
+ "component_appid": "wxxxxxxxxxxxx",
+ "component_nickname": "example",
+ "recheck_url": "url address",
+ "appinfo": [
+ {
+ "appid": "yyyyyyyyyyyyy",
+ "nickname": "associate_app"
+ }
+ ]
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/WeData/WeDataGetPermissionListResponse.json b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/WeData/WeDataGetPermissionListResponse.json
new file mode 100644
index 00000000..772a0f01
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/WeData/WeDataGetPermissionListResponse.json
@@ -0,0 +1,36 @@
+{
+ "errcode": 0,
+ "errmsg": "OK",
+ "perm": [
+ {
+ "perm_id": "10000",
+ "name": "全站全量权限",
+ "desc": "具备所有模块的所有权限"
+ },
+ {
+ "perm_id": "10001",
+ "name": "全站只读权限",
+ "desc": "具备所有模块的“查看”权限。但没有“创建”、“编辑”、“下载”、“删除”的权限"
+ },
+ {
+ "perm_id": "10002",
+ "name": "访问分析权限",
+ "desc": "除“核心数据(交易)”、“交易分析”、“经营分析”的相关权限"
+ },
+ {
+ "perm_id": "10003",
+ "name": "交易分析权限",
+ "desc": "仅有“核心数据(交易)”、“交易分析”、“经营分析”的相关权限"
+ },
+ {
+ "perm_id": "10004",
+ "name": "数据开发权限",
+ "desc": "仅有“性能质量”、“数据管理”的相关权限"
+ },
+ {
+ "perm_id": "500000702",
+ "name": "测试一个新的权限",
+ "desc": "描述描述描述测试一个新的权限"
+ }
+ ]
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/WeData/WeDataLoginRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/WeData/WeDataLoginRequest.json
new file mode 100644
index 00000000..2a825e41
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/WeData/WeDataLoginRequest.json
@@ -0,0 +1,6 @@
+{
+ "user_session": "session_key",
+ "uid": "test",
+ "client_ip": "127.0.0.1",
+ "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36"
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/WeData/WeDataLoginResponse.json b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/WeData/WeDataLoginResponse.json
new file mode 100644
index 00000000..715b9940
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/WeData/WeDataLoginResponse.json
@@ -0,0 +1,8 @@
+{
+ "base_resp": {
+ "ret": 0,
+ "err_msg": "OK"
+ },
+ "redirect_url": "https://wedata.weixin.qq.com/mp2/supplier/login?open_login=1&open_sid=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
+ "expire_at": 1663818592
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/WeData/WeDataQueryBindListResponse.json b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/WeData/WeDataQueryBindListResponse.json
new file mode 100644
index 00000000..ae77bd24
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/WeData/WeDataQueryBindListResponse.json
@@ -0,0 +1,27 @@
+{
+ "errcode": 0,
+ "errmsg": "OK",
+ "info": [
+ {
+ "uid": "test",
+ "create_time": 1663728070,
+ "update_time": 1663728119,
+ "nickname": "xxx",
+ "head_url": "http://wx.qlogo.cn/mmhead/xxxxxxxxxxxxxxxxxxxxxxx",
+ "is_bind": 1,
+ "perm": [
+ {
+ "perm_id": "10001",
+ "name": "全站只读权限",
+ "desc": "具备所有模块的“查看”权限。但没有“创建”、“编辑”、“下载”、“删除”的权限"
+ }
+ ]
+ },
+ {
+ "uid": "example",
+ "create_time": 1663664719,
+ "update_time": 1663664941,
+ "is_bind": 0
+ }
+ ]
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/WeData/WeDataSetLoginConfigRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/WeData/WeDataSetLoginConfigRequest.json
new file mode 100644
index 00000000..90a2ce52
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/WeData/WeDataSetLoginConfigRequest.json
@@ -0,0 +1,5 @@
+{
+ "set_type": 1,
+ "recheck_url": "xxxxxxxxx",
+ "associate_appid": [ "xxxxxxxxx" ]
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/WeData/WeDataSetUserPermissionRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/WeData/WeDataSetUserPermissionRequest.json
new file mode 100644
index 00000000..21c39fa3
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/WeData/WeDataSetUserPermissionRequest.json
@@ -0,0 +1,13 @@
+{
+ "uid": "example",
+ "perm": [
+ {
+ "perm_id": "10001",
+ "name": "全站只读权限"
+ },
+ {
+ "perm_id": "10002",
+ "name": "访问分析权限"
+ }
+ ]
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/WeData/WeDataUnbindUserRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/WeData/WeDataUnbindUserRequest.json
new file mode 100644
index 00000000..a82a5dd5
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/WeData/WeDataUnbindUserRequest.json
@@ -0,0 +1,3 @@
+{
+ "uid": "test"
+}