diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecuteMarketingMemberCardOpenExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecuteMarketingMemberCardOpenExtensions.cs new file mode 100644 index 00000000..957cdbe2 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecuteMarketingMemberCardOpenExtensions.cs @@ -0,0 +1,157 @@ +using System; +using System.Net.Http; +using System.Threading; +using System.Threading.Tasks; +using Flurl.Http; + +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3 +{ + /// + /// 为 提供会员卡开放相关的 API 扩展方法。 + /// + public static class WechatTenpayClientExecuteMarketingMemberCardOpenExtensions + { + /// + /// 异步调用 [POST] /marketing/membercard-open/cards 接口。 + /// REF: https://pay.weixin.qq.com/wiki/doc/apiv3/wxpay/marketing/membercard_open/chapter3_1.shtml + /// + /// + /// + /// + /// + public static async Task ExecuteCreateMarketingMemberCardOpenCardAsync(this WechatTenpayClient client, Models.CreateMarketingMemberCardOpenCardRequest 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, "marketing", "membercard-open", "cards"); + + return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } + + /// + /// 异步调用 [POST] /marketing/membercard-open/cards/{card_id}/upgrade 接口。 + /// REF: https://pay.weixin.qq.com/wiki/doc/apiv3/wxpay/marketing/membercard_open/chapter3_6.shtml + /// + /// + /// + /// + /// + public static async Task ExecuteUpgradeMarketingMemberCardOpenCardAsync(this WechatTenpayClient client, Models.UpgradeMarketingMemberCardOpenCardRequest 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, "marketing", "membercard-open", "cards", request.CardId, "upgrade"); + + return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } + + /// + /// 异步调用 [POST] /marketing/membercard-open/cards/{card_id}/codes/deposit 接口。 + /// REF: https://pay.weixin.qq.com/wiki/doc/apiv3/wxpay/marketing/membercard_open/chapter3_7.shtml + /// + /// + /// + /// + /// + public static async Task ExecuteDepositMarketingMemberCardOpenCardCodesAsync(this WechatTenpayClient client, Models.DepositMarketingMemberCardOpenCardCodesRequest 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, "marketing", "membercard-open", "cards", request.CardId, "codes", "deposit"); + + return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } + + /// + /// 异步调用 [GET] /marketing/membercard-open/cards 接口。 + /// REF: https://pay.weixin.qq.com/wiki/doc/apiv3/wxpay/marketing/membercard_open/chapter3_3.shtml + /// + /// + /// + /// + /// + public static async Task ExecuteQueryMarketingMemberCardOpenCardsAsync(this WechatTenpayClient client, Models.QueryMarketingMemberCardOpenCardsRequest 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, "marketing", "membercard-open", "cards") + .SetQueryParam("appid", request.AppId); + + if (request.BrandId != null) + flurlReq.SetQueryParam("brand_id", request.BrandId); + + if (request.Limit != null) + flurlReq.SetQueryParam("limit", request.Limit.Value.ToString()); + + if (request.Offset != null) + flurlReq.SetQueryParam("offset", request.Offset.Value.ToString()); + + return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } + + /// + /// 异步调用 [GET] /marketing/membercard-open/cards/{card_id} 接口。 + /// REF: https://pay.weixin.qq.com/wiki/doc/apiv3/wxpay/marketing/membercard_open/chapter3_2.shtml + /// + /// + /// + /// + /// + public static async Task ExecuteGetMarketingMemberCardOpenCardByCardIdAsync(this WechatTenpayClient client, Models.GetMarketingMemberCardOpenCardByCardIdRequest 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, "marketing", "membercard-open", "cards", request.CardId); + + return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } + + /// + /// 异步调用 [PATCH] /marketing/membercard-open/cards/{card_id} 接口。 + /// REF: https://pay.weixin.qq.com/wiki/doc/apiv3/wxpay/marketing/membercard_open/chapter3_2.shtml + /// + /// + /// + /// + /// + public static async Task ExecuteUpdateMarketingMemberCardOpenCardAsync(this WechatTenpayClient client, Models.UpdateMarketingMemberCardOpenCardRequest 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, new HttpMethod("PATCH"), "marketing", "membercard-open", "cards", request.CardId); + + return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } + + /// + /// 异步调用 [DELETE] /marketing/membercard-open/cards/{card_id} 接口。 + /// REF: https://pay.weixin.qq.com/wiki/doc/apiv3/wxpay/marketing/membercard_open/chapter3_11.shtml + /// + /// + /// + /// + /// + public static async Task ExecuteDeleteMarketingMemberCardOpenCardAsync(this WechatTenpayClient client, Models.DeleteMarketingMemberCardOpenCardRequest 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.Delete, "marketing", "membercard-open", "cards", request.CardId); + + return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/MarketingMemberCardOpen/Card/CreateMarketingMemberCardOpenCardRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/MarketingMemberCardOpen/Card/CreateMarketingMemberCardOpenCardRequest.cs new file mode 100644 index 00000000..ff97ea1a --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/MarketingMemberCardOpen/Card/CreateMarketingMemberCardOpenCardRequest.cs @@ -0,0 +1,305 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models +{ + /// + /// 表示 [POST] /marketing/membercard-open/cards 接口的请求。 + /// + public class CreateMarketingMemberCardOpenCardRequest : WechatTenpayRequest + { + public static class Types + { + public class Brand + { + /// + /// 获取或设置品牌 ID。 + /// + [Newtonsoft.Json.JsonProperty("brand_id")] + [System.Text.Json.Serialization.JsonPropertyName("brand_id")] + public string BrandId { get; set; } = string.Empty; + + /// + /// 获取或设置展示名称。 + /// + [Newtonsoft.Json.JsonProperty("display_name")] + [System.Text.Json.Serialization.JsonPropertyName("display_name")] + public string DisplayName { get; set; } = string.Empty; + } + + public class Date + { + /// + /// 获取或设置有效期类型。 + /// + [Newtonsoft.Json.JsonProperty("type")] + [System.Text.Json.Serialization.JsonPropertyName("type")] + public string Type { get; set; } = string.Empty; + + /// + /// 获取或设置有效期开始时间。 + /// + [Newtonsoft.Json.JsonProperty("available_begin_time")] + [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.RFC3339NullableDateTimeOffsetConverter))] + [System.Text.Json.Serialization.JsonPropertyName("available_begin_time")] + [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.RFC3339NullableDateTimeOffsetConverter))] + public DateTimeOffset? AvailableBeginTime { get; set; } + + /// + /// 获取或设置有效期结束时间。 + /// + [Newtonsoft.Json.JsonProperty("available_end_time")] + [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.RFC3339NullableDateTimeOffsetConverter))] + [System.Text.Json.Serialization.JsonPropertyName("available_end_time")] + [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.RFC3339NullableDateTimeOffsetConverter))] + public DateTimeOffset? AvailableEndTime { get; set; } + + /// + /// 获取或设置领取后 N 天内有效。 + /// + [Newtonsoft.Json.JsonProperty("available_day_after_receive")] + [System.Text.Json.Serialization.JsonPropertyName("available_day_after_receive")] + public int? AvailableDaysAfterReceive { get; set; } + + /// + /// 获取或设置领取后 N 天后生效。 + /// + [Newtonsoft.Json.JsonProperty("wait_days_after_receive")] + [System.Text.Json.Serialization.JsonPropertyName("wait_days_after_receive")] + public int? WaitDaysAfterReceive { get; set; } + } + + public class Balance + { + /// + /// 获取或设置是否支持储值。 + /// + [Newtonsoft.Json.JsonProperty("need_balance")] + [System.Text.Json.Serialization.JsonPropertyName("need_balance")] + public bool? RequireBalance { get; set; } + + /// + /// 获取或设置储值小程序 AppId。 + /// + [Newtonsoft.Json.JsonProperty("balance_appid")] + [System.Text.Json.Serialization.JsonPropertyName("balance_appid")] + public string? MiniProgramAppId { get; set; } + + /// + /// 获取或设置储值小程序页面路径。 + /// + [Newtonsoft.Json.JsonProperty("balance_path")] + [System.Text.Json.Serialization.JsonPropertyName("balance_path")] + public string? MiniProgramPath { get; set; } + + /// + /// 获取或设置储值 URL。 + /// + [Newtonsoft.Json.JsonProperty("balance_url")] + [System.Text.Json.Serialization.JsonPropertyName("balance_url")] + public string? Url { get; set; } + } + + public class UserForm + { + public static class Types + { + public class CustomField + { + /// + /// 获取或设置字段类型。 + /// + [Newtonsoft.Json.JsonProperty("type")] + [System.Text.Json.Serialization.JsonPropertyName("type")] + public string Type { get; set; } = string.Empty; + + /// + /// 获取或设置字段名称。 + /// + [Newtonsoft.Json.JsonProperty("name")] + [System.Text.Json.Serialization.JsonPropertyName("name")] + public string Name { get; set; } = string.Empty; + + /// + /// 获取或设置字段值。 + /// + [Newtonsoft.Json.JsonProperty("values")] + [System.Text.Json.Serialization.JsonPropertyName("values")] + public IList? Values { get; set; } + } + } + + /// + /// 获取或设置平台提供的通用开卡信息字段列表。 + /// + [Newtonsoft.Json.JsonProperty("common_field_list")] + [System.Text.Json.Serialization.JsonPropertyName("common_field_list")] + public IList? CommonFieldList { get; set; } + + /// + /// 获取或设置商户自定义的开卡信息字段列表。 + /// + [Newtonsoft.Json.JsonProperty("custom_field_list")] + [System.Text.Json.Serialization.JsonPropertyName("custom_field_list")] + public IList? CustomFieldList { get; set; } + } + + public class AdditionalStatement + { + /// + /// 获取或设置标题。 + /// + [Newtonsoft.Json.JsonProperty("title")] + [System.Text.Json.Serialization.JsonPropertyName("title")] + public string? Title { get; set; } + + /// + /// 获取或设置小程序 AppId。 + /// + [Newtonsoft.Json.JsonProperty("appid")] + [System.Text.Json.Serialization.JsonPropertyName("appid")] + public string? MiniProgramAppId { get; set; } + + /// + /// 获取或设置小程序页面路径。 + /// + [Newtonsoft.Json.JsonProperty("path")] + [System.Text.Json.Serialization.JsonPropertyName("path")] + public string? MiniProgramPath { get; set; } + + /// + /// 获取或设置 URL。 + /// + [Newtonsoft.Json.JsonProperty("url")] + [System.Text.Json.Serialization.JsonPropertyName("url")] + public string? Url { get; set; } + } + } + + /// + /// 获取或设置公众号 AppId。 + /// + [Newtonsoft.Json.JsonProperty("appid")] + [System.Text.Json.Serialization.JsonPropertyName("appid")] + public string AppId { get; set; } = string.Empty; + + /// + /// 获取或设置会员卡 Logo 媒体文件地址。 + /// + [Newtonsoft.Json.JsonProperty("logo_url")] + [System.Text.Json.Serialization.JsonPropertyName("logo_url")] + public string LogoMediaUrl { get; set; } = string.Empty; + + /// + /// 获取或设置品牌信息。 + /// + [Newtonsoft.Json.JsonProperty("brand")] + [System.Text.Json.Serialization.JsonPropertyName("brand")] + public Types.Brand Brand { get; set; } = new Types.Brand(); + + /// + /// 获取或设置卡名称。 + /// + [Newtonsoft.Json.JsonProperty("title")] + [System.Text.Json.Serialization.JsonPropertyName("title")] + public string Title { get; set; } = string.Empty; + + /// + /// 获取或设置背景图片媒体文件地址。 + /// + [Newtonsoft.Json.JsonProperty("background_picture_url")] + [System.Text.Json.Serialization.JsonPropertyName("background_picture_url")] + public string BackgroundPictureMediaUrl { get; set; } = string.Empty; + + /// + /// 获取或设置使用须知。 + /// + [Newtonsoft.Json.JsonProperty("description")] + [System.Text.Json.Serialization.JsonPropertyName("description")] + public string? Description { get; set; } + + /// + /// 获取或设置客服电话。 + /// + [Newtonsoft.Json.JsonProperty("service_phone")] + [System.Text.Json.Serialization.JsonPropertyName("service_phone")] + public string? ServicePhone { get; set; } + + /// + /// 获取或设置会员码型。 + /// + [Newtonsoft.Json.JsonProperty("code_type")] + [System.Text.Json.Serialization.JsonPropertyName("code_type")] + public string CodeType { get; set; } = string.Empty; + + /// + /// 获取或设置会员卡总库存。 + /// + [Newtonsoft.Json.JsonProperty("total_quantity")] + [System.Text.Json.Serialization.JsonPropertyName("total_quantity")] + public int? TotalQuantity { get; set; } + + /// + /// 获取或设置有效期。 + /// + [Newtonsoft.Json.JsonProperty("date_information")] + [System.Text.Json.Serialization.JsonPropertyName("date_information")] + public Types.Date Date { get; set; } = new Types.Date(); + + /// + /// 获取或设置会员卡 Code 分配类型。 + /// + [Newtonsoft.Json.JsonProperty("code_mode")] + [System.Text.Json.Serialization.JsonPropertyName("code_mode")] + public string? CodeMode { get; set; } + + /// + /// 获取或设置是否展示会员等级。 + /// + [Newtonsoft.Json.JsonProperty("need_display_level")] + [System.Text.Json.Serialization.JsonPropertyName("need_display_level")] + public bool? RequireDisplayLevel { get; set; } + + /// + /// 获取或设置会员初始等级。 + /// + [Newtonsoft.Json.JsonProperty("init_level")] + [System.Text.Json.Serialization.JsonPropertyName("init_level")] + public string? InitializedLevel { get; set; } + + /// + /// 获取或设置商户请求单号。 + /// + [Newtonsoft.Json.JsonProperty("out_request_no")] + [System.Text.Json.Serialization.JsonPropertyName("out_request_no")] + public string OutRequestNumber { get; set; } = string.Empty; + + /// + /// 获取或设置储值信息。 + /// + [Newtonsoft.Json.JsonProperty("balance_information")] + [System.Text.Json.Serialization.JsonPropertyName("balance_information")] + public Types.Balance? Balance { get; set; } + + /// + /// 获取或设置开卡信息。 + /// + [Newtonsoft.Json.JsonProperty("user_information_form")] + [System.Text.Json.Serialization.JsonPropertyName("user_information_form")] + public Types.UserForm? UserForm { get; set; } + + /// + /// 获取或设置补充说明信息。 + /// + [Newtonsoft.Json.JsonProperty("additional_statement")] + [System.Text.Json.Serialization.JsonPropertyName("additional_statement")] + public Types.AdditionalStatement? AdditionalStatement { get; set; } + + /// + /// 获取或设置是否启用动态码。 + /// + [Newtonsoft.Json.JsonProperty("need_dynamic_code")] + [System.Text.Json.Serialization.JsonPropertyName("need_dynamic_code")] + public bool? RequireDynamicCode { get; set; } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/MarketingMemberCardOpen/Card/CreateMarketingMemberCardOpenCardResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/MarketingMemberCardOpen/Card/CreateMarketingMemberCardOpenCardResponse.cs new file mode 100644 index 00000000..fabbb274 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/MarketingMemberCardOpen/Card/CreateMarketingMemberCardOpenCardResponse.cs @@ -0,0 +1,9 @@ +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models +{ + /// + /// 表示 [POST] /marketing/membercard-open/cards 接口的响应。 + /// + public class CreateMarketingMemberCardOpenCardResponse : GetMarketingMemberCardOpenCardByCardIdResponse + { + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/MarketingMemberCardOpen/Card/DeleteMarketingMemberCardOpenCardRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/MarketingMemberCardOpen/Card/DeleteMarketingMemberCardOpenCardRequest.cs new file mode 100644 index 00000000..8c629f19 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/MarketingMemberCardOpen/Card/DeleteMarketingMemberCardOpenCardRequest.cs @@ -0,0 +1,15 @@ +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models +{ + /// + /// 表示 [DELETE] /marketing/membercard-open/cards/{card_id} 接口的请求。 + /// + public class DeleteMarketingMemberCardOpenCardRequest : WechatTenpayRequest + { + /// + /// 获取或设置会员卡 ID。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public string CardId { get; set; } = string.Empty; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/MarketingMemberCardOpen/Card/DeleteMarketingMemberCardOpenCardResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/MarketingMemberCardOpen/Card/DeleteMarketingMemberCardOpenCardResponse.cs new file mode 100644 index 00000000..eec4bd4e --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/MarketingMemberCardOpen/Card/DeleteMarketingMemberCardOpenCardResponse.cs @@ -0,0 +1,9 @@ +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models +{ + /// + /// 表示 [DELETE] /marketing/membercard-open/cards/{card_id} 接口的响应。 + /// + public class DeleteMarketingMemberCardOpenCardResponse : WechatTenpayResponse + { + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/MarketingMemberCardOpen/Card/DepositMarketingMemberCardOpenCardCodesRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/MarketingMemberCardOpen/Card/DepositMarketingMemberCardOpenCardCodesRequest.cs new file mode 100644 index 00000000..500246ff --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/MarketingMemberCardOpen/Card/DepositMarketingMemberCardOpenCardCodesRequest.cs @@ -0,0 +1,24 @@ +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models +{ + /// + /// 表示 [POST] /marketing/membercard-open/cards/{card_id}/codes/deposit 接口的请求。 + /// + public class DepositMarketingMemberCardOpenCardCodesRequest : WechatTenpayRequest + { + /// + /// 获取或设置会员卡 ID。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public string CardId { get; set; } = string.Empty; + + /// + /// 获取或设置会员卡 Code 列表。 + /// + [Newtonsoft.Json.JsonProperty("code")] + [System.Text.Json.Serialization.JsonPropertyName("code")] + public IList CodeList { get; set; } = new List(); + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/MarketingMemberCardOpen/Card/DepositMarketingMemberCardOpenCardCodesResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/MarketingMemberCardOpen/Card/DepositMarketingMemberCardOpenCardCodesResponse.cs new file mode 100644 index 00000000..efde06ff --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/MarketingMemberCardOpen/Card/DepositMarketingMemberCardOpenCardCodesResponse.cs @@ -0,0 +1,35 @@ +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models +{ + /// + /// 表示 [POST] /marketing/membercard-open/cards/{card_id}/codes/deposit 接口的响应。 + /// + public class DepositMarketingMemberCardOpenCardCodesResponse : WechatTenpayResponse + { + public static class Types + { + public class Result + { + /// + /// 获取或设置会员卡 Code。 + /// + [Newtonsoft.Json.JsonProperty("code")] + [System.Text.Json.Serialization.JsonPropertyName("code")] + public string Code { get; set; } = default!; + + /// + /// 获取或设置错误信息。 + /// + [Newtonsoft.Json.JsonProperty("result")] + [System.Text.Json.Serialization.JsonPropertyName("result")] + public string ErrorMessage { get; set; } = default!; + } + } + + /// + /// 获取或设置结果列表。 + /// + [Newtonsoft.Json.JsonProperty("data")] + [System.Text.Json.Serialization.JsonPropertyName("data")] + public Types.Result[] ResultList { get; set; } = default!; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/MarketingMemberCardOpen/Card/GetMarketingMemberCardOpenCardByCardIdRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/MarketingMemberCardOpen/Card/GetMarketingMemberCardOpenCardByCardIdRequest.cs new file mode 100644 index 00000000..93afa9eb --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/MarketingMemberCardOpen/Card/GetMarketingMemberCardOpenCardByCardIdRequest.cs @@ -0,0 +1,15 @@ +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models +{ + /// + /// 表示 [GET] /marketing/membercard-open/cards/{card_id} 接口的请求。 + /// + public class GetMarketingMemberCardOpenCardByCardIdRequest : WechatTenpayRequest + { + /// + /// 获取或设置会员卡 ID。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public string CardId { get; set; } = string.Empty; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/MarketingMemberCardOpen/Card/GetMarketingMemberCardOpenCardByCardIdResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/MarketingMemberCardOpen/Card/GetMarketingMemberCardOpenCardByCardIdResponse.cs new file mode 100644 index 00000000..cf631d0f --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/MarketingMemberCardOpen/Card/GetMarketingMemberCardOpenCardByCardIdResponse.cs @@ -0,0 +1,581 @@ +using System; + +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models +{ + /// + /// 表示 [GET] /marketing/membercard-open/cards/{card_id} 接口的响应。 + /// + public class GetMarketingMemberCardOpenCardByCardIdResponse : WechatTenpayResponse + { + public static class Types + { + public class Brand + { + /// + /// 获取或设置品牌 ID。 + /// + [Newtonsoft.Json.JsonProperty("brand_id")] + [System.Text.Json.Serialization.JsonPropertyName("brand_id")] + public string BrandId { get; set; } = default!; + + /// + /// 获取或设置展示名称。 + /// + [Newtonsoft.Json.JsonProperty("display_name")] + [System.Text.Json.Serialization.JsonPropertyName("display_name")] + public string DisplayName { get; set; } = default!; + } + + public class Date + { + /// + /// 获取或设置有效期类型。 + /// + [Newtonsoft.Json.JsonProperty("type")] + [System.Text.Json.Serialization.JsonPropertyName("type")] + public string Type { get; set; } = default!; + + /// + /// 获取或设置有效期开始时间。 + /// + [Newtonsoft.Json.JsonProperty("available_begin_time")] + [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.RFC3339NullableDateTimeOffsetConverter))] + [System.Text.Json.Serialization.JsonPropertyName("available_begin_time")] + [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.RFC3339NullableDateTimeOffsetConverter))] + public DateTimeOffset? AvailableBeginTime { get; set; } + + /// + /// 获取或设置有效期结束时间。 + /// + [Newtonsoft.Json.JsonProperty("available_end_time")] + [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.RFC3339NullableDateTimeOffsetConverter))] + [System.Text.Json.Serialization.JsonPropertyName("available_end_time")] + [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.RFC3339NullableDateTimeOffsetConverter))] + public DateTimeOffset? AvailableEndTime { get; set; } + + /// + /// 获取或设置领取后 N 天内有效。 + /// + [Newtonsoft.Json.JsonProperty("available_day_after_receive")] + [System.Text.Json.Serialization.JsonPropertyName("available_day_after_receive")] + public int? AvailableDaysAfterReceive { get; set; } + + /// + /// 获取或设置领取后 N 天后生效。 + /// + [Newtonsoft.Json.JsonProperty("wait_days_after_receive")] + [System.Text.Json.Serialization.JsonPropertyName("wait_days_after_receive")] + public int? WaitDaysAfterReceive { get; set; } + } + + public class Balance + { + /// + /// 获取或设置是否支持储值。 + /// + [Newtonsoft.Json.JsonProperty("need_balance")] + [System.Text.Json.Serialization.JsonPropertyName("need_balance")] + public bool? RequireBalance { get; set; } + + /// + /// 获取或设置储值小程序 AppId。 + /// + [Newtonsoft.Json.JsonProperty("balance_appid")] + [System.Text.Json.Serialization.JsonPropertyName("balance_appid")] + public string? MiniProgramAppId { get; set; } + + /// + /// 获取或设置储值小程序页面路径。 + /// + [Newtonsoft.Json.JsonProperty("balance_path")] + [System.Text.Json.Serialization.JsonPropertyName("balance_path")] + public string? MiniProgramPath { get; set; } + + /// + /// 获取或设置储值 URL。 + /// + [Newtonsoft.Json.JsonProperty("balance_url")] + [System.Text.Json.Serialization.JsonPropertyName("balance_url")] + public string? Url { get; set; } + } + + public class UserForm + { + public static class Types + { + public class CustomField + { + /// + /// 获取或设置字段类型。 + /// + [Newtonsoft.Json.JsonProperty("type")] + [System.Text.Json.Serialization.JsonPropertyName("type")] + public string Type { get; set; } = default!; + + /// + /// 获取或设置字段名称。 + /// + [Newtonsoft.Json.JsonProperty("name")] + [System.Text.Json.Serialization.JsonPropertyName("name")] + public string Name { get; set; } = default!; + + /// + /// 获取或设置字段值。 + /// + [Newtonsoft.Json.JsonProperty("values")] + [System.Text.Json.Serialization.JsonPropertyName("values")] + public string[]? Values { get; set; } + } + } + + /// + /// 获取或设置是否允许修改。 + /// + [Newtonsoft.Json.JsonProperty("can_modify_after_activate")] + [System.Text.Json.Serialization.JsonPropertyName("can_modify_after_activate")] + public bool? CanModifyAfterActivate { get; set; } + + /// + /// 获取或设置平台提供的通用开卡信息字段列表。 + /// + [Newtonsoft.Json.JsonProperty("common_field_list")] + [System.Text.Json.Serialization.JsonPropertyName("common_field_list")] + public string[]? CommonFieldList { get; set; } + + /// + /// 获取或设置商户自定义的开卡信息字段列表。 + /// + [Newtonsoft.Json.JsonProperty("custom_field_list")] + [System.Text.Json.Serialization.JsonPropertyName("custom_field_list")] + public Types.CustomField[]? CustomFieldList { get; set; } + } + + public class AdditionalStatement + { + /// + /// 获取或设置标题。 + /// + [Newtonsoft.Json.JsonProperty("title")] + [System.Text.Json.Serialization.JsonPropertyName("title")] + public string? Title { get; set; } + + /// + /// 获取或设置小程序 AppId。 + /// + [Newtonsoft.Json.JsonProperty("appid")] + [System.Text.Json.Serialization.JsonPropertyName("appid")] + public string? MiniProgramAppId { get; set; } + + /// + /// 获取或设置小程序页面路径。 + /// + [Newtonsoft.Json.JsonProperty("path")] + [System.Text.Json.Serialization.JsonPropertyName("path")] + public string? MiniProgramPath { get; set; } + + /// + /// 获取或设置 URL。 + /// + [Newtonsoft.Json.JsonProperty("url")] + [System.Text.Json.Serialization.JsonPropertyName("url")] + public string? Url { get; set; } + } + + public class Bonus + { + /// + /// 获取或设置会员初始积分值。 + /// + [Newtonsoft.Json.JsonProperty("init_bonus")] + [System.Text.Json.Serialization.JsonPropertyName("init_bonus")] + public int InitializedValue { get; set; } + + /// + /// 获取或设置积分值文案。 + /// + [Newtonsoft.Json.JsonProperty("bonus_value_word")] + [System.Text.Json.Serialization.JsonPropertyName("bonus_value_word")] + public string? ValueWords { get; set; } + + /// + /// 获取或设置积分价值项标题。 + /// + [Newtonsoft.Json.JsonProperty("bonus_cost_title")] + [System.Text.Json.Serialization.JsonPropertyName("bonus_cost_title")] + public string? CostTitle { get; set; } + + /// + /// 获取或设置积分价值项文案。 + /// + [Newtonsoft.Json.JsonProperty("bonus_cost_word")] + [System.Text.Json.Serialization.JsonPropertyName("bonus_cost_word")] + public string? CostWords { get; set; } + + /// + /// 获取或设置跳转文案。 + /// + [Newtonsoft.Json.JsonProperty("bonus_jump_word")] + [System.Text.Json.Serialization.JsonPropertyName("bonus_jump_word")] + public string? JumpWords { get; set; } + + /// + /// 获取或设置小程序 AppId。 + /// + [Newtonsoft.Json.JsonProperty("bonus_jump_appid")] + [System.Text.Json.Serialization.JsonPropertyName("bonus_jump_appid")] + public string? MiniProgramAppId { get; set; } + + /// + /// 获取或设置小程序页面路径。 + /// + [Newtonsoft.Json.JsonProperty("bonus_jump_path")] + [System.Text.Json.Serialization.JsonPropertyName("bonus_jump_path")] + public string? MiniProgramPath { get; set; } + + /// + /// 获取或设置自助小程序 AppId。 + /// + [Newtonsoft.Json.JsonProperty("bonus_support_appid")] + [System.Text.Json.Serialization.JsonPropertyName("bonus_support_appid")] + public string? SupportMiniProgramAppId { get; set; } + + /// + /// 获取或设置自助小程序页面路径。 + /// + [Newtonsoft.Json.JsonProperty("bonus_support_path")] + [System.Text.Json.Serialization.JsonPropertyName("bonus_support_path")] + public string? SupportMiniProgramPath { get; set; } + } + + public class Favor + { + /// + /// 获取或设置是否展示优惠券。 + /// + [Newtonsoft.Json.JsonProperty("show_coupon")] + [System.Text.Json.Serialization.JsonPropertyName("show_coupon")] + public bool RequireShowCoupon { get; set; } + + /// + /// 获取或设置会员专享价文案。 + /// + [Newtonsoft.Json.JsonProperty("member_price_word")] + [System.Text.Json.Serialization.JsonPropertyName("member_price_word")] + public string? MemberPriceWords { get; set; } + + /// + /// 获取或设置小程序 AppId。 + /// + [Newtonsoft.Json.JsonProperty("member_price_appid")] + [System.Text.Json.Serialization.JsonPropertyName("member_price_appid")] + public string? MiniProgramAppId { get; set; } + + /// + /// 获取或设置小程序页面路径。 + /// + [Newtonsoft.Json.JsonProperty("member_price_path")] + [System.Text.Json.Serialization.JsonPropertyName("member_price_path")] + public string? MiniProgramPath { get; set; } + } + + public class ServiceModule + { + public static class Types + { + public class MiniProgram + { + /// + /// 获取或设置小程序 AppId。 + /// + [Newtonsoft.Json.JsonProperty("appid")] + [System.Text.Json.Serialization.JsonPropertyName("appid")] + public string AppId { get; set; } = default!; + + /// + /// 获取或设置小程序页面路径。 + /// + [Newtonsoft.Json.JsonProperty("path")] + [System.Text.Json.Serialization.JsonPropertyName("path")] + public string Path { get; set; } = default!; + } + } + + /// + /// 获取或设置会员服务项 ID。 + /// + [Newtonsoft.Json.JsonProperty("service_module_id")] + [System.Text.Json.Serialization.JsonPropertyName("service_module_id")] + public string ServiceModuleId { get; set; } = default!; + + /// + /// 获取或设置跳转小程序信息。 + /// + [Newtonsoft.Json.JsonProperty("jump_miniprogram")] + [System.Text.Json.Serialization.JsonPropertyName("jump_miniprogram")] + public Types.MiniProgram? MiniProgram { get; set; } + } + + public class Invoice + { + /// + /// 获取或设置跳转文案。 + /// + [Newtonsoft.Json.JsonProperty("fapiao_jump_word")] + [System.Text.Json.Serialization.JsonPropertyName("fapiao_jump_word")] + public string? JumpWords { get; set; } + + /// + /// 获取或设置小程序 AppId。 + /// + [Newtonsoft.Json.JsonProperty("fapiao_jump_appid")] + [System.Text.Json.Serialization.JsonPropertyName("fapiao_jump_appid")] + public string? MiniProgramAppId { get; set; } + + /// + /// 获取或设置小程序页面路径。 + /// + [Newtonsoft.Json.JsonProperty("fapiao_jump_path")] + [System.Text.Json.Serialization.JsonPropertyName("fapiao_jump_path")] + public string? MiniProgramPath { get; set; } + } + + public class Guide + { + /// + /// 获取或设置联系人名字。 + /// + [Newtonsoft.Json.JsonProperty("staff_name")] + [System.Text.Json.Serialization.JsonPropertyName("staff_name")] + public string StaffName { get; set; } = default!; + + /// + /// 获取或设置联系人头像媒体文件地址。 + /// + [Newtonsoft.Json.JsonProperty("head_image_url")] + [System.Text.Json.Serialization.JsonPropertyName("head_image_url")] + public string HeadImageMediaUrl { get; set; } = default!; + + /// + /// 获取或设置联系方式。 + /// + [Newtonsoft.Json.JsonProperty("contact_information_name")] + [System.Text.Json.Serialization.JsonPropertyName("contact_information_name")] + public string? ContactInformationName { get; set; } + + /// + /// 获取或设置联系信息。 + /// + [Newtonsoft.Json.JsonProperty("contact_information_value")] + [System.Text.Json.Serialization.JsonPropertyName("contact_information_value")] + public string? ContactInformationValue { get; set; } + + /// + /// 获取或设置联系电话。 + /// + [Newtonsoft.Json.JsonProperty("phone_number")] + [System.Text.Json.Serialization.JsonPropertyName("phone_number")] + public string? PhoneNumber { get; set; } + } + } + + /// + /// 获取或设置会员卡 ID。 + /// + [Newtonsoft.Json.JsonProperty("card_id")] + [System.Text.Json.Serialization.JsonPropertyName("card_id")] + public string CardId { get; set; } = default!; + + /// + /// 获取或设置会员卡状态。 + /// + [Newtonsoft.Json.JsonProperty("status")] + [System.Text.Json.Serialization.JsonPropertyName("status")] + public string Status { get; set; } = default!; + + /// + /// 获取或设置公众号 AppId。 + /// + [Newtonsoft.Json.JsonProperty("appid")] + [System.Text.Json.Serialization.JsonPropertyName("appid")] + public string AppId { get; set; } = default!; + + /// + /// 获取或设置会员卡 Logo 媒体文件地址。 + /// + [Newtonsoft.Json.JsonProperty("logo_url")] + [System.Text.Json.Serialization.JsonPropertyName("logo_url")] + public string LogoMediaUrl { get; set; } = default!; + + /// + /// 获取或设置品牌信息。 + /// + [Newtonsoft.Json.JsonProperty("brand")] + [System.Text.Json.Serialization.JsonPropertyName("brand")] + public Types.Brand Brand { get; set; } = default!; + + /// + /// 获取或设置卡名称。 + /// + [Newtonsoft.Json.JsonProperty("title")] + [System.Text.Json.Serialization.JsonPropertyName("title")] + public string Title { get; set; } = default!; + + /// + /// 获取或设置背景图片媒体文件地址。 + /// + [Newtonsoft.Json.JsonProperty("background_picture_url")] + [System.Text.Json.Serialization.JsonPropertyName("background_picture_url")] + public string BackgroundPictureMediaUrl { get; set; } = default!; + + /// + /// 获取或设置使用须知。 + /// + [Newtonsoft.Json.JsonProperty("description")] + [System.Text.Json.Serialization.JsonPropertyName("description")] + public string? Description { get; set; } + + /// + /// 获取或设置客服电话。 + /// + [Newtonsoft.Json.JsonProperty("service_phone")] + [System.Text.Json.Serialization.JsonPropertyName("service_phone")] + public string? ServicePhone { get; set; } + + /// + /// 获取或设置会员码型。 + /// + [Newtonsoft.Json.JsonProperty("code_type")] + [System.Text.Json.Serialization.JsonPropertyName("code_type")] + public string CodeType { get; set; } = default!; + + /// + /// 获取或设置会员卡总库存。 + /// + [Newtonsoft.Json.JsonProperty("total_quantity")] + [System.Text.Json.Serialization.JsonPropertyName("total_quantity")] + public int TotalQuantity { get; set; } + + /// + /// 获取或设置剩余库存。 + /// + [Newtonsoft.Json.JsonProperty("remain_quantity")] + [System.Text.Json.Serialization.JsonPropertyName("remain_quantity")] + public int? RemainQuantity { get; set; } + + /// + /// 获取或设置有效期。 + /// + [Newtonsoft.Json.JsonProperty("date_information")] + [System.Text.Json.Serialization.JsonPropertyName("date_information")] + public Types.Date Date { get; set; } = default!; + + /// + /// 获取或设置会员卡 Code 分配类型。 + /// + [Newtonsoft.Json.JsonProperty("code_mode")] + [System.Text.Json.Serialization.JsonPropertyName("code_mode")] + public string? CodeMode { get; set; } + + /// + /// 获取或设置是否展示会员等级。 + /// + [Newtonsoft.Json.JsonProperty("need_display_level")] + [System.Text.Json.Serialization.JsonPropertyName("need_display_level")] + public bool? RequireDisplayLevel { get; set; } + + /// + /// 获取或设置会员初始等级。 + /// + [Newtonsoft.Json.JsonProperty("init_level")] + [System.Text.Json.Serialization.JsonPropertyName("init_level")] + public string? InitializedLevel { get; set; } + + /// + /// 获取或设置商户请求单号。 + /// + [Newtonsoft.Json.JsonProperty("out_request_no")] + [System.Text.Json.Serialization.JsonPropertyName("out_request_no")] + public string OutRequestNumber { get; set; } = default!; + + /// + /// 获取或设置储值信息。 + /// + [Newtonsoft.Json.JsonProperty("balance_information")] + [System.Text.Json.Serialization.JsonPropertyName("balance_information")] + public Types.Balance? Balance { get; set; } + + /// + /// 获取或设置开卡信息。 + /// + [Newtonsoft.Json.JsonProperty("user_information_form")] + [System.Text.Json.Serialization.JsonPropertyName("user_information_form")] + public Types.UserForm? UserForm { get; set; } + + /// + /// 获取或设置补充说明信息。 + /// + [Newtonsoft.Json.JsonProperty("additional_statement")] + [System.Text.Json.Serialization.JsonPropertyName("additional_statement")] + public Types.AdditionalStatement? AdditionalStatement { get; set; } + + /// + /// 获取或设置会员积分信息。 + /// + [Newtonsoft.Json.JsonProperty("bonus")] + [System.Text.Json.Serialization.JsonPropertyName("bonus")] + public Types.Bonus? Bonus { get; set; } + + /// + /// 获取或设置会员优惠信息。 + /// + [Newtonsoft.Json.JsonProperty("favor")] + [System.Text.Json.Serialization.JsonPropertyName("favor")] + public Types.Favor? Favor { get; set; } + + /// + /// 获取或设置会员服务项列表。 + /// + [Newtonsoft.Json.JsonProperty("service_modules")] + [System.Text.Json.Serialization.JsonPropertyName("service_modules")] + public Types.ServiceModule[]? ServiceModuleList { get; set; } + + /// + /// 获取或设置会员发票信息。 + /// + [Newtonsoft.Json.JsonProperty("fapiao")] + [System.Text.Json.Serialization.JsonPropertyName("fapiao")] + public Types.Invoice? Invoice { get; set; } + + /// + /// 获取或设置客服信息。 + /// + [Newtonsoft.Json.JsonProperty("guide")] + [System.Text.Json.Serialization.JsonPropertyName("guide")] + public Types.Guide? Guide { get; set; } + + /// + /// 获取或设置是否启用动态码。 + /// + [Newtonsoft.Json.JsonProperty("need_dynamic_code")] + [System.Text.Json.Serialization.JsonPropertyName("need_dynamic_code")] + public bool? RequireDynamicCode { 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("update_time")] + [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.RFC3339DateTimeOffsetConverter))] + [System.Text.Json.Serialization.JsonPropertyName("update_time")] + [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.RFC3339DateTimeOffsetConverter))] + public DateTimeOffset UpdateTime { get; set; } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/MarketingMemberCardOpen/Card/QueryMarketingMemberCardOpenCardsRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/MarketingMemberCardOpen/Card/QueryMarketingMemberCardOpenCardsRequest.cs new file mode 100644 index 00000000..55bf9917 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/MarketingMemberCardOpen/Card/QueryMarketingMemberCardOpenCardsRequest.cs @@ -0,0 +1,36 @@ +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models +{ + /// + /// 表示 [GET] /marketing/membercard-open/cards 接口的请求。 + /// + public class QueryMarketingMemberCardOpenCardsRequest : WechatTenpayRequest + { + /// + /// 获取或设置品牌 ID。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public string? BrandId { get; set; } + + /// + /// 获取或设置公众号 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 int? Limit { get; set; } + + /// + /// 获取或设置分页开始位置。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public int? Offset { get; set; } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/MarketingMemberCardOpen/Card/QueryMarketingMemberCardOpenCardsResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/MarketingMemberCardOpen/Card/QueryMarketingMemberCardOpenCardsResponse.cs new file mode 100644 index 00000000..ab559eec --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/MarketingMemberCardOpen/Card/QueryMarketingMemberCardOpenCardsResponse.cs @@ -0,0 +1,239 @@ +using System; + +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models +{ + /// + /// 表示 [GET] /marketing/membercard-open/cards 接口的响应。 + /// + public class QueryMarketingMemberCardOpenCardsResponse : WechatTenpayResponse + { + public static class Types + { + public class Card + { + public static class Types + { + public class Brand : GetMarketingMemberCardOpenCardByCardIdResponse.Types.Brand + { + } + + public class Date : GetMarketingMemberCardOpenCardByCardIdResponse.Types.Date + { + } + + public class Balance : GetMarketingMemberCardOpenCardByCardIdResponse.Types.Balance + { + } + + public class UserForm : GetMarketingMemberCardOpenCardByCardIdResponse.Types.UserForm + { + } + + public class AdditionalStatement: GetMarketingMemberCardOpenCardByCardIdResponse.Types.AdditionalStatement + { + } + } + + /// + /// 获取或设置会员卡 ID。 + /// + [Newtonsoft.Json.JsonProperty("card_id")] + [System.Text.Json.Serialization.JsonPropertyName("card_id")] + public string CardId { get; set; } = default!; + + /// + /// 获取或设置会员卡状态。 + /// + [Newtonsoft.Json.JsonProperty("status")] + [System.Text.Json.Serialization.JsonPropertyName("status")] + public string Status { get; set; } = default!; + + /// + /// 获取或设置公众号 AppId。 + /// + [Newtonsoft.Json.JsonProperty("appid")] + [System.Text.Json.Serialization.JsonPropertyName("appid")] + public string AppId { get; set; } = default!; + + /// + /// 获取或设置会员卡 Logo 媒体文件地址。 + /// + [Newtonsoft.Json.JsonProperty("logo_url")] + [System.Text.Json.Serialization.JsonPropertyName("logo_url")] + public string LogoMediaUrl { get; set; } = default!; + + /// + /// 获取或设置品牌信息。 + /// + [Newtonsoft.Json.JsonProperty("brand")] + [System.Text.Json.Serialization.JsonPropertyName("brand")] + public Types.Brand Brand { get; set; } = default!; + + /// + /// 获取或设置卡名称。 + /// + [Newtonsoft.Json.JsonProperty("title")] + [System.Text.Json.Serialization.JsonPropertyName("title")] + public string Title { get; set; } = default!; + + /// + /// 获取或设置背景图片媒体文件地址。 + /// + [Newtonsoft.Json.JsonProperty("background_picture_url")] + [System.Text.Json.Serialization.JsonPropertyName("background_picture_url")] + public string BackgroundPictureMediaUrl { get; set; } = default!; + + /// + /// 获取或设置使用须知。 + /// + [Newtonsoft.Json.JsonProperty("description")] + [System.Text.Json.Serialization.JsonPropertyName("description")] + public string? Description { get; set; } + + /// + /// 获取或设置客服电话。 + /// + [Newtonsoft.Json.JsonProperty("service_phone")] + [System.Text.Json.Serialization.JsonPropertyName("service_phone")] + public string? ServicePhone { get; set; } + + /// + /// 获取或设置会员码型。 + /// + [Newtonsoft.Json.JsonProperty("code_type")] + [System.Text.Json.Serialization.JsonPropertyName("code_type")] + public string CodeType { get; set; } = default!; + + /// + /// 获取或设置会员卡总库存。 + /// + [Newtonsoft.Json.JsonProperty("total_quantity")] + [System.Text.Json.Serialization.JsonPropertyName("total_quantity")] + public int TotalQuantity { get; set; } + + /// + /// 获取或设置剩余库存。 + /// + [Newtonsoft.Json.JsonProperty("remain_quantity")] + [System.Text.Json.Serialization.JsonPropertyName("remain_quantity")] + public int? RemainQuantity { get; set; } + + /// + /// 获取或设置有效期。 + /// + [Newtonsoft.Json.JsonProperty("date_information")] + [System.Text.Json.Serialization.JsonPropertyName("date_information")] + public Types.Date Date { get; set; } = default!; + + /// + /// 获取或设置会员卡 Code 分配类型。 + /// + [Newtonsoft.Json.JsonProperty("code_mode")] + [System.Text.Json.Serialization.JsonPropertyName("code_mode")] + public string? CodeMode { get; set; } + + /// + /// 获取或设置是否展示会员等级。 + /// + [Newtonsoft.Json.JsonProperty("need_display_level")] + [System.Text.Json.Serialization.JsonPropertyName("need_display_level")] + public bool? RequireDisplayLevel { get; set; } + + /// + /// 获取或设置会员初始等级。 + /// + [Newtonsoft.Json.JsonProperty("init_level")] + [System.Text.Json.Serialization.JsonPropertyName("init_level")] + public string? InitializedLevel { get; set; } + + /// + /// 获取或设置商户请求单号。 + /// + [Newtonsoft.Json.JsonProperty("out_request_no")] + [System.Text.Json.Serialization.JsonPropertyName("out_request_no")] + public string OutRequestNumber { get; set; } = default!; + + /// + /// 获取或设置储值信息。 + /// + [Newtonsoft.Json.JsonProperty("balance_information")] + [System.Text.Json.Serialization.JsonPropertyName("balance_information")] + public Types.Balance? Balance { get; set; } + + /// + /// 获取或设置开卡信息。 + /// + [Newtonsoft.Json.JsonProperty("user_information_form")] + [System.Text.Json.Serialization.JsonPropertyName("user_information_form")] + public Types.UserForm? UserForm { get; set; } + + /// + /// 获取或设置补充说明信息。 + /// + [Newtonsoft.Json.JsonProperty("additional_statement")] + [System.Text.Json.Serialization.JsonPropertyName("additional_statement")] + public Types.AdditionalStatement? AdditionalStatement { get; set; } + + /// + /// 获取或设置是否启用动态码。 + /// + [Newtonsoft.Json.JsonProperty("need_dynamic_code")] + [System.Text.Json.Serialization.JsonPropertyName("need_dynamic_code")] + public bool? RequireDynamicCode { 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("update_time")] + [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.RFC3339DateTimeOffsetConverter))] + [System.Text.Json.Serialization.JsonPropertyName("update_time")] + [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.RFC3339DateTimeOffsetConverter))] + public DateTimeOffset UpdateTime { get; set; } + } + } + + /// + /// 获取或设置会员卡列表。 + /// + [Newtonsoft.Json.JsonProperty("data")] + [System.Text.Json.Serialization.JsonPropertyName("data")] + public Types.Card[] CardList { get; set; } = default!; + + /// + /// 获取或设置是否启用动态码。 + /// + [Newtonsoft.Json.JsonProperty("need_dynamic_code")] + [System.Text.Json.Serialization.JsonPropertyName("need_dynamic_code")] + public bool? RequireDynamicCode { get; set; } + + /// + /// 获取或设置分页大小。 + /// + [Newtonsoft.Json.JsonProperty("limit")] + [System.Text.Json.Serialization.JsonPropertyName("limit")] + public int Limit { get; set; } + + /// + /// 获取或设置分页开始位置。 + /// + [Newtonsoft.Json.JsonProperty("offset")] + [System.Text.Json.Serialization.JsonPropertyName("offset")] + public int Offset { get; set; } + + /// + /// 获取或设置活动总数量。 + /// + [Newtonsoft.Json.JsonProperty("total_count")] + [System.Text.Json.Serialization.JsonPropertyName("total_count")] + public int TotalCount { get; set; } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/MarketingMemberCardOpen/Card/UpdateMarketingMemberCardOpenCardRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/MarketingMemberCardOpen/Card/UpdateMarketingMemberCardOpenCardRequest.cs new file mode 100644 index 00000000..b91c0a86 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/MarketingMemberCardOpen/Card/UpdateMarketingMemberCardOpenCardRequest.cs @@ -0,0 +1,168 @@ +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models +{ + /// + /// 表示 [PATCH] /marketing/membercard-open/cards/{card_id} 接口的请求。 + /// + public class UpdateMarketingMemberCardOpenCardRequest : WechatTenpayRequest + { + public static class Types + { + public class Date : CreateMarketingMemberCardOpenCardRequest.Types.Date + { + } + + public class Balance : CreateMarketingMemberCardOpenCardRequest.Types.Balance + { + } + + public class UserForm + { + public static class Types + { + public class CustomField : CreateMarketingMemberCardOpenCardRequest.Types.UserForm.Types.CustomField + { + } + } + + /// + /// 获取或设置是否允许修改。 + /// + [Newtonsoft.Json.JsonProperty("can_modify_after_activate")] + [System.Text.Json.Serialization.JsonPropertyName("can_modify_after_activate")] + public bool? CanModifyAfterActivate { get; set; } + + /// + /// 获取或设置平台提供的通用开卡信息字段列表。 + /// + [Newtonsoft.Json.JsonProperty("common_field_list")] + [System.Text.Json.Serialization.JsonPropertyName("common_field_list")] + public IList? CommonFieldList { get; set; } + + /// + /// 获取或设置商户自定义的开卡信息字段列表。 + /// + [Newtonsoft.Json.JsonProperty("custom_field_list")] + [System.Text.Json.Serialization.JsonPropertyName("custom_field_list")] + public IList? CustomFieldList { get; set; } + } + + public class AdditionalStatement : CreateMarketingMemberCardOpenCardRequest.Types.AdditionalStatement + { + } + } + + /// + /// 获取或设置会员卡 ID。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public string CardId { get; set; } = string.Empty; + + /// + /// 获取或设置公众号 AppId。 + /// + [Newtonsoft.Json.JsonProperty("appid")] + [System.Text.Json.Serialization.JsonPropertyName("appid")] + public string? AppId { get; set; } + + /// + /// 获取或设置会员卡 Logo 媒体文件地址。 + /// + [Newtonsoft.Json.JsonProperty("logo_url")] + [System.Text.Json.Serialization.JsonPropertyName("logo_url")] + public string? LogoMediaUrl { get; set; } + + /// + /// 获取或设置卡名称。 + /// + [Newtonsoft.Json.JsonProperty("title")] + [System.Text.Json.Serialization.JsonPropertyName("title")] + public string? Title { get; set; } + + /// + /// 获取或设置背景图片媒体文件地址。 + /// + [Newtonsoft.Json.JsonProperty("background_picture_url")] + [System.Text.Json.Serialization.JsonPropertyName("background_picture_url")] + public string? BackgroundPictureMediaUrl { get; set; } + + /// + /// 获取或设置使用须知。 + /// + [Newtonsoft.Json.JsonProperty("description")] + [System.Text.Json.Serialization.JsonPropertyName("description")] + public string? Description { get; set; } + + /// + /// 获取或设置客服电话。 + /// + [Newtonsoft.Json.JsonProperty("service_phone")] + [System.Text.Json.Serialization.JsonPropertyName("service_phone")] + public string? ServicePhone { get; set; } + + /// + /// 获取或设置会员卡总库存。 + /// + [Newtonsoft.Json.JsonProperty("total_quantity")] + [System.Text.Json.Serialization.JsonPropertyName("total_quantity")] + public int? TotalQuantity { get; set; } + + /// + /// 获取或设置有效期。 + /// + [Newtonsoft.Json.JsonProperty("date_information")] + [System.Text.Json.Serialization.JsonPropertyName("date_information")] + public Types.Date? Date { get; set; } + + /// + /// 获取或设置会员卡 Code 分配类型。 + /// + [Newtonsoft.Json.JsonProperty("code_mode")] + [System.Text.Json.Serialization.JsonPropertyName("code_mode")] + public int? CodeMode { get; set; } + + /// + /// 获取或设置是否展示会员等级。 + /// + [Newtonsoft.Json.JsonProperty("need_display_level")] + [System.Text.Json.Serialization.JsonPropertyName("need_display_level")] + public bool? RequireDisplayLevel { get; set; } + + /// + /// 获取或设置会员初始等级。 + /// + [Newtonsoft.Json.JsonProperty("init_level")] + [System.Text.Json.Serialization.JsonPropertyName("init_level")] + public string? InitializedLevel { get; set; } + + /// + /// 获取或设置储值信息。 + /// + [Newtonsoft.Json.JsonProperty("balance_information")] + [System.Text.Json.Serialization.JsonPropertyName("balance_information")] + public Types.Balance? Balance { get; set; } + + /// + /// 获取或设置开卡信息。 + /// + [Newtonsoft.Json.JsonProperty("user_information_form")] + [System.Text.Json.Serialization.JsonPropertyName("user_information_form")] + public Types.UserForm? UserForm { get; set; } + + /// + /// 获取或设置补充说明信息。 + /// + [Newtonsoft.Json.JsonProperty("additional_statement")] + [System.Text.Json.Serialization.JsonPropertyName("additional_statement")] + public Types.AdditionalStatement? AdditionalStatement { get; set; } + + /// + /// 获取或设置是否启用动态码。 + /// + [Newtonsoft.Json.JsonProperty("need_dynamic_code")] + [System.Text.Json.Serialization.JsonPropertyName("need_dynamic_code")] + public bool? RequireDynamicCode { get; set; } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/MarketingMemberCardOpen/Card/UpdateMarketingMemberCardOpenCardResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/MarketingMemberCardOpen/Card/UpdateMarketingMemberCardOpenCardResponse.cs new file mode 100644 index 00000000..03ffd0ba --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/MarketingMemberCardOpen/Card/UpdateMarketingMemberCardOpenCardResponse.cs @@ -0,0 +1,9 @@ +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models +{ + /// + /// 表示 [PATCH] /marketing/membercard-open/cards/{card_id} 接口的响应。 + /// + public class UpdateMarketingMemberCardOpenCardResponse : WechatTenpayResponse + { + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/MarketingMemberCardOpen/Card/UpgradeMarketingMemberCardOpenCardRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/MarketingMemberCardOpen/Card/UpgradeMarketingMemberCardOpenCardRequest.cs new file mode 100644 index 00000000..d01c85b2 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/MarketingMemberCardOpen/Card/UpgradeMarketingMemberCardOpenCardRequest.cs @@ -0,0 +1,29 @@ +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models +{ + /// + /// 表示 [POST] /marketing/membercard-open/cards/{card_id}/upgrade 接口的请求。 + /// + public class UpgradeMarketingMemberCardOpenCardRequest : WechatTenpayRequest + { + /// + /// 获取或设置会员卡 ID。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public string CardId { get; set; } = string.Empty; + + /// + /// 获取或设置品牌 ID。 + /// + [Newtonsoft.Json.JsonProperty("brand_id")] + [System.Text.Json.Serialization.JsonPropertyName("brand_id")] + public string BrandId { get; set; } = string.Empty; + + /// + /// 获取或设置公众号 AppId。 + /// + [Newtonsoft.Json.JsonProperty("appid")] + [System.Text.Json.Serialization.JsonPropertyName("appid")] + public string AppId { get; set; } = string.Empty; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/MarketingMemberCardOpen/Card/UpgradeMarketingMemberCardOpenCardResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/MarketingMemberCardOpen/Card/UpgradeMarketingMemberCardOpenCardResponse.cs new file mode 100644 index 00000000..4441575d --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/MarketingMemberCardOpen/Card/UpgradeMarketingMemberCardOpenCardResponse.cs @@ -0,0 +1,9 @@ +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models +{ + /// + /// 表示 [POST] /marketing/membercard-open/cards/{card_id}/upgrade 接口的响应。 + /// + public class UpgradeMarketingMemberCardOpenCardResponse : WechatTenpayResponse + { + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/WechatTenpayClient.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/WechatTenpayClient.cs index 87efad0f..bd8c68bb 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/WechatTenpayClient.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/WechatTenpayClient.cs @@ -4,6 +4,7 @@ using System.Linq; using System.Net; using System.Net.Http; using System.Net.Http.Headers; +using System.Text; using System.Threading; using System.Threading.Tasks; using Flurl.Http; @@ -148,12 +149,13 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3 private async Task GetResposneAsync(IFlurlResponse flurlResponse) where T : WechatTenpayResponse, new() { - string contentType = flurlResponse.Headers.GetAll("Content-Type").FirstOrDefault() ?? string.Empty; - bool contentTypeIsNotJson = - (flurlResponse.StatusCode == (int)HttpStatusCode.NoContent) || - (flurlResponse.StatusCode == (int)HttpStatusCode.OK && !contentType.StartsWith("application/json") && !contentType.StartsWith("text/json")); + string mediaType = flurlResponse.Headers.GetAll("Content-Type").FirstOrDefault() ?? "application/octet-stream"; + bool jsonable = (flurlResponse.StatusCode != (int)HttpStatusCode.NoContent) && + (mediaType.StartsWith("application/json") || !mediaType.StartsWith("text/json")); + + byte[] bytes = await flurlResponse.GetBytesAsync().ConfigureAwait(false); + T result = jsonable ? JsonSerializer.Deserialize(Encoding.UTF8.GetString(bytes)) : new T(); - T result = contentTypeIsNotJson ? new T() : await flurlResponse.GetJsonAsync().ConfigureAwait(false); result.RawStatus = flurlResponse.StatusCode; result.RawHeaders = new ReadOnlyDictionary( flurlResponse.Headers @@ -163,7 +165,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3 v => string.Join(", ", v.Select(e => e.Value)) ) ); - result.RawBytes = await flurlResponse.ResponseMessage.Content.ReadAsByteArrayAsync().ConfigureAwait(false); + result.RawBytes = bytes; result.WechatpayRequestId = flurlResponse.Headers.GetAll("Request-ID").FirstOrDefault() ?? string.Empty; result.WechatpayNonce = flurlResponse.Headers.GetAll("Wechatpay-Nonce").FirstOrDefault() ?? string.Empty; result.WechatpayTimestamp = flurlResponse.Headers.GetAll("Wechatpay-Timestamp").FirstOrDefault() ?? string.Empty; diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/MarketingMemberCardOpen/Card/CreateMarketingMemberCardOpenCardRequest.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/MarketingMemberCardOpen/Card/CreateMarketingMemberCardOpenCardRequest.json new file mode 100644 index 00000000..6a682bde --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/MarketingMemberCardOpen/Card/CreateMarketingMemberCardOpenCardRequest.json @@ -0,0 +1,48 @@ +{ + "appid": "wxea9c30890f48d5ae", + "logo_url": "https://wxpaylogo.qpic.cn/wxpaylogo/PiajxSqBRaEIPAeia7Imvtsn7sYGNcEj33YzVvJF88ECQ19LXId8ZL2Q/0", + "brand": { + "brand_id": "1004", + "display_name": "微信支付" + }, + "title": "微信支付测试卡", + "background_picture_url": "https://wxpaylogo.qpic.cn/wxpaylogo/PiajxSqBRaEIPAeia7Imvtsn7sYGNcEj33YzVvJF88ECQ19LXId8ZL2Q/0", + "description": "使用本会员卡表示你同意xxx公司的协议", + "service_phone": "010-8877xxxx", + "code_type": "BAR_CODE", + "total_quantity": 5000000, + "date_information": { + "type": "FIX_TIME_RANGE", + "available_begin_time": "2020-05-20T13:29:35.120+08:00", + "available_end_time": "2030-05-20T13:29:35.120+08:00", + "available_day_after_receive": 200, + "wait_days_after_receive": 1 + }, + "code_mode": "SYSTEM_ALLOCATE", + "need_display_level": true, + "init_level": "白银会员", + "out_request_no": "100002322019090134234sfdf", + "balance_information": { + "need_balance": false, + "balance_appid": "wxea9c30890f48d5ae", + "balance_path": "pages/balance/balance", + "balance_url": "https://xxx.com" + }, + "user_information_form": { + "common_field_list": ["USER_FORM_FLAG_MOBILE", "USER_FORM_FLAG_SEX", "USER_FORM_FLAG_NAME", "USER_FORM_FLAG_BIRTHDAY"], + "custom_field_list": [ + { + "type": "TEXT", + "name": "喜欢的运动", + "values": ["篮球", "足球", "羽毛球"] + } + ] + }, + "additional_statement": { + "title": "xxx会员卡使用须知", + "url": "https://xxx.111.com", + "appid": "wxea9c30890f48d5ae", + "path": "pages/statement/statement" + }, + "need_dynamic_code": false +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/MarketingMemberCardOpen/Card/CreateMarketingMemberCardOpenCardResponse.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/MarketingMemberCardOpen/Card/CreateMarketingMemberCardOpenCardResponse.json new file mode 100644 index 00000000..93d76abc --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/MarketingMemberCardOpen/Card/CreateMarketingMemberCardOpenCardResponse.json @@ -0,0 +1,53 @@ +{ + "card_id": "pbLatjvWOibDc5-TBnbUk1pD12o0", + "create_time": "2020-05-20T13:29:35.120+08:00", + "update_time": "2020-05-20T13:29:35.120+08:00", + "remain_quantity": 1004, + "status": "NOT_APPROVE", + "brand": { + "brand_id": "1004", + "display_name": "微信支付" + }, + "appid": "wxea9c30890f48d5ae", + "logo_url": "https://wxpaylogo.qpic.cn/wxpaylogo/PiajxSqBRaEIPAeia7Imvtsn7sYGNcEj33YzVvJF88ECQ19LXId8ZL2Q/0", + "title": "微信支付测试卡", + "background_picture_url": "https://wxpaylogo.qpic.cn/wxpaylogo/PiajxSqBRaEIPAeia7Imvtsn7sYGNcEj33YzVvJF88ECQ19LXId8ZL2Q/0", + "description": "使用本会员卡表示你同意xxx公司的协议", + "service_phone": "010-8877xxxx", + "code_type": "BAR_CODE", + "total_quantity": 5000000, + "date_information": { + "type": "FIX_TIME_RANGE", + "available_begin_time": "2020-05-20T13:29:35.120+08:00", + "available_end_time": "2030-05-20T13:29:35.120+08:00", + "available_day_after_receive": 200, + "wait_days_after_receive": 1 + }, + "code_mode": "SYSTEM_ALLOCATE", + "need_display_level": true, + "init_level": "白银会员", + "out_request_no": "100002322019090134234sfdf", + "balance_information": { + "need_balance": false, + "balance_appid": "wxea9c30890f48d5ae", + "balance_path": "pages/balance/balance", + "balance_url": "https://xxx.com" + }, + "user_information_form": { + "common_field_list": ["USER_FORM_FLAG_MOBILE", "USER_FORM_FLAG_SEX", "USER_FORM_FLAG_NAME", "USER_FORM_FLAG_BIRTHDAY"], + "custom_field_list": [ + { + "type": "TEXT", + "name": "喜欢的运动", + "values": ["篮球", "足球", "羽毛球"] + } + ] + }, + "additional_statement": { + "title": "xxx会员卡使用须知", + "url": "https://xxx.111.com", + "appid": "wxea9c30890f48d5ae", + "path": "pages/statement/statement" + }, + "need_dynamic_code": false +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/MarketingMemberCardOpen/Card/DepositMarketingMemberCardOpenCardCodesRequest.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/MarketingMemberCardOpen/Card/DepositMarketingMemberCardOpenCardCodesRequest.json new file mode 100644 index 00000000..0a52295b --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/MarketingMemberCardOpen/Card/DepositMarketingMemberCardOpenCardCodesRequest.json @@ -0,0 +1,3 @@ +{ + "code": ["478515832665"] +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/MarketingMemberCardOpen/Card/DepositMarketingMemberCardOpenCardCodesResponse.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/MarketingMemberCardOpen/Card/DepositMarketingMemberCardOpenCardCodesResponse.json new file mode 100644 index 00000000..53321abb --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/MarketingMemberCardOpen/Card/DepositMarketingMemberCardOpenCardCodesResponse.json @@ -0,0 +1,8 @@ +{ + "data": [ + { + "code": "478515832665", + "result": "SUCCESS" + } + ] +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/MarketingMemberCardOpen/Card/GetMarketingMemberCardOpenCardByCardIdRequest.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/MarketingMemberCardOpen/Card/GetMarketingMemberCardOpenCardByCardIdRequest.json new file mode 100644 index 00000000..22fdca1b --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/MarketingMemberCardOpen/Card/GetMarketingMemberCardOpenCardByCardIdRequest.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/MarketingMemberCardOpen/Card/GetMarketingMemberCardOpenCardByCardIdResponse.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/MarketingMemberCardOpen/Card/GetMarketingMemberCardOpenCardByCardIdResponse.json new file mode 100644 index 00000000..d6aa6bb0 --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/MarketingMemberCardOpen/Card/GetMarketingMemberCardOpenCardByCardIdResponse.json @@ -0,0 +1,92 @@ +{ + "card_id": "pbLatjvWOibDc5-TBnbUk1pD12o0", + "create_time": "2020-05-20T13:29:35.120+08:00", + "update_time": "2020-05-20T13:29:35.120+08:00", + "remain_quantity": 20, + "status": "NOT_APPROVE", + "brand": { + "brand_id": "1004", + "display_name": "微信支付" + }, + "appid": "wxea9c30890f48d5ae", + "logo_url": "https://wxpaylogo.qpic.cn/wxpaylogo/PiajxSqBRaEIPAeia7Imvtsn7sYGNcEj33YzVvJF88ECQ19LXId8ZL2Q/0", + "title": "微信支付测试卡", + "background_picture_url": "https://wxpaylogo.qpic.cn/wxpaylogo/PiajxSqBRaEIPAeia7Imvtsn7sYGNcEj33YzVvJF88ECQ19LXId8ZL2Q/0", + "description": "使用本会员卡表示你同意xxx公司的协议", + "service_phone": "010-8877xxxx", + "code_type": "BAR_CODE", + "total_quantity": 5000000, + "date_information": { + "type": "FIX_TIME_RANGE", + "available_begin_time": "2020-05-20T13:29:35.120+08:00", + "available_end_time": "2030-05-20T13:29:35.120+08:00", + "available_day_after_receive": 200, + "wait_days_after_receive": 2 + }, + "code_mode": "SYSTEM_ALLOCATE", + "need_display_level": true, + "init_level": "白银会员", + "out_request_no": "100002322019090134234sfdf", + "balance_information": { + "need_balance": false, + "balance_appid": "wxea9c30890f48d5ae", + "balance_path": "pages/balance/balance", + "balance_url": "https://xxx.com" + }, + "user_information_form": { + "can_modify_after_activate": false, + "common_field_list": ["USER_FORM_FLAG_MOBILE", "USER_FORM_FLAG_SEX", "USER_FORM_FLAG_NAME", "USER_FORM_FLAG_BIRTHDAY"], + "custom_field_list": [ + { + "type": "TEXT", + "name": "喜欢的运动", + "values": ["篮球", "足球", "羽毛球"] + } + ] + }, + "additional_statement": { + "title": "xxx会员卡使用须知", + "url": "https://xxx.111.com", + "appid": "wxea9c30890f48d5ae", + "path": "pages/statement/statement" + }, + "bonus": { + "init_bonus": 100, + "bonus_value_word": "我的积分", + "bonus_cost_title": "积分兑换", + "bonus_cost_word": "500积分=2小时免费停车券", + "bonus_jump_word": "更多礼品", + "bonus_jump_appid": "wxea9c30a90fs8d3fe", + "bonus_jump_path": "/pages/bonus/bonus", + "bonus_support_appid": "wxea9c30a90fs8d3fe", + "bonus_support_path": "pages/selfbonus/selfbonus" + }, + "favor": { + "show_coupon": true, + "member_price_word": "周二会员全场八折", + "member_price_appid": "wxea9c30a90fs8d3fe", + "member_price_path": "pages/favor/favor" + }, + "service_modules": [ + { + "service_module_id": "666", + "jump_miniprogram": { + "appid": "wx37178d097a6851d8", + "path": "pages/index/index" + } + } + ], + "fapiao": { + "fapiao_jump_word": "查看我的发票", + "fapiao_jump_appid": "wxea9c30a90fs8d3fe", + "fapiao_jump_path": "pages/fapiao/fapiao" + }, + "guide": { + "staff_name": "酒店管家-何小明", + "head_image_url": "https://wxpaylogo.qpic.cn/wxpaylogo/PiajxSqBRaEIPAeia7Imvtsn7sYGNcEj33YzVvJF88ECQ19LXId8ZL2Q/0", + "contact_information_name": "微信号", + "contact_information_value": "weixin123", + "phone_number": "0755-12345677" + }, + "need_dynamic_code": false +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/MarketingMemberCardOpen/Card/QueryMarketingMemberCardOpenCardsRequest.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/MarketingMemberCardOpen/Card/QueryMarketingMemberCardOpenCardsRequest.json new file mode 100644 index 00000000..22fdca1b --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/MarketingMemberCardOpen/Card/QueryMarketingMemberCardOpenCardsRequest.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/MarketingMemberCardOpen/Card/QueryMarketingMemberCardOpenCardsResponse.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/MarketingMemberCardOpen/Card/QueryMarketingMemberCardOpenCardsResponse.json new file mode 100644 index 00000000..54dc456a --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/MarketingMemberCardOpen/Card/QueryMarketingMemberCardOpenCardsResponse.json @@ -0,0 +1,61 @@ +{ + "data": [ + { + "card_id": "pbLatjvWOibDc5-TBnbUk1pD12o0", + "create_time": "2020-05-20T13:29:35.120+08:00", + "update_time": "2020-05-20T13:29:35.120+08:00", + "remain_quantity": 20, + "status": "NOT_APPROVE", + "brand": { + "brand_id": "1004", + "display_name": "微信支付" + }, + "appid": "wxea9c30890f48d5ae", + "logo_url": "https://wxpaylogo.qpic.cn/wxpaylogo/PiajxSqBRaEIPAeia7Imvtsn7sYGNcEj33YzVvJF88ECQ19LXId8ZL2Q/0", + "title": "微信支付测试卡", + "background_picture_url": "https://wxpaylogo.qpic.cn/wxpaylogo/PiajxSqBRaEIPAeia7Imvtsn7sYGNcEj33YzVvJF88ECQ19LXId8ZL2Q/0", + "description": "使用本会员卡表示你同意xxx公司的协议,解释权归xxx公司所有", + "service_phone": "010-8877xxxx", + "code_type": "BAR_CODE", + "total_quantity": 5000000, + "date_information": { + "type": "FIX_TIME_RANGE", + "available_begin_time": "2020-05-20T13:29:35.120+08:00", + "available_end_time": "2030-05-20T13:29:35.120+08:00", + "available_day_after_receive": 200, + "wait_days_after_receive": 2 + }, + "code_mode": "SYSTEM_ALLOCATE", + "need_display_level": true, + "init_level": "白银会员", + "out_request_no": "100002322019090134234sfdf", + "balance_information": { + "need_balance": false, + "balance_appid": "wxea9c30890f48d5ae", + "balance_path": "pages/balance/balance", + "balance_url": "https://xxx.com" + }, + "user_information_form": { + "can_modify_after_activate": false, + "common_field_list": ["USER_FORM_FLAG_MOBILE", "USER_FORM_FLAG_SEX", "USER_FORM_FLAG_NAME", "USER_FORM_FLAG_BIRTHDAY"], + "custom_field_list": [ + { + "type": "TEXT", + "name": "喜欢的运动", + "values": ["篮球", "足球", "羽毛球"] + } + ] + }, + "additional_statement": { + "title": "xxx会员卡使用须知", + "url": "https://xxx.111.com", + "appid": "wxea9c30890f48d5ae", + "path": "pages/statement/statement" + } + } + ], + "need_dynamic_code": false, + "total_count": 20, + "offset": 1, + "limit": 20 +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/MarketingMemberCardOpen/Card/UpdateMarketingMemberCardOpenCardRequest.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/MarketingMemberCardOpen/Card/UpdateMarketingMemberCardOpenCardRequest.json new file mode 100644 index 00000000..a4aba15b --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/MarketingMemberCardOpen/Card/UpdateMarketingMemberCardOpenCardRequest.json @@ -0,0 +1,41 @@ +{ + "appid": "wxea9c30890f48d5ae", + "logo_url": "https://wxpaylogo.qpic.cn/wxpaylogo/PiajxSqBRaEIPAeia7Imvtsn7sYGNcEj33YzVvJF88ECQ19LXId8ZL2Q/0", + "title": "微信支付测试卡", + "background_picture_url": "https://wxpaylogo.qpic.cn/wxpaylogo/PiajxSqBRaEIPAeia7Imvtsn7sYGNcEj33YzVvJF88ECQ19LXId8ZL2Q/0", + "description": "使用本会员卡表示你同意xxx公司的协议", + "service_phone": "010-8877xxxx", + "total_quantity": 5000000, + "date_information": { + "type": "FIX_TIME_RANGE", + "available_end_time": "2030-05-20T13:29:35.120+08:00", + "available_day_after_receive": 200, + "wait_days_after_receive": 2 + }, + "need_display_level": false, + "init_level": "白银会员", + "balance_information": { + "need_balance": false, + "balance_appid": "wxea9c30890f48d5ae", + "balance_path": "pages/balance/balance", + "balance_url": "https://xxx.com" + }, + "user_information_form": { + "can_modify_after_activate": false, + "common_field_list": ["USER_FORM_FLAG_MOBILE", "USER_FORM_FLAG_SEX"], + "custom_field_list": [ + { + "type": "TEXT", + "name": "喜欢的运动", + "values": ["篮球", "足球", "羽毛球"] + } + ] + }, + "additional_statement": { + "title": "xxx会员卡使用须知", + "url": "https://xxx.111.com", + "appid": "wxea9c30890f48d5ae", + "path": "pages/statement/statement" + }, + "need_dynamic_code": false +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/MarketingMemberCardOpen/Card/UpdateMarketingMemberCardOpenCardResponse.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/MarketingMemberCardOpen/Card/UpdateMarketingMemberCardOpenCardResponse.json new file mode 100644 index 00000000..22fdca1b --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/MarketingMemberCardOpen/Card/UpdateMarketingMemberCardOpenCardResponse.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/MarketingMemberCardOpen/Card/UpgradeMarketingMemberCardOpenCardRequest.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/MarketingMemberCardOpen/Card/UpgradeMarketingMemberCardOpenCardRequest.json new file mode 100644 index 00000000..6e33538f --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/MarketingMemberCardOpen/Card/UpgradeMarketingMemberCardOpenCardRequest.json @@ -0,0 +1,4 @@ +{ + "brand_id": "1001622624", + "appid": "wxea9c30890f48d5ae" +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/MarketingMemberCardOpen/Card/UpgradeMarketingMemberCardOpenCardResponse.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/MarketingMemberCardOpen/Card/UpgradeMarketingMemberCardOpenCardResponse.json new file mode 100644 index 00000000..22fdca1b --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/MarketingMemberCardOpen/Card/UpgradeMarketingMemberCardOpenCardResponse.json @@ -0,0 +1 @@ +{} \ No newline at end of file