diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Events/VehicleParking/VehicleEntranceStateChangeResource.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Events/VehicleParking/VehicleEntranceStateChangeResource.cs new file mode 100644 index 00000000..d0668aac --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Events/VehicleParking/VehicleEntranceStateChangeResource.cs @@ -0,0 +1,99 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Events +{ + /// + /// 表示 VEHICLE.ENTRANCE_STATE_CHANGE 通知的数据。 + /// + public class VehicleEntranceStateChangeResource : WechatTenpayEvent.Types.IDecryptedResource + { + /// + /// 获取或设置微信商户号。 + /// + [Newtonsoft.Json.JsonProperty("sp_mchid")] + [System.Text.Json.Serialization.JsonPropertyName("sp_mchid")] + public string MerchantId { get; set; } = default!; + + /// + /// 获取或设置子商户号。 + /// + [Newtonsoft.Json.JsonProperty("sub_mchid")] + [System.Text.Json.Serialization.JsonPropertyName("sub_mchid")] + public string? SubMerchantId { get; set; } + + /// + /// 获取或设置商户入场 ID。 + /// + [Newtonsoft.Json.JsonProperty("out_parking_no")] + [System.Text.Json.Serialization.JsonPropertyName("out_parking_no")] + public string OutParkingId { get; set; } = default!; + + /// + /// 获取或设置停车入场 ID。 + /// + [Newtonsoft.Json.JsonProperty("parking_id")] + [System.Text.Json.Serialization.JsonPropertyName("parking_id")] + public string ParkingId { get; set; } = default!; + + /// + /// 获取或设置车牌号。 + /// + [Newtonsoft.Json.JsonProperty("plate_number")] + [System.Text.Json.Serialization.JsonPropertyName("plate_number")] + public string PlateNumber { get; set; } = default!; + + /// + /// 获取或设置车牌颜色。 + /// + [Newtonsoft.Json.JsonProperty("plate_color")] + [System.Text.Json.Serialization.JsonPropertyName("plate_color")] + public string PlateColor { get; set; } = default!; + + /// + /// 获取或设置入场时间。 + /// + [Newtonsoft.Json.JsonProperty("start_time")] + [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.RFC3339DateTimeOffsetConverter))] + [System.Text.Json.Serialization.JsonPropertyName("start_time")] + [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.RFC3339DateTimeOffsetConverter))] + public DateTimeOffset StartTime { get; set; } + + /// + /// 获取或设置停车场名称。 + /// + [Newtonsoft.Json.JsonProperty("parking_name")] + [System.Text.Json.Serialization.JsonPropertyName("parking_name")] + public string ParkingName { get; set; } = default!; + + /// + /// 获取或设置免费时长(单位:秒)。 + /// + [Newtonsoft.Json.JsonProperty("free_duration")] + [System.Text.Json.Serialization.JsonPropertyName("free_duration")] + public int FreeDuration { get; set; } + + /// + /// 获取或设置停车入场状态。 + /// + [Newtonsoft.Json.JsonProperty("parking_state")] + [System.Text.Json.Serialization.JsonPropertyName("parking_state")] + public string ParkingState { get; set; } = default!; + + /// + /// 获取或设置不可用原因。 + /// + [Newtonsoft.Json.JsonProperty("blocked_state_description")] + [System.Text.Json.Serialization.JsonPropertyName("blocked_state_description")] + public string? BlockReason { get; set; } + + /// + /// 获取或设置状态变更时间。 + /// + [Newtonsoft.Json.JsonProperty("state_update_time")] + [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.RFC3339DateTimeOffsetConverter))] + [System.Text.Json.Serialization.JsonPropertyName("state_update_time")] + [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.RFC3339DateTimeOffsetConverter))] + public DateTimeOffset ParkingStateUpdateTime { get; set; } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Events/VehicleParking/VehicleTransactionResource.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Events/VehicleParking/VehicleTransactionResource.cs new file mode 100644 index 00000000..70f25580 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Events/VehicleParking/VehicleTransactionResource.cs @@ -0,0 +1,182 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Events +{ + /// + /// 表示 TRANSACTION.SUCCESS(仅限微信支付分停车服务)通知的数据。 + /// 表示 TRANSACTION.FAIL(仅限微信支付分停车服务)通知的数据。 + /// 表示 TRANSACTION.PAY_BACK(仅限微信支付分停车服务)通知的数据。 + /// + public class VehicleTransactionResource : WechatTenpayEvent.Types.IDecryptedResource + { + public static class Types + { + public class Payer : Models.GetVehicleTransactionByOutTradeNumberResponse.Types.Payer + { + } + + public class Amount : Models.GetVehicleTransactionByOutTradeNumberResponse.Types.Amount + { + } + + public class Parking : Models.GetVehicleTransactionByOutTradeNumberResponse.Types.Parking + { + } + + public class Promotion : Models.GetVehicleTransactionByOutTradeNumberResponse.Types.Promotion + { + } + } + + internal static class Converters + { + internal class NewtonsoftJsonYesOrNoConverter : Models.CreateVehicleTransactionParkingRequest.Converters.NewtonsoftJsonYesOrNoConverter + { + } + + internal class SystemTextJsonYesOrNoConverter : Models.CreateVehicleTransactionParkingRequest.Converters.SystemTextJsonYesOrNoConverter + { + } + } + + /// + /// 获取或设置微信商户号。 + /// + [Newtonsoft.Json.JsonProperty("sp_mchid")] + [System.Text.Json.Serialization.JsonPropertyName("sp_mchid")] + public string MerchantId { get; set; } = default!; + + /// + /// 获取或设置子商户号。 + /// + [Newtonsoft.Json.JsonProperty("sub_mchid")] + [System.Text.Json.Serialization.JsonPropertyName("sub_mchid")] + public string? SubMerchantId { get; set; } + + /// + /// 获取或设置微信 AppId。 + /// + [Newtonsoft.Json.JsonProperty("appid")] + [System.Text.Json.Serialization.JsonPropertyName("appid")] + public string AppId { get; set; } = default!; + + /// + /// 获取或设置子商户 AppId。 + /// + [Newtonsoft.Json.JsonProperty("sub_appid")] + [System.Text.Json.Serialization.JsonPropertyName("sub_appid")] + public string? SubAppId { get; set; } + + /// + /// 获取或设置服务描述。 + /// + [Newtonsoft.Json.JsonProperty("description")] + [System.Text.Json.Serialization.JsonPropertyName("description")] + public string Description { get; set; } = default!; + + /// + /// 获取或设置商户订单号。 + /// + [Newtonsoft.Json.JsonProperty("out_trade_no")] + [System.Text.Json.Serialization.JsonPropertyName("out_trade_no")] + public string OutTradeNumber { get; set; } = default!; + + /// + /// 获取或设置微信支付订单号。 + /// + [Newtonsoft.Json.JsonProperty("transaction_id")] + [System.Text.Json.Serialization.JsonPropertyName("transaction_id")] + public string? TransactionId { get; set; } + + /// + /// 获取或设置交易状态。 + /// + [Newtonsoft.Json.JsonProperty("trade_state")] + [System.Text.Json.Serialization.JsonPropertyName("trade_state")] + public string TradeState { get; set; } = default!; + + /// + /// 获取或设置交易状态描述。 + /// + [Newtonsoft.Json.JsonProperty("trade_state_description")] + [System.Text.Json.Serialization.JsonPropertyName("trade_state_description")] + public string TradeStateDescription { get; set; } = default!; + + /// + /// 获取或设置付款银行类型。 + /// + [Newtonsoft.Json.JsonProperty("bank_type")] + [System.Text.Json.Serialization.JsonPropertyName("bank_type")] + public string? BankType { get; set; } + + /// + /// 获取或设置附加数据。 + /// + [Newtonsoft.Json.JsonProperty("attach")] + [System.Text.Json.Serialization.JsonPropertyName("attach")] + public string? Attachment { get; set; } + + /// + /// 获取或设置用户是否还款。 + /// + [Newtonsoft.Json.JsonProperty("user_repaid")] + [Newtonsoft.Json.JsonConverter(typeof(Converters.NewtonsoftJsonYesOrNoConverter))] + [System.Text.Json.Serialization.JsonPropertyName("user_repaid")] + [System.Text.Json.Serialization.JsonConverter(typeof(Converters.SystemTextJsonYesOrNoConverter))] + public bool? IsUserRepaid { get; set; } + + /// + /// 获取或设置交易场景。 + /// + [Newtonsoft.Json.JsonProperty("trade_scene")] + [System.Text.Json.Serialization.JsonPropertyName("trade_scene")] + public string TradeScene { get; set; } = default!; + + /// + /// 获取或设置支付完成时间。 + /// + [Newtonsoft.Json.JsonProperty("success_time")] + [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.RFC3339NullableDateTimeOffsetConverter))] + [System.Text.Json.Serialization.JsonPropertyName("success_time")] + [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.RFC3339NullableDateTimeOffsetConverter))] + public DateTimeOffset? SuccessTime { get; set; } + + /// + /// 获取或设置订单创建时间。 + /// + [Newtonsoft.Json.JsonProperty("create_time")] + [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.RFC3339DateTimeOffsetConverter))] + [System.Text.Json.Serialization.JsonPropertyName("create_time")] + [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.RFC3339DateTimeOffsetConverter))] + public DateTimeOffset CreateTime { get; set; } + + /// + /// 获取或设置支付者信息。 + /// + [Newtonsoft.Json.JsonProperty("payer")] + [System.Text.Json.Serialization.JsonPropertyName("payer")] + public Types.Payer? Payer { get; set; } + + /// + /// 获取或设置金额信息。 + /// + [Newtonsoft.Json.JsonProperty("amount")] + [System.Text.Json.Serialization.JsonPropertyName("amount")] + public Types.Amount Amount { get; set; } = default!; + + /// + /// 获取或设置停车信息。 + /// + [Newtonsoft.Json.JsonProperty("parking_info")] + [System.Text.Json.Serialization.JsonPropertyName("parking_info")] + public Types.Parking? Parking { get; set; } + + /// + /// 获取或设置优惠信息。 + /// + [Newtonsoft.Json.JsonProperty("promotion_detail")] + [System.Text.Json.Serialization.JsonPropertyName("promotion_detail")] + public Types.Promotion[]? PromotionList { get; set; } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecuteVehicleExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecuteVehicleExtensions.cs new file mode 100644 index 00000000..3c946ddb --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecuteVehicleExtensions.cs @@ -0,0 +1,107 @@ +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.TenpayV3 +{ + /// + /// 为 提供商户微信支付分停车服务相关的 API 扩展方法。 + /// + public static class WechatTenpayClientExecuteVehicleExtensions + { + /// + /// 异步调用 [GET] /vehicle/parking/services/find 接口。 + /// REF: https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter8_8_1.shtml + /// REF: https://pay.weixin.qq.com/wiki/doc/apiv3_partner/apis/chapter8_8_1.shtml + /// + /// + /// + /// + /// + public static async Task ExecuteGetVehicleParkingServiceAsync(this WechatTenpayClient client, Models.GetVehicleParkingServiceRequest 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.Get, "vehicle", "parking", "services", "find") + .SetQueryParam("appid", request.AppId) + .SetQueryParam("plate_number", request.PlateNumber) + .SetQueryParam("plate_color", request.PlateColor) + .SetQueryParam("openid", request.OpenId); + + if (!string.IsNullOrEmpty(request.SubMerchantId)) + flurlReq.SetQueryParam("sub_mchid", request.SubMerchantId); + + return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } + + /// + /// 异步调用 [POST] /vehicle/parking/parkings 接口。 + /// REF: https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter8_8_2.shtml + /// REF: https://pay.weixin.qq.com/wiki/doc/apiv3_partner/apis/chapter8_8_2.shtml + /// + /// + /// + /// + /// + public static async Task ExecuteCreateVehicleParkingAsync(this WechatTenpayClient client, Models.CreateVehicleParkingRequest 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, "vehicle", "parking", "parkings"); + + return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } + + /// + /// 异步调用 [POST] /vehicle/transactions/parking 接口。 + /// REF: https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter8_8_3.shtml + /// REF: https://pay.weixin.qq.com/wiki/doc/apiv3_partner/apis/chapter8_8_3.shtml + /// + /// + /// + /// + /// + public static async Task ExecuteCreateVehicleTransactionParkingAsync(this WechatTenpayClient client, Models.CreateVehicleTransactionParkingRequest 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, "vehicle", "transactions", "parking"); + + return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } + + /// + /// 异步调用 [GET] /vehicle/transactions/out-trade-no/{out_trade_no} 接口。 + /// REF: https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter8_8_4.shtml + /// REF: https://pay.weixin.qq.com/wiki/doc/apiv3_partner/apis/chapter8_8_4.shtml + /// + /// + /// + /// + /// + public static async Task ExecuteGetVehicleTransactionByOutTradeNumberAsync(this WechatTenpayClient client, Models.GetVehicleTransactionByOutTradeNumberRequest 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.Get, "vehicle", "transactions", "out-trade-no", request.OutTradeNumber); + + if (!string.IsNullOrEmpty(request.SubMerchantId)) + flurlReq.SetQueryParam("sub_mchid", request.SubMerchantId); + + return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/BrandProfitSharing/CreateBrandProfitSharingOrderResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/BrandProfitSharing/CreateBrandProfitSharingOrderResponse.cs index b15892da..054c530d 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/BrandProfitSharing/CreateBrandProfitSharingOrderResponse.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/BrandProfitSharing/CreateBrandProfitSharingOrderResponse.cs @@ -8,5 +8,11 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models /// public class CreateBrandProfitSharingOrderResponse : GetBrandProfitSharingOrderByOutOrderNumberResponse { + /// + /// 获取或设置品牌主商户号 。 + /// + [Newtonsoft.Json.JsonProperty("brand_mchid")] + [System.Text.Json.Serialization.JsonPropertyName("brand_mchid")] + public string BrandMerchantId { get; set; } = default!; } } diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/MarketingBusifavor/Callbacks/GetMarketingBusifavorCallbackResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/MarketingBusifavor/Callbacks/GetMarketingBusifavorCallbackResponse.cs index a8072d1a..3d5b80b8 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/MarketingBusifavor/Callbacks/GetMarketingBusifavorCallbackResponse.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/MarketingBusifavor/Callbacks/GetMarketingBusifavorCallbackResponse.cs @@ -9,7 +9,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models public class GetMarketingBusifavorCallbackResponse : WechatTenpayResponse { /// - /// 获取或设置商户号。 + /// 获取或设置微信商户号。 /// [Newtonsoft.Json.JsonProperty("mchid")] [System.Text.Json.Serialization.JsonPropertyName("mchid")] diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/MarketingBusifavor/Callbacks/UpdateMarketingBusifavorCallbackResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/MarketingBusifavor/Callbacks/UpdateMarketingBusifavorCallbackResponse.cs index a938a855..60bf923d 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/MarketingBusifavor/Callbacks/UpdateMarketingBusifavorCallbackResponse.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/MarketingBusifavor/Callbacks/UpdateMarketingBusifavorCallbackResponse.cs @@ -9,7 +9,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models public class UpdateMarketingBusifavorCallbackResponse : WechatTenpayResponse { /// - /// 获取或设置商户号。 + /// 获取或设置微信商户号。 /// [Newtonsoft.Json.JsonProperty("mchid")] [System.Text.Json.Serialization.JsonPropertyName("mchid")] diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/MarketingPayGiftActivity/Merchants/AddMarketingPayGiftActivityMerchantResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/MarketingPayGiftActivity/Merchants/AddMarketingPayGiftActivityMerchantResponse.cs index eb06ecd3..22c58541 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/MarketingPayGiftActivity/Merchants/AddMarketingPayGiftActivityMerchantResponse.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/MarketingPayGiftActivity/Merchants/AddMarketingPayGiftActivityMerchantResponse.cs @@ -13,7 +13,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models public class InvalidMerchant { /// - /// 获取或设置商户号。 + /// 获取或设置微信商户号。 /// [Newtonsoft.Json.JsonProperty("mchid")] [System.Text.Json.Serialization.JsonPropertyName("mchid")] diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/MarketingPayGiftActivity/Merchants/QueryMarketingPayGiftActivityMerchantsResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/MarketingPayGiftActivity/Merchants/QueryMarketingPayGiftActivityMerchantsResponse.cs index 150b8c41..b3eb13c7 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/MarketingPayGiftActivity/Merchants/QueryMarketingPayGiftActivityMerchantsResponse.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/MarketingPayGiftActivity/Merchants/QueryMarketingPayGiftActivityMerchantsResponse.cs @@ -13,7 +13,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models public class Merchant { /// - /// 获取或设置商户号。 + /// 获取或设置微信商户号。 /// [Newtonsoft.Json.JsonProperty("mchid")] [System.Text.Json.Serialization.JsonPropertyName("mchid")] diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/PayTransactions/GetPayTransactionByOutTradeNumberResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/PayTransactions/GetPayTransactionByOutTradeNumberResponse.cs index 21c08f9d..67bb12e7 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/PayTransactions/GetPayTransactionByOutTradeNumberResponse.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/PayTransactions/GetPayTransactionByOutTradeNumberResponse.cs @@ -109,7 +109,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models /// [Newtonsoft.Json.JsonProperty("coupon_id")] [System.Text.Json.Serialization.JsonPropertyName("coupon_id")] - public string Id { get; set; } = default!; + public string CouponId { get; set; } = default!; /// /// 获取或设置优惠名称。 diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/Transfer/Batches/CreateTransferBatchResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/Transfer/Batches/CreateTransferBatchResponse.cs index ed3cf0c8..f333b53a 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/Transfer/Batches/CreateTransferBatchResponse.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/Transfer/Batches/CreateTransferBatchResponse.cs @@ -29,6 +29,6 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.RFC3339DateTimeOffsetConverter))] [System.Text.Json.Serialization.JsonPropertyName("create_time")] [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.RFC3339DateTimeOffsetConverter))] - public DateTimeOffset CreateTime { get; set; } = default!; + public DateTimeOffset CreateTime { get; set; } } } diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/Vehicle/Parking/CreateVehicleParkingRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/Vehicle/Parking/CreateVehicleParkingRequest.cs new file mode 100644 index 00000000..f24a9b71 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/Vehicle/Parking/CreateVehicleParkingRequest.cs @@ -0,0 +1,69 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models +{ + /// + /// 表示 [POST] /vehicle/parking/parkings 接口的请求。 + /// + public class CreateVehicleParkingRequest : WechatTenpayRequest + { + /// + /// 获取或设置子商户号。 + /// + [Newtonsoft.Json.JsonProperty("sub_mchid")] + [System.Text.Json.Serialization.JsonPropertyName("sub_mchid")] + public string? SubMerchantId { get; set; } + + /// + /// 获取或设置商户入场 ID。 + /// + [Newtonsoft.Json.JsonProperty("out_parking_no")] + [System.Text.Json.Serialization.JsonPropertyName("out_parking_no")] + public string OutParkingNumber { get; set; } = string.Empty; + + /// + /// 获取或设置车牌号。 + /// + [Newtonsoft.Json.JsonProperty("plate_number")] + [System.Text.Json.Serialization.JsonPropertyName("plate_number")] + public string PlateNumber { get; set; } = string.Empty; + + /// + /// 获取或设置车牌颜色。 + /// + [Newtonsoft.Json.JsonProperty("plate_color")] + [System.Text.Json.Serialization.JsonPropertyName("plate_color")] + public string PlateColor { get; set; } = string.Empty; + + /// + /// 获取或设置回调通知地址。 + /// + [Newtonsoft.Json.JsonProperty("notify_url")] + [System.Text.Json.Serialization.JsonPropertyName("notify_url")] + public string? NotifyUrl { get; set; } + + /// + /// 获取或设置入场时间。 + /// + [Newtonsoft.Json.JsonProperty("start_time")] + [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.RFC3339DateTimeOffsetConverter))] + [System.Text.Json.Serialization.JsonPropertyName("start_time")] + [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.RFC3339DateTimeOffsetConverter))] + public DateTimeOffset StartTime { get; set; } + + /// + /// 获取或设置停车场名称。 + /// + [Newtonsoft.Json.JsonProperty("parking_name")] + [System.Text.Json.Serialization.JsonPropertyName("parking_name")] + public string ParkingName { get; set; } = string.Empty; + + /// + /// 获取或设置免费时长(单位:秒)。 + /// + [Newtonsoft.Json.JsonProperty("free_duration")] + [System.Text.Json.Serialization.JsonPropertyName("free_duration")] + public int FreeDuration { get; set; } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/Vehicle/Parking/CreateVehicleParkingResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/Vehicle/Parking/CreateVehicleParkingResponse.cs new file mode 100644 index 00000000..22ce88cb --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/Vehicle/Parking/CreateVehicleParkingResponse.cs @@ -0,0 +1,76 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models +{ + /// + /// 表示 [POST] /vehicle/parking/parkings 接口的响应。 + /// + public class CreateVehicleParkingResponse : WechatTenpayResponse + { + /// + /// 获取或设置停车入场 ID。 + /// + [Newtonsoft.Json.JsonProperty("id")] + [System.Text.Json.Serialization.JsonPropertyName("id")] + public string ParkingId { get; set; } = default!; + + /// + /// 获取或设置商户入场 ID。 + /// + [Newtonsoft.Json.JsonProperty("out_parking_no")] + [System.Text.Json.Serialization.JsonPropertyName("out_parking_no")] + public string OutParkingNumber { get; set; } = default!; + + /// + /// 获取或设置车牌号。 + /// + [Newtonsoft.Json.JsonProperty("plate_number")] + [System.Text.Json.Serialization.JsonPropertyName("plate_number")] + public string PlateNumber { get; set; } = default!; + + /// + /// 获取或设置车牌颜色。 + /// + [Newtonsoft.Json.JsonProperty("plate_color")] + [System.Text.Json.Serialization.JsonPropertyName("plate_color")] + public string PlateColor { get; set; } = default!; + + /// + /// 获取或设置入场时间。 + /// + [Newtonsoft.Json.JsonProperty("start_time")] + [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.RFC3339DateTimeOffsetConverter))] + [System.Text.Json.Serialization.JsonPropertyName("start_time")] + [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.RFC3339DateTimeOffsetConverter))] + public DateTimeOffset StartTime { get; set; } + + /// + /// 获取或设置停车场名称。 + /// + [Newtonsoft.Json.JsonProperty("parking_name")] + [System.Text.Json.Serialization.JsonPropertyName("parking_name")] + public string ParkingName { get; set; } = default!; + + /// + /// 获取或设置免费时长(单位:秒)。 + /// + [Newtonsoft.Json.JsonProperty("free_duration")] + [System.Text.Json.Serialization.JsonPropertyName("free_duration")] + public int FreeDuration { get; set; } + + /// + /// 获取或设置停车入场状态。 + /// + [Newtonsoft.Json.JsonProperty("state")] + [System.Text.Json.Serialization.JsonPropertyName("state")] + public string State { get; set; } = default!; + + /// + /// 获取或设置不可用原因。 + /// + [Newtonsoft.Json.JsonProperty("block_reason")] + [System.Text.Json.Serialization.JsonPropertyName("block_reason")] + public string? BlockReason { get; set; } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/Vehicle/Parking/GetVehicleParkingServiceRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/Vehicle/Parking/GetVehicleParkingServiceRequest.cs new file mode 100644 index 00000000..440a8d3d --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/Vehicle/Parking/GetVehicleParkingServiceRequest.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models +{ + /// + /// 表示 [GET] /vehicle/parking/services/find 接口的请求。 + /// + public class GetVehicleParkingServiceRequest : WechatTenpayRequest + { + /// + /// 获取或设置微信 AppId。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public string AppId { get; set; } = string.Empty; + + /// + /// 获取或设置子商户号。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public string? SubMerchantId { get; set; } + + /// + /// 获取或设置车牌号。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public string PlateNumber { get; set; } = string.Empty; + + /// + /// 获取或设置车牌颜色。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public string PlateColor { get; set; } = string.Empty; + + /// + /// 获取或设置用户的 OpenId。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public string OpenId { get; set; } = string.Empty; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/Vehicle/Parking/GetVehicleParkingServiceResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/Vehicle/Parking/GetVehicleParkingServiceResponse.cs new file mode 100644 index 00000000..671e8b2e --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/Vehicle/Parking/GetVehicleParkingServiceResponse.cs @@ -0,0 +1,48 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models +{ + /// + /// 表示 [GET] /vehicle/parking/services/find 接口的响应。 + /// + public class GetVehicleParkingServiceResponse : WechatTenpayResponse + { + /// + /// 获取或设置车牌号。 + /// + [Newtonsoft.Json.JsonProperty("plate_number")] + [System.Text.Json.Serialization.JsonPropertyName("plate_number")] + public string PlateNumber { get; set; } = default!; + + /// + /// 获取或设置车牌颜色。 + /// + [Newtonsoft.Json.JsonProperty("plate_color")] + [System.Text.Json.Serialization.JsonPropertyName("plate_color")] + public string PlateColor { get; set; } = default!; + + /// + /// 获取或设置用户的 OpenId。 + /// + [Newtonsoft.Json.JsonProperty("openid")] + [System.Text.Json.Serialization.JsonPropertyName("openid")] + public string OpenId { get; set; } = default!; + + /// + /// 获取或设置服务状态。 + /// + [Newtonsoft.Json.JsonProperty("service_state")] + [System.Text.Json.Serialization.JsonPropertyName("service_state")] + public string ServiceState { get; set; } = default!; + + /// + /// 获取或设置服务开通时间。 + /// + [Newtonsoft.Json.JsonProperty("service_open_time")] + [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.RFC3339NullableDateTimeOffsetConverter))] + [System.Text.Json.Serialization.JsonPropertyName("service_open_time")] + [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.RFC3339NullableDateTimeOffsetConverter))] + public DateTimeOffset? ServiceOpenTime { get; set; } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/Vehicle/Transactions/CreateVehicleTransactionParkingRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/Vehicle/Transactions/CreateVehicleTransactionParkingRequest.cs new file mode 100644 index 00000000..2f28d222 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/Vehicle/Transactions/CreateVehicleTransactionParkingRequest.cs @@ -0,0 +1,270 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models +{ + /// + /// 表示 [POST] /vehicle/transactions/parking 接口的请求。 + /// + public class CreateVehicleTransactionParkingRequest : WechatTenpayRequest + { + public static class Types + { + public class Amount + { + /// + /// 获取或设置总金额(单位:分)。 + /// + [Newtonsoft.Json.JsonProperty("total")] + [System.Text.Json.Serialization.JsonPropertyName("total")] + public int Total { get; set; } + + /// + /// 获取或设置币种。 + /// 默认值:CNY + /// + [Newtonsoft.Json.JsonProperty("currency")] + [System.Text.Json.Serialization.JsonPropertyName("currency")] + public string Currency { get; set; } = "CNY"; + } + + public class Parking + { + /// + /// 获取或设置停车入场 ID。 + /// + [Newtonsoft.Json.JsonProperty("parking_id")] + [System.Text.Json.Serialization.JsonPropertyName("parking_id")] + public string ParkingId { get; set; } = string.Empty; + + /// + /// 获取或设置车牌号。 + /// + [Newtonsoft.Json.JsonProperty("plate_number")] + [System.Text.Json.Serialization.JsonPropertyName("plate_number")] + public string PlateNumber { get; set; } = string.Empty; + + /// + /// 获取或设置车牌颜色。 + /// + [Newtonsoft.Json.JsonProperty("plate_color")] + [System.Text.Json.Serialization.JsonPropertyName("plate_color")] + public string PlateColor { get; set; } = string.Empty; + + /// + /// 获取或设置入场时间。 + /// + [Newtonsoft.Json.JsonProperty("start_time")] + [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.RFC3339DateTimeOffsetConverter))] + [System.Text.Json.Serialization.JsonPropertyName("start_time")] + [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.RFC3339DateTimeOffsetConverter))] + public DateTimeOffset StartTime { get; set; } + + /// + /// 获取或设置出场时间。 + /// + [Newtonsoft.Json.JsonProperty("end_time")] + [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.RFC3339DateTimeOffsetConverter))] + [System.Text.Json.Serialization.JsonPropertyName("end_time")] + [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.RFC3339DateTimeOffsetConverter))] + public DateTimeOffset EndTime { get; set; } + + /// + /// 获取或设置停车场名称。 + /// + [Newtonsoft.Json.JsonProperty("parking_name")] + [System.Text.Json.Serialization.JsonPropertyName("parking_name")] + public string ParkingName { get; set; } = string.Empty; + + /// + /// 获取或设置计费时长(单位:秒)。 + /// + [Newtonsoft.Json.JsonProperty("charging_duration")] + [System.Text.Json.Serialization.JsonPropertyName("charging_duration")] + public int ChargingDuration { get; set; } + + /// + /// 获取或设置停车场设备 ID。 + /// + [Newtonsoft.Json.JsonProperty("device_id")] + [System.Text.Json.Serialization.JsonPropertyName("device_id")] + public string? DeviceId { get; set; } + } + } + + internal static class Converters + { + internal class NewtonsoftJsonYesOrNoConverter : Newtonsoft.Json.JsonConverter + { + public override bool CanRead + { + get { return true; } + } + + public override bool CanWrite + { + get { return true; } + } + + public override bool? ReadJson(Newtonsoft.Json.JsonReader reader, Type objectType, bool? existingValue, bool hasExistingValue, Newtonsoft.Json.JsonSerializer serializer) + { + if (reader.TokenType == Newtonsoft.Json.JsonToken.Null) + { + return existingValue; + } + else if (reader.TokenType == Newtonsoft.Json.JsonToken.Boolean) + { + return serializer.Deserialize(reader); + } + else if (reader.TokenType == Newtonsoft.Json.JsonToken.String) + { + string? value = serializer.Deserialize(reader); + if (value == null) + return existingValue; + + if ("Y".Equals(value)) + return true; + else if ("N".Equals(value)) + return false; + } + + throw new Newtonsoft.Json.JsonReaderException(); + } + + public override void WriteJson(Newtonsoft.Json.JsonWriter writer, bool? value, Newtonsoft.Json.JsonSerializer serializer) + { + if (value.HasValue) + writer.WriteValue(value.Value ? "Y" : "N"); + else + writer.WriteNull(); + } + } + + internal class SystemTextJsonYesOrNoConverter : System.Text.Json.Serialization.JsonConverter + { + public override bool? Read(ref System.Text.Json.Utf8JsonReader reader, Type typeToConvert, System.Text.Json.JsonSerializerOptions options) + { + if (reader.TokenType == System.Text.Json.JsonTokenType.Null) + { + return null; + } + else if (reader.TokenType == System.Text.Json.JsonTokenType.True) + { + return true; + } + else if (reader.TokenType == System.Text.Json.JsonTokenType.False) + { + return false; + } + else if (reader.TokenType == System.Text.Json.JsonTokenType.String) + { + string? value = reader.GetString(); + if (value == null) + return null; + + if ("Y".Equals(value)) + return true; + else if ("N".Equals(value)) + return false; + } + + throw new System.Text.Json.JsonException(); + } + + public override void Write(System.Text.Json.Utf8JsonWriter writer, bool? value, System.Text.Json.JsonSerializerOptions options) + { + if (value.HasValue) + writer.WriteStringValue(value.Value ? "Y" : "N"); + else + writer.WriteNullValue(); + } + } + } + + /// + /// 获取或设置微信 AppId。 + /// + [Newtonsoft.Json.JsonProperty("appid")] + [System.Text.Json.Serialization.JsonPropertyName("appid")] + public string AppId { get; set; } = string.Empty; + + /// + /// 获取或设置子商户 AppId。 + /// + [Newtonsoft.Json.JsonProperty("sub_appid")] + [System.Text.Json.Serialization.JsonPropertyName("sub_appid")] + public string? SubAppId { get; set; } + + /// + /// 获取或设置子商户号。 + /// + [Newtonsoft.Json.JsonProperty("sub_mchid")] + [System.Text.Json.Serialization.JsonPropertyName("sub_mchid")] + public string? SubMerchantId { get; set; } + + /// + /// 获取或设置服务描述。 + /// + [Newtonsoft.Json.JsonProperty("description")] + [System.Text.Json.Serialization.JsonPropertyName("description")] + public string Description { get; set; } = string.Empty; + + /// + /// 获取或设置商户订单号。 + /// + [Newtonsoft.Json.JsonProperty("out_trade_no")] + [System.Text.Json.Serialization.JsonPropertyName("out_trade_no")] + public string OutTradeNumber { get; set; } = string.Empty; + + /// + /// 获取或设置附加数据。 + /// + [Newtonsoft.Json.JsonProperty("attach")] + [System.Text.Json.Serialization.JsonPropertyName("attach")] + public string? Attachment { get; set; } + + /// + /// 获取或设置交易场景。 + /// + [Newtonsoft.Json.JsonProperty("trade_scene")] + [System.Text.Json.Serialization.JsonPropertyName("trade_scene")] + public string TradeScene { get; set; } = string.Empty; + + /// + /// 获取或设置回调通知地址。 + /// + [Newtonsoft.Json.JsonProperty("notify_url")] + [System.Text.Json.Serialization.JsonPropertyName("notify_url")] + public string? NotifyUrl { get; set; } + + /// + /// 获取或设置订单优惠标记。 + /// + [Newtonsoft.Json.JsonProperty("goods_tag")] + [System.Text.Json.Serialization.JsonPropertyName("goods_tag")] + public string? GoodsTag { get; set; } + + /// + /// 获取或设置是否分账。 + /// + [Newtonsoft.Json.JsonProperty("profit_sharing")] + [Newtonsoft.Json.JsonConverter(typeof(Converters.NewtonsoftJsonYesOrNoConverter))] + [System.Text.Json.Serialization.JsonPropertyName("profit_sharing")] + [System.Text.Json.Serialization.JsonConverter(typeof(Converters.SystemTextJsonYesOrNoConverter))] + public bool? IsProfitSharing { get; set; } + + /// + /// 获取或设置金额信息。 + /// + [Newtonsoft.Json.JsonProperty("amount")] + [System.Text.Json.Serialization.JsonPropertyName("amount")] + public Types.Amount Amount { get; set; } = new Types.Amount(); + + /// + /// 获取或设置停车信息。 + /// + [Newtonsoft.Json.JsonProperty("parking_info")] + [System.Text.Json.Serialization.JsonPropertyName("parking_info")] + public Types.Parking Parking { get; set; } = new Types.Parking(); + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/Vehicle/Transactions/CreateVehicleTransactionParkingResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/Vehicle/Transactions/CreateVehicleTransactionParkingResponse.cs new file mode 100644 index 00000000..b3c38136 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/Vehicle/Transactions/CreateVehicleTransactionParkingResponse.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models +{ + /// + /// 表示 [POST] /vehicle/transactions/parking 接口的响应。 + /// + public class CreateVehicleTransactionParkingResponse : GetVehicleTransactionByOutTradeNumberResponse + { + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/Vehicle/Transactions/GetVehicleTransactionByOutTradeNumberRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/Vehicle/Transactions/GetVehicleTransactionByOutTradeNumberRequest.cs new file mode 100644 index 00000000..54773394 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/Vehicle/Transactions/GetVehicleTransactionByOutTradeNumberRequest.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models +{ + /// + /// 表示 [GET] /vehicle/transactions/out-trade-no/{out_trade_no} 接口的请求。 + /// + public class GetVehicleTransactionByOutTradeNumberRequest : WechatTenpayRequest + { + /// + /// 获取或设置子商户号。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public string? SubMerchantId { get; set; } + + /// + /// 获取或设置商户订单号。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public string OutTradeNumber { get; set; } = string.Empty; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/Vehicle/Transactions/GetVehicleTransactionByOutTradeNumberResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/Vehicle/Transactions/GetVehicleTransactionByOutTradeNumberResponse.cs new file mode 100644 index 00000000..b8096b6f --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/Vehicle/Transactions/GetVehicleTransactionByOutTradeNumberResponse.cs @@ -0,0 +1,348 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models +{ + /// + /// 表示 [GET] /vehicle/transactions/out-trade-no/{out_trade_no} 接口的响应。 + /// + public class GetVehicleTransactionByOutTradeNumberResponse : WechatTenpayResponse + { + public static class Types + { + public class Payer + { + /// + /// 获取或设置用户的唯一标识。 + /// + [Newtonsoft.Json.JsonProperty("openid")] + [System.Text.Json.Serialization.JsonPropertyName("openid")] + public string OpenId { get; set; } = default!; + + /// + /// 获取或设置用户在子商户下唯一标识。 + /// + [Newtonsoft.Json.JsonProperty("sub_openid")] + [System.Text.Json.Serialization.JsonPropertyName("sub_openid")] + public string? SubOpenId { get; set; } + } + + public class Amount + { + /// + /// 获取或设置总金额(单位:分)。 + /// + [Newtonsoft.Json.JsonProperty("total")] + [System.Text.Json.Serialization.JsonPropertyName("total")] + public int Total { get; set; } + + /// + /// 获取或设置币种。 + /// + [Newtonsoft.Json.JsonProperty("currency")] + [System.Text.Json.Serialization.JsonPropertyName("currency")] + public string? Currency { get; set; } + + /// + /// 获取或设置用户支付金额(单位:分)。 + /// + [Newtonsoft.Json.JsonProperty("payer_total")] + [System.Text.Json.Serialization.JsonPropertyName("payer_total")] + public int? PayerTotal { get; set; } + + /// + /// 获取或设置折扣金额(单位:分)。 + /// + [Newtonsoft.Json.JsonProperty("discount_total")] + [System.Text.Json.Serialization.JsonPropertyName("discount_total")] + public int? DiscountTotal { get; set; } + } + + public class Parking + { + /// + /// 获取或设置停车入场 ID。 + /// + [Newtonsoft.Json.JsonProperty("parking_id")] + [System.Text.Json.Serialization.JsonPropertyName("parking_id")] + public string ParkingId { get; set; } = default!; + + /// + /// 获取或设置车牌号。 + /// + [Newtonsoft.Json.JsonProperty("plate_number")] + [System.Text.Json.Serialization.JsonPropertyName("plate_number")] + public string PlateNumber { get; set; } = default!; + + /// + /// 获取或设置车牌颜色。 + /// + [Newtonsoft.Json.JsonProperty("plate_color")] + [System.Text.Json.Serialization.JsonPropertyName("plate_color")] + public string PlateColor { get; set; } = default!; + + /// + /// 获取或设置入场时间。 + /// + [Newtonsoft.Json.JsonProperty("start_time")] + [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.RFC3339DateTimeOffsetConverter))] + [System.Text.Json.Serialization.JsonPropertyName("start_time")] + [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.RFC3339DateTimeOffsetConverter))] + public DateTimeOffset StartTime { get; set; } + + /// + /// 获取或设置出场时间。 + /// + [Newtonsoft.Json.JsonProperty("end_time")] + [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.RFC3339DateTimeOffsetConverter))] + [System.Text.Json.Serialization.JsonPropertyName("end_time")] + [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.RFC3339DateTimeOffsetConverter))] + public DateTimeOffset EndTime { get; set; } + + /// + /// 获取或设置停车场名称。 + /// + [Newtonsoft.Json.JsonProperty("parking_name")] + [System.Text.Json.Serialization.JsonPropertyName("parking_name")] + public string ParkingName { get; set; } = default!; + + /// + /// 获取或设置计费时长(单位:秒)。 + /// + [Newtonsoft.Json.JsonProperty("charging_duration")] + [System.Text.Json.Serialization.JsonPropertyName("charging_duration")] + public int ChargingDuration { get; set; } + + /// + /// 获取或设置停车场设备 ID。 + /// + [Newtonsoft.Json.JsonProperty("device_id")] + [System.Text.Json.Serialization.JsonPropertyName("device_id")] + public string? DeviceId { get; set; } + } + + public class Promotion + { + /// + /// 获取或设置券 ID。 + /// + [Newtonsoft.Json.JsonProperty("coupon_id")] + [System.Text.Json.Serialization.JsonPropertyName("coupon_id")] + public string CouponId { get; set; } = default!; + + /// + /// 获取或设置优惠名称。 + /// + [Newtonsoft.Json.JsonProperty("name")] + [System.Text.Json.Serialization.JsonPropertyName("name")] + public string? Name { get; set; } + + /// + /// 获取或设置优惠范围。 + /// + [Newtonsoft.Json.JsonProperty("scope")] + [System.Text.Json.Serialization.JsonPropertyName("scope")] + public string? Scope { get; set; } + + /// + /// 获取或设置优惠类型。 + /// + [Newtonsoft.Json.JsonProperty("type")] + [System.Text.Json.Serialization.JsonPropertyName("type")] + public string? Type { get; set; } + + /// + /// 获取或设置优惠券面额(单位:分)。 + /// + [Newtonsoft.Json.JsonProperty("amount")] + [System.Text.Json.Serialization.JsonPropertyName("amount")] + public int Amount { get; set; } + + /// + /// 获取或设置活动 ID。 + /// + [Newtonsoft.Json.JsonProperty("stock_id")] + [System.Text.Json.Serialization.JsonPropertyName("stock_id")] + public string? StockId { get; set; } + + /// + /// 获取或设置微信出资(单位:分)。 + /// + [Newtonsoft.Json.JsonProperty("wechatpay_contribute")] + [System.Text.Json.Serialization.JsonPropertyName("wechatpay_contribute")] + public int? WechatpayContribute { get; set; } + + /// + /// 获取或设置商户出资(单位:分)。 + /// + [Newtonsoft.Json.JsonProperty("merchant_contribute")] + [System.Text.Json.Serialization.JsonPropertyName("merchant_contribute")] + public int? MerchantContribute { get; set; } + + /// + /// 获取或设置其他出资(单位:分)。 + /// + [Newtonsoft.Json.JsonProperty("other_contribute")] + [System.Text.Json.Serialization.JsonPropertyName("other_contribute")] + public int? OtherContribute { get; set; } + + /// + /// 获取或设置优惠币种。 + /// + [Newtonsoft.Json.JsonProperty("currency")] + [System.Text.Json.Serialization.JsonPropertyName("currency")] + public string? Currency { get; set; } + } + } + + internal static class Converters + { + internal class NewtonsoftJsonYesOrNoConverter : CreateVehicleTransactionParkingRequest.Converters.NewtonsoftJsonYesOrNoConverter + { + } + + internal class SystemTextJsonYesOrNoConverter : CreateVehicleTransactionParkingRequest.Converters.SystemTextJsonYesOrNoConverter + { + } + } + + /// + /// 获取或设置微信商户号。 + /// + [Newtonsoft.Json.JsonProperty("sp_mchid")] + [System.Text.Json.Serialization.JsonPropertyName("sp_mchid")] + public string MerchantId { get; set; } = default!; + + /// + /// 获取或设置子商户号。 + /// + [Newtonsoft.Json.JsonProperty("sub_mchid")] + [System.Text.Json.Serialization.JsonPropertyName("sub_mchid")] + public string? SubMerchantId { get; set; } + + /// + /// 获取或设置微信 AppId。 + /// + [Newtonsoft.Json.JsonProperty("appid")] + [System.Text.Json.Serialization.JsonPropertyName("appid")] + public string AppId { get; set; } = default!; + + /// + /// 获取或设置子商户 AppId。 + /// + [Newtonsoft.Json.JsonProperty("sub_appid")] + [System.Text.Json.Serialization.JsonPropertyName("sub_appid")] + public string? SubAppId { get; set; } + + /// + /// 获取或设置服务描述。 + /// + [Newtonsoft.Json.JsonProperty("description")] + [System.Text.Json.Serialization.JsonPropertyName("description")] + public string Description { get; set; } = default!; + + /// + /// 获取或设置商户订单号。 + /// + [Newtonsoft.Json.JsonProperty("out_trade_no")] + [System.Text.Json.Serialization.JsonPropertyName("out_trade_no")] + public string OutTradeNumber { get; set; } = default!; + + /// + /// 获取或设置微信支付订单号。 + /// + [Newtonsoft.Json.JsonProperty("transaction_id")] + [System.Text.Json.Serialization.JsonPropertyName("transaction_id")] + public string? TransactionId { get; set; } + + /// + /// 获取或设置交易状态。 + /// + [Newtonsoft.Json.JsonProperty("trade_state")] + [System.Text.Json.Serialization.JsonPropertyName("trade_state")] + public string TradeState { get; set; } = default!; + + /// + /// 获取或设置交易状态描述。 + /// + [Newtonsoft.Json.JsonProperty("trade_state_description")] + [System.Text.Json.Serialization.JsonPropertyName("trade_state_description")] + public string TradeStateDescription { get; set; } = default!; + + /// + /// 获取或设置付款银行类型。 + /// + [Newtonsoft.Json.JsonProperty("bank_type")] + [System.Text.Json.Serialization.JsonPropertyName("bank_type")] + public string? BankType { get; set; } + + /// + /// 获取或设置附加数据。 + /// + [Newtonsoft.Json.JsonProperty("attach")] + [System.Text.Json.Serialization.JsonPropertyName("attach")] + public string? Attachment { get; set; } + + /// + /// 获取或设置用户是否还款。 + /// + [Newtonsoft.Json.JsonProperty("user_repaid")] + [Newtonsoft.Json.JsonConverter(typeof(Converters.NewtonsoftJsonYesOrNoConverter))] + [System.Text.Json.Serialization.JsonPropertyName("user_repaid")] + [System.Text.Json.Serialization.JsonConverter(typeof(Converters.SystemTextJsonYesOrNoConverter))] + public bool? IsUserRepaid { get; set; } + + /// + /// 获取或设置交易场景。 + /// + [Newtonsoft.Json.JsonProperty("trade_scene")] + [System.Text.Json.Serialization.JsonPropertyName("trade_scene")] + public string TradeScene { get; set; } = default!; + + /// + /// 获取或设置支付完成时间。 + /// + [Newtonsoft.Json.JsonProperty("success_time")] + [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.RFC3339NullableDateTimeOffsetConverter))] + [System.Text.Json.Serialization.JsonPropertyName("success_time")] + [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.RFC3339NullableDateTimeOffsetConverter))] + public DateTimeOffset? SuccessTime { get; set; } + + /// + /// 获取或设置订单创建时间。 + /// + [Newtonsoft.Json.JsonProperty("create_time")] + [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.RFC3339DateTimeOffsetConverter))] + [System.Text.Json.Serialization.JsonPropertyName("create_time")] + [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.RFC3339DateTimeOffsetConverter))] + public DateTimeOffset CreateTime { get; set; } + + /// + /// 获取或设置支付者信息。 + /// + [Newtonsoft.Json.JsonProperty("payer")] + [System.Text.Json.Serialization.JsonPropertyName("payer")] + public Types.Payer? Payer { get; set; } + + /// + /// 获取或设置金额信息。 + /// + [Newtonsoft.Json.JsonProperty("amount")] + [System.Text.Json.Serialization.JsonPropertyName("amount")] + public Types.Amount Amount { get; set; } = default!; + + /// + /// 获取或设置停车信息。 + /// + [Newtonsoft.Json.JsonProperty("parking_info")] + [System.Text.Json.Serialization.JsonPropertyName("parking_info")] + public Types.Parking? Parking { get; set; } + + /// + /// 获取或设置优惠信息。 + /// + [Newtonsoft.Json.JsonProperty("promotion_detail")] + [System.Text.Json.Serialization.JsonPropertyName("promotion_detail")] + public Types.Promotion[]? PromotionList { get; set; } + } +}