diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Extensions/WechatApiClientExecuteWxaExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Extensions/WechatApiClientExecuteWxaExtensions.cs index ff6b6a49..7093d5c1 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.Api/Extensions/WechatApiClientExecuteWxaExtensions.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Extensions/WechatApiClientExecuteWxaExtensions.cs @@ -940,6 +940,26 @@ namespace SKIT.FlurlHttpClient.Wechat.Api return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); } + + /// + /// 异步调用 [POST] /wxa/servicemarket/service/login_auth 接口。 + /// REF: https://developers.weixin.qq.com/doc/oplatform/service_market/interface/value_added/servicemarket_login_auth.html + /// + /// + /// + /// + /// + public static async Task ExecuteWxaServiceMarketServiceLoginAuthAsync(this WechatApiClient client, Models.WxaServiceMarketServiceLoginAuthRequest 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, "wxa", "servicemarket", "service", "login_auth") + .SetQueryParam("access_token", request.ComponentAccessToken); + + return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } #endregion #region ShortLink diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/CgibinExpress/Business/CgibinExpressBusinessOrderAddRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/CgibinExpress/Business/CgibinExpressBusinessOrderAddRequest.cs index d1c3709f..839c436d 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/CgibinExpress/Business/CgibinExpressBusinessOrderAddRequest.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/CgibinExpress/Business/CgibinExpressBusinessOrderAddRequest.cs @@ -1,4 +1,4 @@ -using System.Collections.Generic; +using System.Collections.Generic; namespace SKIT.FlurlHttpClient.Wechat.Api.Models { @@ -279,7 +279,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Api.Models /// [Newtonsoft.Json.JsonProperty("openid")] [System.Text.Json.Serialization.JsonPropertyName("openid")] - public string? OpenID { get; set; } + public string? OpenId { get; set; } /// /// 获取或设置快递公司 ID。 diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/CgibinExpress/Business/CgibinExpressBusinessOrderCancelRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/CgibinExpress/Business/CgibinExpressBusinessOrderCancelRequest.cs index b4871740..a9ec8c7e 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/CgibinExpress/Business/CgibinExpressBusinessOrderCancelRequest.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/CgibinExpress/Business/CgibinExpressBusinessOrderCancelRequest.cs @@ -1,4 +1,4 @@ -namespace SKIT.FlurlHttpClient.Wechat.Api.Models +namespace SKIT.FlurlHttpClient.Wechat.Api.Models { /// /// 表示 [POST] /cgi-bin/express/business/order/cancel 接口的请求。 @@ -17,7 +17,7 @@ /// [Newtonsoft.Json.JsonProperty("openid")] [System.Text.Json.Serialization.JsonPropertyName("openid")] - public string? OpenID { get; set; } + public string? OpenId { get; set; } /// /// 获取或设置快递公司 ID。 diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/CgibinExpress/Business/CgibinExpressBusinessOrderGetRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/CgibinExpress/Business/CgibinExpressBusinessOrderGetRequest.cs index bb1d177d..759e891f 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/CgibinExpress/Business/CgibinExpressBusinessOrderGetRequest.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/CgibinExpress/Business/CgibinExpressBusinessOrderGetRequest.cs @@ -1,4 +1,4 @@ -namespace SKIT.FlurlHttpClient.Wechat.Api.Models +namespace SKIT.FlurlHttpClient.Wechat.Api.Models { /// /// 表示 [POST] /cgi-bin/express/business/order/get 接口的请求。 @@ -17,7 +17,7 @@ /// [Newtonsoft.Json.JsonProperty("openid")] [System.Text.Json.Serialization.JsonPropertyName("openid")] - public string? OpenID { get; set; } + public string? OpenId { get; set; } /// /// 获取或设置快递公司 ID。 diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/CgibinExpress/Delivery/CgibinExpressDeliveryTemplatePreviewRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/CgibinExpress/Delivery/CgibinExpressDeliveryTemplatePreviewRequest.cs index 29e019f2..db7dccaa 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/CgibinExpress/Delivery/CgibinExpressDeliveryTemplatePreviewRequest.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/CgibinExpress/Delivery/CgibinExpressDeliveryTemplatePreviewRequest.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Linq; @@ -69,7 +69,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Api.Models /// [Newtonsoft.Json.JsonProperty("openid")] [System.Text.Json.Serialization.JsonPropertyName("openid")] - public string? OpenID { get; set; } + public string? OpenId { get; set; } /// /// 获取或设置快递公司 ID。 diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/CgibinExpress/LocalBusiness/CgibinExpressLocalBusinessOrderPreAddRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/CgibinExpress/LocalBusiness/CgibinExpressLocalBusinessOrderPreAddRequest.cs index ae245686..654d6091 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/CgibinExpress/LocalBusiness/CgibinExpressLocalBusinessOrderPreAddRequest.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/CgibinExpress/LocalBusiness/CgibinExpressLocalBusinessOrderPreAddRequest.cs @@ -1,4 +1,4 @@ -using System.Collections.Generic; +using System.Collections.Generic; namespace SKIT.FlurlHttpClient.Wechat.Api.Models { @@ -380,7 +380,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Api.Models /// [Newtonsoft.Json.JsonProperty("openid")] [System.Text.Json.Serialization.JsonPropertyName("openid")] - public string OpenID { get; set; } = string.Empty; + public string OpenId { get; set; } = string.Empty; /// /// 获取或设置发件人信息。 diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Product/Coupon/ProductCouponPushRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Product/Coupon/ProductCouponPushRequest.cs index ce1d95a2..768dabd5 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Product/Coupon/ProductCouponPushRequest.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Product/Coupon/ProductCouponPushRequest.cs @@ -1,4 +1,4 @@ -namespace SKIT.FlurlHttpClient.Wechat.Api.Models +namespace SKIT.FlurlHttpClient.Wechat.Api.Models { /// /// 表示 [POST] /product/coupon/push 接口的请求。 @@ -17,6 +17,6 @@ /// [Newtonsoft.Json.JsonProperty("openid")] [System.Text.Json.Serialization.JsonPropertyName("openid")] - public string OpenID { get; set; } = string.Empty; + public string OpenId { get; set; } = string.Empty; } } diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Wxa/ServiceMarket/WxaServiceMarketServiceLoginAuthRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Wxa/ServiceMarket/WxaServiceMarketServiceLoginAuthRequest.cs new file mode 100644 index 00000000..376fa2f0 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Wxa/ServiceMarket/WxaServiceMarketServiceLoginAuthRequest.cs @@ -0,0 +1,22 @@ +namespace SKIT.FlurlHttpClient.Wechat.Api.Models +{ + /// + /// 表示 [POST] /wxa/servicemarket/service/login_auth 接口的请求。 + /// + public class WxaServiceMarketServiceLoginAuthRequest : WechatApiRequest, IInferable + { + /// + /// 获取或设置第三方平台 AccessToken。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public string ComponentAccessToken { 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/Wxa/ServiceMarket/WxaServiceMarketServiceLoginAuthResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Wxa/ServiceMarket/WxaServiceMarketServiceLoginAuthResponse.cs new file mode 100644 index 00000000..86359809 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Wxa/ServiceMarket/WxaServiceMarketServiceLoginAuthResponse.cs @@ -0,0 +1,52 @@ +namespace SKIT.FlurlHttpClient.Wechat.Api.Models +{ + /// + /// 表示 [POST] /wxa/servicemarket/service/login_auth 接口的响应。 + /// + public class WxaServiceMarketServiceLoginAuthResponse : WechatApiResponse + { + /// + /// 获取或设置订单 ID。 + /// + [Newtonsoft.Json.JsonProperty("order_id")] + [System.Text.Json.Serialization.JsonPropertyName("order_id")] + [System.Text.Json.Serialization.JsonNumberHandling(System.Text.Json.Serialization.JsonNumberHandling.AllowReadingFromString)] + public long OrderId { get; set; } + + /// + /// 获取或设置小程序 AppId。 + /// + [Newtonsoft.Json.JsonProperty("appid")] + [System.Text.Json.Serialization.JsonPropertyName("appid")] + public string? AppId { get; set; } + + /// + /// 获取或设置用户 OpenId。 + /// + [Newtonsoft.Json.JsonProperty("openid")] + [System.Text.Json.Serialization.JsonPropertyName("openid")] + public string? OpenId { get; set; } + + /// + /// 获取或设置购买的服务 ID。 + /// + [Newtonsoft.Json.JsonProperty("service_id")] + [System.Text.Json.Serialization.JsonPropertyName("service_id")] + [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.NumericalStringReadOnlyConverter))] + public string ServiceId { get; set; } = default!; + + /// + /// 获取或设置购买的 SKU ID。 + /// + [Newtonsoft.Json.JsonProperty("sku_id")] + [System.Text.Json.Serialization.JsonPropertyName("sku_id")] + public string SKUId { get; set; } = default!; + + /// + /// 获取或设置购买的规格 ID。 + /// + [Newtonsoft.Json.JsonProperty("spec_id")] + [System.Text.Json.Serialization.JsonPropertyName("spec_id")] + public string SpecificationId { get; set; } = default!; + } +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/Wxa/ServiceMarket/WxaServiceMarketServiceLoginAuthRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/Wxa/ServiceMarket/WxaServiceMarketServiceLoginAuthRequest.json new file mode 100644 index 00000000..655d51a5 --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/Wxa/ServiceMarket/WxaServiceMarketServiceLoginAuthRequest.json @@ -0,0 +1,3 @@ +{ + "code": "xxxx" +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/Wxa/ServiceMarket/WxaServiceMarketServiceLoginAuthResponse.json b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/Wxa/ServiceMarket/WxaServiceMarketServiceLoginAuthResponse.json new file mode 100644 index 00000000..84d019f2 --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/Wxa/ServiceMarket/WxaServiceMarketServiceLoginAuthResponse.json @@ -0,0 +1,10 @@ +{ + "errcode": 0, + "errmsg": "ok", + "order_id": 123, + "openid": "xxx", + "appid": "xxxx", + "service_id": 123, + "sku_id": "xxx", + "spec_id": "yyy" +}