diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Extensions/WechatApiClientExecuteCityServiceExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Extensions/WechatApiClientExecuteCityServiceExtensions.cs
new file mode 100644
index 00000000..2fe96f71
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Extensions/WechatApiClientExecuteCityServiceExtensions.cs
@@ -0,0 +1,36 @@
+using System;
+using System.Collections.Generic;
+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.Api
+{
+ public static class WechatApiClientExecuteCityServiceExtensions
+ {
+ ///
+ /// 异步调用 [POST] /cityservice/sendmsgdata 接口。
+ /// REF: https://developers.weixin.qq.com/miniprogram/dev/framework/cityservice/cityservice-results-page.html
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteCityServiceSendMessageDataAsync(this WechatApiClient client, Models.CityServiceSendMessageDataRequest 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, "cityservice", "sendmsgdata")
+ .SetOptions(request)
+ .SetQueryParam("access_token", request.AccessToken);
+
+ return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken);
+ }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Extensions/WechatApiClientExecuteIntpRealNameExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Extensions/WechatApiClientExecuteIntpRealNameExtensions.cs
index 7adefb97..765fa3df 100644
--- a/src/SKIT.FlurlHttpClient.Wechat.Api/Extensions/WechatApiClientExecuteIntpRealNameExtensions.cs
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Extensions/WechatApiClientExecuteIntpRealNameExtensions.cs
@@ -31,5 +31,26 @@ namespace SKIT.FlurlHttpClient.Wechat.Api
return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken);
}
+
+ ///
+ /// 异步调用 [POST] /intp/realname/checkrealnameinfo 接口。
+ /// REF: https://developers.weixin.qq.com/miniprogram/dev/framework/cityservice/cityservice-checkrealnameinfo.html
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteIntpRealNameCheckRealNameInfoAsync(this WechatApiClient client, Models.IntpRealNameCheckRealNameInfoRequest 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, "intp", "realname", "checkrealnameinfo")
+ .SetOptions(request)
+ .SetQueryParam("access_token", request.AccessToken);
+
+ return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken);
+ }
}
}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/CityService/CityServiceSendMessageDataRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/CityService/CityServiceSendMessageDataRequest.cs
new file mode 100644
index 00000000..f352ea2f
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/CityService/CityServiceSendMessageDataRequest.cs
@@ -0,0 +1,74 @@
+using System;
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.Api.Models
+{
+ ///
+ /// 表示 [POST] /cityservice/sendmsgdata 接口的请求。
+ ///
+ public class CityServiceSendMessageDataRequest : WechatApiRequest
+ {
+ public static class Types
+ {
+ public class DataItem : CgibinMessageTemplateSendRequest.Types.DataItem
+ {
+ }
+ }
+
+ ///
+ /// 获取或设置用户唯一标识。
+ ///
+ [Newtonsoft.Json.JsonProperty("openid")]
+ [System.Text.Json.Serialization.JsonPropertyName("openid")]
+ public string OpenId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置城市服务分配的模板 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("biz_template_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("biz_template_id")]
+ public string BusinessTemplateId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置结果页样式 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("result_page_style_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("result_page_style_id")]
+ public string? ResultPageStyleId { get; set; }
+
+ ///
+ /// 获取或设置办事记录样式 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("deal_msg_style_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("deal_msg_style_id")]
+ public string? DealMessageStyleId { get; set; }
+
+ ///
+ /// 获取或设置页卡样式 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("card_style_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("card_style_id")]
+ public string? CardStyleId { get; set; }
+
+ ///
+ /// 获取或设置订单号。
+ ///
+ [Newtonsoft.Json.JsonProperty("order_no")]
+ [System.Text.Json.Serialization.JsonPropertyName("order_no")]
+ public string OrderNumber { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置跳转链接 URL。
+ ///
+ [Newtonsoft.Json.JsonProperty("url")]
+ [System.Text.Json.Serialization.JsonPropertyName("url")]
+ public string? Url { get; set; }
+
+ ///
+ /// 获取或设置消息正文。
+ ///
+ [Newtonsoft.Json.JsonProperty("data")]
+ [System.Text.Json.Serialization.JsonPropertyName("data")]
+ public IDictionary? Data { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/CityService/CityServiceSendMessageDataResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/CityService/CityServiceSendMessageDataResponse.cs
new file mode 100644
index 00000000..4964bb69
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/CityService/CityServiceSendMessageDataResponse.cs
@@ -0,0 +1,18 @@
+using System;
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.Api.Models
+{
+ ///
+ /// 表示 [POST] /cityservice/sendmsgdata 接口的响应。
+ ///
+ public class CityServiceSendMessageDataResponse : WechatApiResponse
+ {
+ ///
+ /// 获取或设置结果页 URL。
+ ///
+ [Newtonsoft.Json.JsonProperty("result_page_url")]
+ [System.Text.Json.Serialization.JsonPropertyName("result_page_url")]
+ public string? ResultPageUrl { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/IntpRealName/IntpRealNameCheckRealNameInfoRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/IntpRealName/IntpRealNameCheckRealNameInfoRequest.cs
new file mode 100644
index 00000000..0e105184
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/IntpRealName/IntpRealNameCheckRealNameInfoRequest.cs
@@ -0,0 +1,47 @@
+using System;
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.Api.Models
+{
+ ///
+ /// 表示 [POST] /intp/realname/checkrealnameinfo 接口的请求。
+ ///
+ public class IntpRealNameCheckRealNameInfoRequest : WechatApiRequest
+ {
+ ///
+ /// 获取或设置用户唯一标识。
+ ///
+ [Newtonsoft.Json.JsonProperty("openid")]
+ [System.Text.Json.Serialization.JsonPropertyName("openid")]
+ public string OpenId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置需要校验的姓名。
+ ///
+ [Newtonsoft.Json.JsonProperty("real_name")]
+ [System.Text.Json.Serialization.JsonPropertyName("real_name")]
+ public string RealName { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置需要校验的证件类型。
+ /// 默认值:1
+ ///
+ [Newtonsoft.Json.JsonProperty("cred_type")]
+ [System.Text.Json.Serialization.JsonPropertyName("cred_type")]
+ public int CredentialType { get; set; } = 1;
+
+ ///
+ /// 获取或设置需要校验的证件号。
+ ///
+ [Newtonsoft.Json.JsonProperty("cred_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("cred_id")]
+ public string CredentialId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置通过小程序回跳获取的 Code。
+ ///
+ [Newtonsoft.Json.JsonProperty("code")]
+ [System.Text.Json.Serialization.JsonPropertyName("code")]
+ public string Code { get; set; } = string.Empty;
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/IntpRealName/IntpRealNameCheckRealNameInfoResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/IntpRealName/IntpRealNameCheckRealNameInfoResponse.cs
new file mode 100644
index 00000000..70cde4af
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/IntpRealName/IntpRealNameCheckRealNameInfoResponse.cs
@@ -0,0 +1,25 @@
+using System;
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.Api.Models
+{
+ ///
+ /// 表示 [POST] /intp/realname/checkrealnameinfo 接口的响应。
+ ///
+ public class IntpRealNameCheckRealNameInfoResponse : IntpMarketCodeActiveCodeQueryResponse
+ {
+ ///
+ /// 获取或设置 OpenId 验证结果,使用分号分隔。
+ ///
+ [Newtonsoft.Json.JsonProperty("verify_openid")]
+ [System.Text.Json.Serialization.JsonPropertyName("verify_openid")]
+ public string VerifyOpenIdResults { get; set; } = default!;
+
+ ///
+ /// 获取或设置实名验证结果。
+ ///
+ [Newtonsoft.Json.JsonProperty("verify_real_name")]
+ [System.Text.Json.Serialization.JsonPropertyName("verify_real_name")]
+ public string? VerifyRealNameResult { get; set; }
+ }
+}