diff --git a/docs/WechatTenpayV3/Basic_ModelDefinition.md b/docs/WechatTenpayV3/Basic_ModelDefinition.md
index 43322e58..80473643 100644
--- a/docs/WechatTenpayV3/Basic_ModelDefinition.md
+++ b/docs/WechatTenpayV3/Basic_ModelDefinition.md
@@ -61,6 +61,7 @@
| √ | 运营工具:点金计划 | 合作伙伴 | |
| × | 运营工具:现金红包 | 直连商户 & 合作伙伴 | 官方未提供 v3 API |
| √ | 运营工具:品牌红包 | 直连商户 | |
+| √ | 运营工具:商家名片会员 | 合作伙伴 | |
| √ | 扩展工具:分账 | 直连商户 & 合作伙伴 | |
| √ | 扩展工具:连锁品牌分账 | 合作伙伴 | |
| √ | 扩展工具:消费者投诉 2.0 | 直连商户 & 合作伙伴 | |
@@ -523,6 +524,50 @@
- 查询银行转账充值结果:`GetBankTransferRechargeByOutRechargeNumber`
+ - 商家名片会员
+
+ - 会员卡模板管理:
+
+ - 创建会员卡模板:`CreateBrandPartnerCardMemberCard`
+
+ - 查询会员卡模板列表:`QueryBrandPartnerCardMemberCards`
+
+ - 查询会员卡模板信息:`GetBrandPartnerCardMemberCardByCardId`
+
+ - 修改会员卡模板信息:`UpdateBrandPartnerCardMemberCard`
+
+ - 作废会员卡模板:`InvalidateBrandPartnerCardMemberCard`
+
+ - 用户会员卡管理:
+
+ - 查询用户会员卡信息:`GetBrandPartnerCardMemberUserCardByUserCardCode`
+
+ - 查询用户在品牌下所有会员卡:`QueryBrandPartnerCardMemberUserCards`
+
+ - 修改用户会员卡信息:`UpdateBrandPartnerCardMemberUserCard`
+
+ - 作废用户会员卡:`InvalidateBrandPartnerCardMemberUserCard`
+
+ - 用户开通会员卡:
+
+ - 入会组件预授权:`CreateBrandPartnerCardMemberPreauthToken`
+
+ - 商家同步会员身份:
+
+ - 根据 OpenId 导入用户会员卡:`ImportBrandPartnerCardMemberUserCardByOpenId`
+
+ - 同步会员开通结果:`ConfirmBrandPartnerCardMemberUserCard`
+
+ - 用户动态:
+
+ - 创建用户动态信息:`CreateBrandPartnerCardMemberUserFeed`
+
+ - 会员卡积分兑券:
+
+ - 同步积分余额:`SyncBrandPartnerCardMemberUserPoint`
+
+ - 同步积分兑券结果:`ConfirmBrandPartnerCardMemberUserPointExchangeCoupon`
+
- 扩展工具
- 分账
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Events/_Partner/BrandCardMember/BrandPartnerCardMemberPointExchangeCouponResource.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Events/_Partner/BrandCardMember/BrandPartnerCardMemberPointExchangeCouponResource.cs
new file mode 100644
index 00000000..c9a6b973
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Events/_Partner/BrandCardMember/BrandPartnerCardMemberPointExchangeCouponResource.cs
@@ -0,0 +1,89 @@
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Events
+{
+ ///
+ /// 表示 BRAND_MEMBER_CARD_SP.POINT_EXCHANGE_COUPON (仅限服务商)通知的数据。
+ ///
+ /// REF:
+ ///
+ ///
+ ///
+ public class BrandPartnerCardMemberPointExchangeCouponResource : WechatTenpayEvent.Types.IDecryptedResource
+ {
+ ///
+ /// 获取或设置积分兑券 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("record_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("record_id")]
+ public string RecordId { get; set; } = default!;
+
+ ///
+ /// 获取或设置积分兑券模板 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("exchange_coupon_template_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("exchange_coupon_template_id")]
+ public string ExchangeCouponTemplateId { get; set; } = default!;
+
+ ///
+ /// 获取或设置会员卡 Code。
+ ///
+ [Newtonsoft.Json.JsonProperty("user_card_code")]
+ [System.Text.Json.Serialization.JsonPropertyName("user_card_code")]
+ public string UserCardCode { get; set; } = default!;
+
+ ///
+ /// 获取或设置会员卡模板 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("card_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("card_id")]
+ public string CardId { get; set; } = default!;
+
+ ///
+ /// 获取或设置品牌 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("brand_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("brand_id")]
+ public string BrandId { get; set; } = default!;
+
+ ///
+ /// 获取或设置商家 AppId。
+ ///
+ [Newtonsoft.Json.JsonProperty("appid")]
+ [System.Text.Json.Serialization.JsonPropertyName("appid")]
+ public string AppId { get; set; } = default!;
+
+ ///
+ /// 获取或设置用户的 OpenId。
+ ///
+ [Newtonsoft.Json.JsonProperty("openid")]
+ [System.Text.Json.Serialization.JsonPropertyName("openid")]
+ public string OpenId { get; set; } = default!;
+
+ ///
+ /// 获取或设置消耗积分数。
+ ///
+ [Newtonsoft.Json.JsonProperty("deduct_points")]
+ [System.Text.Json.Serialization.JsonPropertyName("deduct_points")]
+ public int DeductPoints { get; set; }
+
+ ///
+ /// 获取或设置商品券 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("product_coupon_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("product_coupon_id")]
+ public string ProductCouponId { get; set; } = default!;
+
+ ///
+ /// 获取或设置商品券批次类型。
+ ///
+ [Newtonsoft.Json.JsonProperty("product_coupon_stock_type")]
+ [System.Text.Json.Serialization.JsonPropertyName("product_coupon_stock_type")]
+ public string ProductCouponStockType { get; set; } = default!;
+
+ ///
+ /// 获取或设置商品券批次 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("stock_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("stock_id")]
+ public string StockId { get; set; } = default!;
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Events/_Partner/BrandCardMember/BrandPartnerCardMemberUserCardResource.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Events/_Partner/BrandCardMember/BrandPartnerCardMemberUserCardResource.cs
new file mode 100644
index 00000000..2f3c7de3
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Events/_Partner/BrandCardMember/BrandPartnerCardMemberUserCardResource.cs
@@ -0,0 +1,209 @@
+using System;
+
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Events
+{
+ ///
+ /// 表示 BRAND_MEMBER_CARD_SP.USER_CARD.CREATE (仅限服务商)通知的数据。
+ ///
+ /// REF:
+ ///
+ ///
+ ///
+ public class BrandPartnerCardMemberUserCardResource : WechatTenpayEvent.Types.IDecryptedResource
+ {
+ public static class Types
+ {
+ public class ValidDateInfo : Models.QueryBrandPartnerCardMemberUserCardsResponse.Types.UserCard.Types.ValidDateInfo
+ {
+ }
+
+ public class UserInfo
+ {
+ public static class Types
+ {
+ public class CommonField
+ {
+ ///
+ /// 获取或设置字段名称。
+ ///
+ [Newtonsoft.Json.JsonProperty("name")]
+ [System.Text.Json.Serialization.JsonPropertyName("name")]
+ public string Name { get; set; } = default!;
+
+ ///
+ /// 获取或设置字段值。
+ ///
+ [Newtonsoft.Json.JsonProperty("value")]
+ [System.Text.Json.Serialization.JsonPropertyName("value")]
+ public string? Value { get; set; }
+ }
+
+ public class CustomField
+ {
+ ///
+ /// 获取或设置字段名称。
+ ///
+ [Newtonsoft.Json.JsonProperty("name")]
+ [System.Text.Json.Serialization.JsonPropertyName("name")]
+ public string Name { get; set; } = default!;
+
+ ///
+ /// 获取或设置字段值。
+ ///
+ [Newtonsoft.Json.JsonProperty("user_chosen_values")]
+ [System.Text.Json.Serialization.JsonPropertyName("user_chosen_values")]
+ public string[]? Values { get; set; }
+ }
+ }
+
+ ///
+ /// 获取或设置通用开卡信息字段列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("common_field_list")]
+ [System.Text.Json.Serialization.JsonPropertyName("common_field_list")]
+ public Types.CommonField[]? CommonFieldList { get; set; }
+
+ ///
+ /// 获取或设置自定义开卡信息字段列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("custom_field_list")]
+ [System.Text.Json.Serialization.JsonPropertyName("custom_field_list")]
+ public Types.CustomField[]? CustomFieldList { get; set; }
+ }
+ }
+
+ ///
+ /// 获取或设置会员卡 Code。
+ ///
+ [Newtonsoft.Json.JsonProperty("user_card_code")]
+ [System.Text.Json.Serialization.JsonPropertyName("user_card_code")]
+ public string UserCardCode { get; set; } = default!;
+
+ ///
+ /// 获取或设置会员卡模板 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("card_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("card_id")]
+ public string CardId { get; set; } = default!;
+
+ ///
+ /// 获取或设置品牌 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("brand_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("brand_id")]
+ public string BrandId { get; set; } = default!;
+
+ ///
+ /// 获取或设置用户的 OpenId。
+ ///
+ [Newtonsoft.Json.JsonProperty("openid")]
+ [System.Text.Json.Serialization.JsonPropertyName("openid")]
+ public string OpenId { get; set; } = default!;
+
+ ///
+ /// 获取或设置会员卡类型。
+ ///
+ [Newtonsoft.Json.JsonProperty("card_type")]
+ [System.Text.Json.Serialization.JsonPropertyName("card_type")]
+ public string CardType { get; set; } = default!;
+
+ ///
+ /// 获取或设置会员卡背景颜色。
+ ///
+ [Newtonsoft.Json.JsonProperty("card_color")]
+ [System.Text.Json.Serialization.JsonPropertyName("card_color")]
+ public string CardColor { get; set; } = default!;
+
+ ///
+ /// 获取或设置会员卡图片 URL。
+ ///
+ [Newtonsoft.Json.JsonProperty("card_picture_url")]
+ [System.Text.Json.Serialization.JsonPropertyName("card_picture_url")]
+ public string CardPictureUrl { get; set; } = default!;
+
+ ///
+ /// 获取或设置用户的手机号码。
+ ///
+ [Newtonsoft.Json.JsonProperty("phone_number")]
+ [System.Text.Json.Serialization.JsonPropertyName("phone_number")]
+ public string? MobileNumber { get; set; }
+
+ ///
+ /// 获取或设置会员等级。
+ ///
+ [Newtonsoft.Json.JsonProperty("level")]
+ [System.Text.Json.Serialization.JsonPropertyName("level")]
+ public string? Level { get; set; }
+
+ ///
+ /// 获取或设置会员卡有效期信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("valid_date_information")]
+ [System.Text.Json.Serialization.JsonPropertyName("valid_date_information")]
+ public Types.ValidDateInfo? ValidDateInfo { get; set; }
+
+ ///
+ /// 获取或设置领取时间。
+ ///
+ [Newtonsoft.Json.JsonProperty("pickup_time")]
+ [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.Rfc3339DateTimeOffsetConverter))]
+ [System.Text.Json.Serialization.JsonPropertyName("pickup_time")]
+ [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.Rfc3339DateTimeOffsetConverter))]
+ public DateTimeOffset PickupTime { get; set; }
+
+ ///
+ /// 获取或设置用户开卡信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("user_information")]
+ [System.Text.Json.Serialization.JsonPropertyName("user_information")]
+ public Types.UserInfo? UserInfo { get; set; }
+
+ ///
+ /// 获取或设置附加数据。
+ ///
+ [Newtonsoft.Json.JsonProperty("attach")]
+ [System.Text.Json.Serialization.JsonPropertyName("attach")]
+ public string? Attachment { get; set; }
+
+ ///
+ /// 获取或设置会员卡状态。
+ ///
+ [Newtonsoft.Json.JsonProperty("user_card_state")]
+ [System.Text.Json.Serialization.JsonPropertyName("user_card_state")]
+ public string State { get; set; } = default!;
+
+ ///
+ /// 获取或设置作废原因。
+ ///
+ [Newtonsoft.Json.JsonProperty("invalid_reason")]
+ [System.Text.Json.Serialization.JsonPropertyName("invalid_reason")]
+ public string? InvalidReason { get; set; }
+
+ ///
+ /// 获取或设置作废时间。
+ ///
+ [Newtonsoft.Json.JsonProperty("invalid_time")]
+ [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.Rfc3339DateTimeOffsetConverter))]
+ [System.Text.Json.Serialization.JsonPropertyName("invalid_time")]
+ [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.Rfc3339DateTimeOffsetConverter))]
+ public DateTimeOffset? InvalidTime { get; set; }
+
+ ///
+ /// 获取或设置创建时间。
+ ///
+ [Newtonsoft.Json.JsonProperty("create_time")]
+ [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.Rfc3339DateTimeOffsetConverter))]
+ [System.Text.Json.Serialization.JsonPropertyName("create_time")]
+ [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.Rfc3339DateTimeOffsetConverter))]
+ public DateTimeOffset CreateTime { get; set; }
+
+ ///
+ /// 获取或设置更新时间。
+ ///
+ [Newtonsoft.Json.JsonProperty("modify_time")]
+ [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.Rfc3339DateTimeOffsetConverter))]
+ [System.Text.Json.Serialization.JsonPropertyName("modify_time")]
+ [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.Rfc3339DateTimeOffsetConverter))]
+ public DateTimeOffset ModifyTime { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Events/_Partner/BrandCardMember/BrandPartnerCardMemberUserPointResource.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Events/_Partner/BrandCardMember/BrandPartnerCardMemberUserPointResource.cs
new file mode 100644
index 00000000..0ddb53da
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Events/_Partner/BrandCardMember/BrandPartnerCardMemberUserPointResource.cs
@@ -0,0 +1,40 @@
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Events
+{
+ ///
+ /// 表示 BRAND_MEMBER_CARD_SP.SYNC_USER_POINT (仅限服务商)通知的数据。
+ ///
+ /// REF:
+ ///
+ ///
+ ///
+ public class BrandPartnerCardMemberUserPointResource : WechatTenpayEvent.Types.IDecryptedResource
+ {
+ ///
+ /// 获取或设置会员卡 Code。
+ ///
+ [Newtonsoft.Json.JsonProperty("user_card_code")]
+ [System.Text.Json.Serialization.JsonPropertyName("user_card_code")]
+ public string UserCardCode { get; set; } = default!;
+
+ ///
+ /// 获取或设置会员卡模板 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("card_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("card_id")]
+ public string CardId { get; set; } = default!;
+
+ ///
+ /// 获取或设置品牌 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("brand_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("brand_id")]
+ public string BrandId { get; set; } = default!;
+
+ ///
+ /// 获取或设置用户的 OpenId。
+ ///
+ [Newtonsoft.Json.JsonProperty("openid")]
+ [System.Text.Json.Serialization.JsonPropertyName("openid")]
+ public string OpenId { get; set; } = default!;
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecuteBrandPartnerCardMemberExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecuteBrandPartnerCardMemberExtensions.cs
new file mode 100644
index 00000000..583d7aec
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecuteBrandPartnerCardMemberExtensions.cs
@@ -0,0 +1,366 @@
+using System;
+using System.Net.Http;
+using System.Threading;
+using System.Threading.Tasks;
+using Flurl.Http;
+
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3
+{
+ public static class WechatTenpayClientExecuteBrandPartnerCardMemberExtensions
+ {
+ ///
+ /// 异步调用 [POST] /brand/partner/card-member/pre-auth-tokens 接口。
+ ///
+ /// REF:
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteCreateBrandPartnerCardMemberPreauthTokenAsync(this WechatTenpayClient client, Models.CreateBrandPartnerCardMemberPreauthTokenRequest 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
+ .CreateFlurlRequest(request, HttpMethod.Post, "brand", "partner", "card-member", "pre-auth-tokens");
+
+ return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
+ }
+
+ #region Cards
+ ///
+ /// 异步调用 [POST] /brand/partner/card-member/cards 接口。
+ ///
+ /// REF:
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteCreateBrandPartnerCardMemberCardAsync(this WechatTenpayClient client, Models.CreateBrandPartnerCardMemberCardRequest 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
+ .CreateFlurlRequest(request, HttpMethod.Post, "brand", "partner", "card-member", "cards");
+
+ return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
+ }
+
+ ///
+ /// 异步调用 [GET] /brand/partner/card-member/cards 接口。
+ ///
+ /// REF:
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteQueryBrandPartnerCardMemberCardsAsync(this WechatTenpayClient client, Models.QueryBrandPartnerCardMemberCardsRequest 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
+ .CreateFlurlRequest(request, HttpMethod.Get, "brand", "partner", "card-member", "cards")
+ .SetQueryParam("brand_id", request.BrandId)
+ .SetQueryParam("state", request.State)
+ .SetQueryParam("offset", request.Offset)
+ .SetQueryParam("limit", request.Limit);
+
+ return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
+ }
+
+ ///
+ /// 异步调用 [GET] /brand/partner/card-member/cards/{card_id} 接口。
+ ///
+ /// REF:
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteGetBrandPartnerCardMemberCardByCardIdAsync(this WechatTenpayClient client, Models.GetBrandPartnerCardMemberCardByCardIdRequest 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
+ .CreateFlurlRequest(request, HttpMethod.Get, "brand", "partner", "card-member", "cards", request.CardId)
+ .SetQueryParam("brand_id", request.BrandId);
+
+ return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
+ }
+
+ ///
+ /// 异步调用 [PATCH] /brand/partner/card-member/cards/{card_id} 接口。
+ ///
+ /// REF:
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteUpdateBrandPartnerCardMemberCardAsync(this WechatTenpayClient client, Models.UpdateBrandPartnerCardMemberCardRequest 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
+ .CreateFlurlRequest(request, new HttpMethod("PATCH"), "brand", "partner", "card-member", "cards", request.CardId);
+
+ return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
+ }
+
+ ///
+ /// 异步调用 [POST] /brand/partner/card-member/cards/{card_id}/invalidate 接口。
+ ///
+ /// REF:
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteInvalidateBrandPartnerCardMemberCardAsync(this WechatTenpayClient client, Models.InvalidateBrandPartnerCardMemberCardRequest 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
+ .CreateFlurlRequest(request, HttpMethod.Post, "brand", "partner", "card-member", "cards", request.CardId, "invalidate");
+
+ return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
+ }
+ #endregion
+
+ #region UserCards
+ ///
+ /// 异步调用 [GET] /brand/partner/card-member/user-cards 接口。
+ ///
+ /// REF:
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteQueryBrandPartnerCardMemberUserCardsAsync(this WechatTenpayClient client, Models.QueryBrandPartnerCardMemberUserCardsRequest 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
+ .CreateFlurlRequest(request, HttpMethod.Get, "brand", "partner", "card-member", "user-cards")
+ .SetQueryParam("brand_id", request.BrandId)
+ .SetQueryParam("openid", request.OpenId)
+ .SetQueryParam("user_card_state", request.State)
+ .SetQueryParam("offset", request.Offset)
+ .SetQueryParam("limit", request.Limit);
+
+ return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
+ }
+
+ ///
+ /// 异步调用 [GET] /brand/partner/card-member/user-cards/{user_card_code} 接口。
+ ///
+ /// REF:
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteGetBrandPartnerCardMemberUserCardByUserCardCodeAsync(this WechatTenpayClient client, Models.GetBrandPartnerCardMemberUserCardByUserCardCodeRequest 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
+ .CreateFlurlRequest(request, HttpMethod.Get, "brand", "partner", "card-member", "user-cards", request.UserCardCode)
+ .SetQueryParam("brand_id", request.BrandId)
+ .SetQueryParam("card_id", request.CardId)
+ .SetQueryParam("openid", request.OpenId);
+
+ return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
+ }
+
+ ///
+ /// 异步调用 [PATCH] /brand/partner/card-member/user-cards/{user_card_code} 接口。
+ ///
+ /// REF:
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteUpdateBrandPartnerCardMemberUserCardAsync(this WechatTenpayClient client, Models.UpdateBrandPartnerCardMemberUserCardRequest 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
+ .CreateFlurlRequest(request, new HttpMethod("PATCH"), "brand", "partner", "card-member", "user-cards", request.UserCardCode)
+ .SetQueryParam("card_id", request.CardId);
+
+ return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
+ }
+
+ ///
+ /// 异步调用 [POST] /brand/partner/card-member/user-cards/{user_card_code}/invalidate 接口。
+ ///
+ /// REF:
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteInvalidateBrandPartnerCardMemberUserCardAsync(this WechatTenpayClient client, Models.InvalidateBrandPartnerCardMemberUserCardRequest 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
+ .CreateFlurlRequest(request, HttpMethod.Post, "brand", "partner", "card-member", "user-cards", request.UserCardCode, "invalidate")
+ .SetQueryParam("brand_id", request.BrandId)
+ .SetQueryParam("card_id", request.CardId);
+
+ return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
+ }
+
+ ///
+ /// 异步调用 [POST] /brand/partner/card-member/user-cards/import-by-openid 接口。
+ ///
+ /// REF:
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteImportBrandPartnerCardMemberUserCardByOpenIdAsync(this WechatTenpayClient client, Models.ImportBrandPartnerCardMemberUserCardByOpenIdRequest 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
+ .CreateFlurlRequest(request, HttpMethod.Post, "brand", "partner", "card-member", "user-cards", "import-by-openid");
+
+ return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
+ }
+
+ ///
+ /// 异步调用 [POST] /brand/partner/card-member/user-cards/{user_card_code}/confirm 接口。
+ ///
+ /// REF:
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteConfirmBrandPartnerCardMemberUserCardAsync(this WechatTenpayClient client, Models.ConfirmBrandPartnerCardMemberUserCardRequest 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
+ .CreateFlurlRequest(request, HttpMethod.Post, "brand", "partner", "card-member", "user-cards", request.UserCardCode, "confirm")
+ .SetQueryParam("card_id", request.CardId);
+
+ return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
+ }
+ #endregion
+
+ #region UserFeeds
+ ///
+ /// 异步调用 [POST] /brand/partner/card-member/user-feeds 接口。
+ ///
+ /// REF:
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteCreateBrandPartnerCardMemberUserFeedAsync(this WechatTenpayClient client, Models.CreateBrandPartnerCardMemberUserFeedRequest 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
+ .CreateFlurlRequest(request, HttpMethod.Post, "brand", "partner", "card-member", "user-feeds");
+
+ return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
+ }
+ #endregion
+
+ #region UserFeeds
+ ///
+ /// 异步调用 [POST] /brand/partner/card-member/user-points/sync 接口。
+ ///
+ /// REF:
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteSyncBrandPartnerCardMemberUserPointAsync(this WechatTenpayClient client, Models.SyncBrandPartnerCardMemberUserPointRequest 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
+ .CreateFlurlRequest(request, HttpMethod.Post, "brand", "partner", "card-member", "user-points", "sync");
+
+ return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
+ }
+
+ ///
+ /// 异步调用 [POST] /brand/partner/card-member/user-points/exchange-coupon/confirm 接口。
+ ///
+ /// REF:
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteConfirmBrandPartnerCardMemberUserPointExchangeCouponAsync(this WechatTenpayClient client, Models.ConfirmBrandPartnerCardMemberUserPointExchangeCouponRequest 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
+ .CreateFlurlRequest(request, HttpMethod.Post, "brand", "partner", "card-member", "user-points", "exchange-coupon", "confirm");
+
+ return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
+ }
+ #endregion
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/BrandCardMember/Cards/CreateBrandPartnerCardMemberCardRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/BrandCardMember/Cards/CreateBrandPartnerCardMemberCardRequest.cs
new file mode 100644
index 00000000..c68c931c
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/BrandCardMember/Cards/CreateBrandPartnerCardMemberCardRequest.cs
@@ -0,0 +1,281 @@
+using System;
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [POST] /brand/partner/card-member/cards 接口的请求。
+ ///
+ public class CreateBrandPartnerCardMemberCardRequest : WechatTenpayRequest
+ {
+ public static class Types
+ {
+ public class ValidDateInfo
+ {
+ ///
+ /// 获取或设置有效期类型。
+ ///
+ [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.Common.Rfc3339DateTimeOffsetConverter))]
+ [System.Text.Json.Serialization.JsonPropertyName("available_begin_time")]
+ [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.Rfc3339DateTimeOffsetConverter))]
+ public DateTimeOffset? AvailableBeginTime { get; set; }
+
+ ///
+ /// 获取或设置有效期结束时间。
+ ///
+ [Newtonsoft.Json.JsonProperty("available_end_time")]
+ [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.Rfc3339DateTimeOffsetConverter))]
+ [System.Text.Json.Serialization.JsonPropertyName("available_end_time")]
+ [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.Rfc3339DateTimeOffsetConverter))]
+ 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; }
+ }
+
+ public class JumpInfo
+ {
+ ///
+ /// 获取或设置小程序 AppId。
+ ///
+ [Newtonsoft.Json.JsonProperty("jump_appid")]
+ [System.Text.Json.Serialization.JsonPropertyName("jump_appid")]
+ public string? JumpAppId { get; set; }
+
+ ///
+ /// 获取或设置小程序页面路径。
+ ///
+ [Newtonsoft.Json.JsonProperty("jump_path")]
+ [System.Text.Json.Serialization.JsonPropertyName("jump_path")]
+ public string? JumpPagePath { get; set; }
+ }
+
+ public class PurchaseJumpInfo : JumpInfo
+ {
+ ///
+ /// 获取或设置付费会员价格(单位:分)。
+ ///
+ [Newtonsoft.Json.JsonProperty("price")]
+ [System.Text.Json.Serialization.JsonPropertyName("price")]
+ public int? Price { get; set; }
+ }
+
+ public class UserInfo
+ {
+ 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; }
+ }
+ }
+
+ ///
+ /// 获取或设置商家请求单号。
+ ///
+ [Newtonsoft.Json.JsonProperty("out_request_no")]
+ [System.Text.Json.Serialization.JsonPropertyName("out_request_no")]
+ public string OutRequestNumber { 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;
+
+ ///
+ /// 获取或设置会员卡类型。
+ ///
+ [Newtonsoft.Json.JsonProperty("card_type")]
+ [System.Text.Json.Serialization.JsonPropertyName("card_type")]
+ public string CardType { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置会员卡名称。
+ ///
+ [Newtonsoft.Json.JsonProperty("card_title")]
+ [System.Text.Json.Serialization.JsonPropertyName("card_title")]
+ public string CardTitle { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置会员卡背景颜色。
+ ///
+ [Newtonsoft.Json.JsonProperty("card_color")]
+ [System.Text.Json.Serialization.JsonPropertyName("card_color")]
+ public string CardColor { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置会员卡图片 URL。
+ ///
+ [Newtonsoft.Json.JsonProperty("card_picture_url")]
+ [System.Text.Json.Serialization.JsonPropertyName("card_picture_url")]
+ public string CardPictureUrl { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置会员卡 Code 分配类型。
+ ///
+ [Newtonsoft.Json.JsonProperty("code_mode")]
+ [System.Text.Json.Serialization.JsonPropertyName("code_mode")]
+ public string CodeMode { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置会员码展示类型。
+ ///
+ [Newtonsoft.Json.JsonProperty("code_type")]
+ [System.Text.Json.Serialization.JsonPropertyName("code_type")]
+ public string CodeType { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置会员码跳转信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("code_jump_information")]
+ [System.Text.Json.Serialization.JsonPropertyName("code_jump_information")]
+ public Types.JumpInfo? CodeJumpInfo { get; set; }
+
+ ///
+ /// 获取或设置会员中心跳转信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("member_information")]
+ [System.Text.Json.Serialization.JsonPropertyName("member_information")]
+ public Types.JumpInfo? MemberJumpInfo { get; set; }
+
+ ///
+ /// 获取或设置积分跳转信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("points_information")]
+ [System.Text.Json.Serialization.JsonPropertyName("points_information")]
+ public Types.JumpInfo? PointsJumpInfo { get; set; }
+
+ ///
+ /// 获取或设置储值跳转信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("balance_information")]
+ [System.Text.Json.Serialization.JsonPropertyName("balance_information")]
+ public Types.JumpInfo? BalanceJumpInfo { get; set; }
+
+ ///
+ /// 获取或设置付费会员跳转信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("purchase_information")]
+ [System.Text.Json.Serialization.JsonPropertyName("purchase_information")]
+ public Types.PurchaseJumpInfo? PurchaseJumpInfo { get; set; }
+
+ ///
+ /// 获取或设置会员权益。
+ ///
+ [Newtonsoft.Json.JsonProperty("benefits")]
+ [System.Text.Json.Serialization.JsonPropertyName("benefits")]
+ public string Benefits { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置回调地址。
+ ///
+ [Newtonsoft.Json.JsonProperty("notify_url")]
+ [System.Text.Json.Serialization.JsonPropertyName("notify_url")]
+ public string NotifyUrl { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置是否置顶。
+ ///
+ [Newtonsoft.Json.JsonProperty("need_pinned")]
+ [System.Text.Json.Serialization.JsonPropertyName("need_pinned")]
+ public bool? IsPinned { get; set; }
+
+ ///
+ /// 获取或设置是否展示会员等级。
+ ///
+ [Newtonsoft.Json.JsonProperty("need_display_level")]
+ [System.Text.Json.Serialization.JsonPropertyName("need_display_level")]
+ public bool? IsDisplayLevel { get; set; }
+
+ ///
+ /// 获取或设置会员初始等级。
+ ///
+ [Newtonsoft.Json.JsonProperty("init_level")]
+ [System.Text.Json.Serialization.JsonPropertyName("init_level")]
+ public string? InitialLevel { get; set; }
+
+ ///
+ /// 获取或设置服务电话。
+ ///
+ [Newtonsoft.Json.JsonProperty("service_phone")]
+ [System.Text.Json.Serialization.JsonPropertyName("service_phone")]
+ public string? ServicePhoneNumber { get; set; }
+
+ ///
+ /// 获取或设置商家法务协议。
+ ///
+ [Newtonsoft.Json.JsonProperty("legal_agreement")]
+ [System.Text.Json.Serialization.JsonPropertyName("legal_agreement")]
+ public string? LegalAgreement { get; set; }
+
+ ///
+ /// 获取或设置会员卡有效期信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("valid_date_information")]
+ [System.Text.Json.Serialization.JsonPropertyName("valid_date_information")]
+ public Types.ValidDateInfo? ValidDateInfo { get; set; }
+
+ ///
+ /// 获取或设置用户开卡信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("user_information")]
+ [System.Text.Json.Serialization.JsonPropertyName("user_information")]
+ public Types.UserInfo? UserInfo { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/BrandCardMember/Cards/CreateBrandPartnerCardMemberCardResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/BrandCardMember/Cards/CreateBrandPartnerCardMemberCardResponse.cs
new file mode 100644
index 00000000..734a03e0
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/BrandCardMember/Cards/CreateBrandPartnerCardMemberCardResponse.cs
@@ -0,0 +1,9 @@
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [POST] /brand/partner/card-member/cards 接口的响应。
+ ///
+ public class CreateBrandPartnerCardMemberCardResponse : GetBrandPartnerCardMemberCardByCardIdResponse
+ {
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/BrandCardMember/Cards/GetBrandPartnerCardMemberCardByCardIdRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/BrandCardMember/Cards/GetBrandPartnerCardMemberCardByCardIdRequest.cs
new file mode 100644
index 00000000..f74cbbf3
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/BrandCardMember/Cards/GetBrandPartnerCardMemberCardByCardIdRequest.cs
@@ -0,0 +1,22 @@
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [GET] /brand/partner/card-member/cards/{card_id} 接口的请求。
+ ///
+ public class GetBrandPartnerCardMemberCardByCardIdRequest : WechatTenpayRequest
+ {
+ ///
+ /// 获取或设置会员卡模板 ID。
+ ///
+ [Newtonsoft.Json.JsonIgnore]
+ [System.Text.Json.Serialization.JsonIgnore]
+ public string CardId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置品牌 ID。
+ ///
+ [Newtonsoft.Json.JsonIgnore]
+ [System.Text.Json.Serialization.JsonIgnore]
+ public string BrandId { get; set; } = string.Empty;
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/BrandCardMember/Cards/GetBrandPartnerCardMemberCardByCardIdResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/BrandCardMember/Cards/GetBrandPartnerCardMemberCardByCardIdResponse.cs
new file mode 100644
index 00000000..daa5973c
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/BrandCardMember/Cards/GetBrandPartnerCardMemberCardByCardIdResponse.cs
@@ -0,0 +1,222 @@
+using System;
+
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [GET] /brand/partner/card-member/cards/{card_id} 接口的响应。
+ ///
+ public class GetBrandPartnerCardMemberCardByCardIdResponse : WechatTenpayResponse
+ {
+ public static class Types
+ {
+ public class ValidDateInfo : QueryBrandPartnerCardMemberCardsResponse.Types.Card.Types.ValidDateInfo
+ {
+ }
+
+ public class JumpInfo : QueryBrandPartnerCardMemberCardsResponse.Types.Card.Types.JumpInfo
+ {
+ }
+
+ public class PurchaseJumpInfo : QueryBrandPartnerCardMemberCardsResponse.Types.Card.Types.PurchaseJumpInfo
+ {
+ }
+
+ public class UserInfo : QueryBrandPartnerCardMemberCardsResponse.Types.Card.Types.UserInfo
+ {
+ }
+ }
+
+ ///
+ /// 获取或设置商家请求单号。
+ ///
+ [Newtonsoft.Json.JsonProperty("out_request_no")]
+ [System.Text.Json.Serialization.JsonPropertyName("out_request_no")]
+ public string OutRequestNumber { get; set; } = default!;
+
+ ///
+ /// 获取或设置会员卡模板 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("card_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("card_id")]
+ public string CardId { get; set; } = default!;
+
+ ///
+ /// 获取或设置品牌 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("brand_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("brand_id")]
+ public string BrandId { get; set; } = default!;
+
+ ///
+ /// 获取或设置商家 AppId。
+ ///
+ [Newtonsoft.Json.JsonProperty("appid")]
+ [System.Text.Json.Serialization.JsonPropertyName("appid")]
+ public string AppId { get; set; } = default!;
+
+ ///
+ /// 获取或设置会员卡类型。
+ ///
+ [Newtonsoft.Json.JsonProperty("card_type")]
+ [System.Text.Json.Serialization.JsonPropertyName("card_type")]
+ public string CardType { get; set; } = default!;
+
+ ///
+ /// 获取或设置会员卡名称。
+ ///
+ [Newtonsoft.Json.JsonProperty("card_title")]
+ [System.Text.Json.Serialization.JsonPropertyName("card_title")]
+ public string CardTitle { get; set; } = default!;
+
+ ///
+ /// 获取或设置会员卡背景颜色。
+ ///
+ [Newtonsoft.Json.JsonProperty("card_color")]
+ [System.Text.Json.Serialization.JsonPropertyName("card_color")]
+ public string CardColor { get; set; } = default!;
+
+ ///
+ /// 获取或设置会员卡图片 URL。
+ ///
+ [Newtonsoft.Json.JsonProperty("card_picture_url")]
+ [System.Text.Json.Serialization.JsonPropertyName("card_picture_url")]
+ public string CardPictureUrl { get; set; } = default!;
+
+ ///
+ /// 获取或设置会员卡 Code 分配类型。
+ ///
+ [Newtonsoft.Json.JsonProperty("code_mode")]
+ [System.Text.Json.Serialization.JsonPropertyName("code_mode")]
+ public string CodeMode { get; set; } = default!;
+
+ ///
+ /// 获取或设置会员码展示类型。
+ ///
+ [Newtonsoft.Json.JsonProperty("code_type")]
+ [System.Text.Json.Serialization.JsonPropertyName("code_type")]
+ public string CodeType { get; set; } = default!;
+
+ ///
+ /// 获取或设置会员码跳转信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("code_jump_information")]
+ [System.Text.Json.Serialization.JsonPropertyName("code_jump_information")]
+ public Types.JumpInfo? CodeJumpInfo { get; set; }
+
+ ///
+ /// 获取或设置会员中心跳转信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("member_information")]
+ [System.Text.Json.Serialization.JsonPropertyName("member_information")]
+ public Types.JumpInfo? MemberJumpInfo { get; set; }
+
+ ///
+ /// 获取或设置积分跳转信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("points_information")]
+ [System.Text.Json.Serialization.JsonPropertyName("points_information")]
+ public Types.JumpInfo? PointsJumpInfo { get; set; }
+
+ ///
+ /// 获取或设置储值跳转信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("balance_information")]
+ [System.Text.Json.Serialization.JsonPropertyName("balance_information")]
+ public Types.JumpInfo? BalanceJumpInfo { get; set; }
+
+ ///
+ /// 获取或设置付费会员跳转信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("purchase_information")]
+ [System.Text.Json.Serialization.JsonPropertyName("purchase_information")]
+ public Types.PurchaseJumpInfo? PurchaseJumpInfo { get; set; }
+
+ ///
+ /// 获取或设置会员权益。
+ ///
+ [Newtonsoft.Json.JsonProperty("benefits")]
+ [System.Text.Json.Serialization.JsonPropertyName("benefits")]
+ public string Benefits { get; set; } = default!;
+
+ ///
+ /// 获取或设置回调地址。
+ ///
+ [Newtonsoft.Json.JsonProperty("notify_url")]
+ [System.Text.Json.Serialization.JsonPropertyName("notify_url")]
+ public string NotifyUrl { get; set; } = default!;
+
+ ///
+ /// 获取或设置是否置顶。
+ ///
+ [Newtonsoft.Json.JsonProperty("need_pinned")]
+ [System.Text.Json.Serialization.JsonPropertyName("need_pinned")]
+ public bool? IsPinned { get; set; }
+
+ ///
+ /// 获取或设置是否展示会员等级。
+ ///
+ [Newtonsoft.Json.JsonProperty("need_display_level")]
+ [System.Text.Json.Serialization.JsonPropertyName("need_display_level")]
+ public bool? IsDisplayLevel { get; set; }
+
+ ///
+ /// 获取或设置会员初始等级。
+ ///
+ [Newtonsoft.Json.JsonProperty("init_level")]
+ [System.Text.Json.Serialization.JsonPropertyName("init_level")]
+ public string? InitialLevel { get; set; }
+
+ ///
+ /// 获取或设置服务电话。
+ ///
+ [Newtonsoft.Json.JsonProperty("service_phone")]
+ [System.Text.Json.Serialization.JsonPropertyName("service_phone")]
+ public string? ServicePhoneNumber { get; set; }
+
+ ///
+ /// 获取或设置商家法务协议。
+ ///
+ [Newtonsoft.Json.JsonProperty("legal_agreement")]
+ [System.Text.Json.Serialization.JsonPropertyName("legal_agreement")]
+ public string? LegalAgreement { get; set; }
+
+ ///
+ /// 获取或设置会员卡有效期信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("valid_date_information")]
+ [System.Text.Json.Serialization.JsonPropertyName("valid_date_information")]
+ public Types.ValidDateInfo? ValidDateInfo { get; set; }
+
+ ///
+ /// 获取或设置用户开卡信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("user_information")]
+ [System.Text.Json.Serialization.JsonPropertyName("user_information")]
+ public Types.UserInfo? UserInfo { get; set; }
+
+ ///
+ /// 获取或设置会员卡状态。
+ ///
+ [Newtonsoft.Json.JsonProperty("state")]
+ [System.Text.Json.Serialization.JsonPropertyName("state")]
+ public string State { get; set; } = default!;
+
+ ///
+ /// 获取或设置创建时间。
+ ///
+ [Newtonsoft.Json.JsonProperty("create_time")]
+ [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.Rfc3339DateTimeOffsetConverter))]
+ [System.Text.Json.Serialization.JsonPropertyName("create_time")]
+ [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.Rfc3339DateTimeOffsetConverter))]
+ public DateTimeOffset CreateTime { get; set; }
+
+ ///
+ /// 获取或设置更新时间。
+ ///
+ [Newtonsoft.Json.JsonProperty("modify_time")]
+ [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.Rfc3339DateTimeOffsetConverter))]
+ [System.Text.Json.Serialization.JsonPropertyName("modify_time")]
+ [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.Rfc3339DateTimeOffsetConverter))]
+ public DateTimeOffset ModifyTime { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/BrandCardMember/Cards/InvalidateBrandPartnerCardMemberCardRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/BrandCardMember/Cards/InvalidateBrandPartnerCardMemberCardRequest.cs
new file mode 100644
index 00000000..d224c050
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/BrandCardMember/Cards/InvalidateBrandPartnerCardMemberCardRequest.cs
@@ -0,0 +1,22 @@
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [POST] /brand/partner/card-member/cards/{card_id}/invalidate 接口的请求。
+ ///
+ public class InvalidateBrandPartnerCardMemberCardRequest : 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;
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/BrandCardMember/Cards/InvalidateBrandPartnerCardMemberCardResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/BrandCardMember/Cards/InvalidateBrandPartnerCardMemberCardResponse.cs
new file mode 100644
index 00000000..584e2532
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/BrandCardMember/Cards/InvalidateBrandPartnerCardMemberCardResponse.cs
@@ -0,0 +1,9 @@
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [POST] /brand/partner/card-member/cards/{card_id}/invalidate 接口的响应。
+ ///
+ public class InvalidateBrandPartnerCardMemberCardResponse : GetBrandPartnerCardMemberCardByCardIdResponse
+ {
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/BrandCardMember/Cards/QueryBrandPartnerCardMemberCardsRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/BrandCardMember/Cards/QueryBrandPartnerCardMemberCardsRequest.cs
new file mode 100644
index 00000000..8936d559
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/BrandCardMember/Cards/QueryBrandPartnerCardMemberCardsRequest.cs
@@ -0,0 +1,38 @@
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [GET] /brand/partner/card-member/cards 接口的请求。
+ ///
+ public class QueryBrandPartnerCardMemberCardsRequest : WechatTenpayRequest
+ {
+ ///
+ /// 获取或设置品牌 ID。
+ ///
+ [Newtonsoft.Json.JsonIgnore]
+ [System.Text.Json.Serialization.JsonIgnore]
+ public string BrandId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置会员卡状态。
+ ///
+ [Newtonsoft.Json.JsonIgnore]
+ [System.Text.Json.Serialization.JsonIgnore]
+ public string? State { get; set; }
+
+ ///
+ /// 获取或设置分页大小。
+ /// 默认值:10
+ ///
+ [Newtonsoft.Json.JsonIgnore]
+ [System.Text.Json.Serialization.JsonIgnore]
+ public int Limit { get; set; }
+
+ ///
+ /// 获取或设置分页开始位置。
+ /// 默认值:0
+ ///
+ [Newtonsoft.Json.JsonIgnore]
+ [System.Text.Json.Serialization.JsonIgnore]
+ public int Offset { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/BrandCardMember/Cards/QueryBrandPartnerCardMemberCardsResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/BrandCardMember/Cards/QueryBrandPartnerCardMemberCardsResponse.cs
new file mode 100644
index 00000000..6781e11e
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/BrandCardMember/Cards/QueryBrandPartnerCardMemberCardsResponse.cs
@@ -0,0 +1,346 @@
+using System;
+
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [GET] /brand/partner/card-member/cards 接口的响应。
+ ///
+ public class QueryBrandPartnerCardMemberCardsResponse : WechatTenpayResponse
+ {
+ public static class Types
+ {
+ public class Card
+ {
+ public static class Types
+ {
+ public class ValidDateInfo
+ {
+ ///
+ /// 获取或设置有效期类型。
+ ///
+ [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.Common.Rfc3339DateTimeOffsetConverter))]
+ [System.Text.Json.Serialization.JsonPropertyName("available_begin_time")]
+ [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.Rfc3339DateTimeOffsetConverter))]
+ public DateTimeOffset? AvailableBeginTime { get; set; }
+
+ ///
+ /// 获取或设置有效期结束时间。
+ ///
+ [Newtonsoft.Json.JsonProperty("available_end_time")]
+ [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.Rfc3339DateTimeOffsetConverter))]
+ [System.Text.Json.Serialization.JsonPropertyName("available_end_time")]
+ [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.Rfc3339DateTimeOffsetConverter))]
+ 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; }
+ }
+
+ public class JumpInfo
+ {
+ ///
+ /// 获取或设置小程序 AppId。
+ ///
+ [Newtonsoft.Json.JsonProperty("jump_appid")]
+ [System.Text.Json.Serialization.JsonPropertyName("jump_appid")]
+ public string? JumpAppId { get; set; }
+
+ ///
+ /// 获取或设置小程序页面路径。
+ ///
+ [Newtonsoft.Json.JsonProperty("jump_path")]
+ [System.Text.Json.Serialization.JsonPropertyName("jump_path")]
+ public string? JumpPagePath { get; set; }
+ }
+
+ public class PurchaseJumpInfo : JumpInfo
+ {
+ ///
+ /// 获取或设置付费会员价格(单位:分)。
+ ///
+ [Newtonsoft.Json.JsonProperty("price")]
+ [System.Text.Json.Serialization.JsonPropertyName("price")]
+ public int? Price { get; set; }
+ }
+
+ public class UserInfo
+ {
+ 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("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; }
+ }
+ }
+
+ ///
+ /// 获取或设置商家请求单号。
+ ///
+ [Newtonsoft.Json.JsonProperty("out_request_no")]
+ [System.Text.Json.Serialization.JsonPropertyName("out_request_no")]
+ public string OutRequestNumber { get; set; } = default!;
+
+ ///
+ /// 获取或设置会员卡模板 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("card_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("card_id")]
+ public string CardId { get; set; } = default!;
+
+ ///
+ /// 获取或设置品牌 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("brand_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("brand_id")]
+ public string BrandId { get; set; } = default!;
+
+ ///
+ /// 获取或设置商家 AppId。
+ ///
+ [Newtonsoft.Json.JsonProperty("appid")]
+ [System.Text.Json.Serialization.JsonPropertyName("appid")]
+ public string AppId { get; set; } = default!;
+
+ ///
+ /// 获取或设置会员卡类型。
+ ///
+ [Newtonsoft.Json.JsonProperty("card_type")]
+ [System.Text.Json.Serialization.JsonPropertyName("card_type")]
+ public string CardType { get; set; } = default!;
+
+ ///
+ /// 获取或设置会员卡名称。
+ ///
+ [Newtonsoft.Json.JsonProperty("card_title")]
+ [System.Text.Json.Serialization.JsonPropertyName("card_title")]
+ public string CardTitle { get; set; } = default!;
+
+ ///
+ /// 获取或设置会员卡背景颜色。
+ ///
+ [Newtonsoft.Json.JsonProperty("card_color")]
+ [System.Text.Json.Serialization.JsonPropertyName("card_color")]
+ public string CardColor { get; set; } = default!;
+
+ ///
+ /// 获取或设置会员卡图片 URL。
+ ///
+ [Newtonsoft.Json.JsonProperty("card_picture_url")]
+ [System.Text.Json.Serialization.JsonPropertyName("card_picture_url")]
+ public string CardPictureUrl { get; set; } = default!;
+
+ ///
+ /// 获取或设置会员卡 Code 分配类型。
+ ///
+ [Newtonsoft.Json.JsonProperty("code_mode")]
+ [System.Text.Json.Serialization.JsonPropertyName("code_mode")]
+ public string CodeMode { get; set; } = default!;
+
+ ///
+ /// 获取或设置会员码展示类型。
+ ///
+ [Newtonsoft.Json.JsonProperty("code_type")]
+ [System.Text.Json.Serialization.JsonPropertyName("code_type")]
+ public string CodeType { get; set; } = default!;
+
+ ///
+ /// 获取或设置会员码跳转信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("code_jump_information")]
+ [System.Text.Json.Serialization.JsonPropertyName("code_jump_information")]
+ public Types.JumpInfo? CodeJumpInfo { get; set; }
+
+ ///
+ /// 获取或设置会员中心跳转信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("member_information")]
+ [System.Text.Json.Serialization.JsonPropertyName("member_information")]
+ public Types.JumpInfo? MemberJumpInfo { get; set; }
+
+ ///
+ /// 获取或设置积分跳转信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("points_information")]
+ [System.Text.Json.Serialization.JsonPropertyName("points_information")]
+ public Types.JumpInfo? PointsJumpInfo { get; set; }
+
+ ///
+ /// 获取或设置储值跳转信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("balance_information")]
+ [System.Text.Json.Serialization.JsonPropertyName("balance_information")]
+ public Types.JumpInfo? BalanceJumpInfo { get; set; }
+
+ ///
+ /// 获取或设置付费会员跳转信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("purchase_information")]
+ [System.Text.Json.Serialization.JsonPropertyName("purchase_information")]
+ public Types.PurchaseJumpInfo? PurchaseJumpInfo { get; set; }
+
+ ///
+ /// 获取或设置会员权益。
+ ///
+ [Newtonsoft.Json.JsonProperty("benefits")]
+ [System.Text.Json.Serialization.JsonPropertyName("benefits")]
+ public string Benefits { get; set; } = default!;
+
+ ///
+ /// 获取或设置回调地址。
+ ///
+ [Newtonsoft.Json.JsonProperty("notify_url")]
+ [System.Text.Json.Serialization.JsonPropertyName("notify_url")]
+ public string NotifyUrl { get; set; } = default!;
+
+ ///
+ /// 获取或设置是否置顶。
+ ///
+ [Newtonsoft.Json.JsonProperty("need_pinned")]
+ [System.Text.Json.Serialization.JsonPropertyName("need_pinned")]
+ public bool? IsPinned { get; set; }
+
+ ///
+ /// 获取或设置是否展示会员等级。
+ ///
+ [Newtonsoft.Json.JsonProperty("need_display_level")]
+ [System.Text.Json.Serialization.JsonPropertyName("need_display_level")]
+ public bool? IsDisplayLevel { get; set; }
+
+ ///
+ /// 获取或设置会员初始等级。
+ ///
+ [Newtonsoft.Json.JsonProperty("init_level")]
+ [System.Text.Json.Serialization.JsonPropertyName("init_level")]
+ public string? InitialLevel { get; set; }
+
+ ///
+ /// 获取或设置服务电话。
+ ///
+ [Newtonsoft.Json.JsonProperty("service_phone")]
+ [System.Text.Json.Serialization.JsonPropertyName("service_phone")]
+ public string? ServicePhoneNumber { get; set; }
+
+ ///
+ /// 获取或设置商家法务协议。
+ ///
+ [Newtonsoft.Json.JsonProperty("legal_agreement")]
+ [System.Text.Json.Serialization.JsonPropertyName("legal_agreement")]
+ public string? LegalAgreement { get; set; }
+
+ ///
+ /// 获取或设置会员卡有效期信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("valid_date_information")]
+ [System.Text.Json.Serialization.JsonPropertyName("valid_date_information")]
+ public Types.ValidDateInfo? ValidDateInfo { get; set; }
+
+ ///
+ /// 获取或设置用户开卡信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("user_information")]
+ [System.Text.Json.Serialization.JsonPropertyName("user_information")]
+ public Types.UserInfo? UserInfo { get; set; }
+
+ ///
+ /// 获取或设置会员卡状态。
+ ///
+ [Newtonsoft.Json.JsonProperty("state")]
+ [System.Text.Json.Serialization.JsonPropertyName("state")]
+ public string State { get; set; } = default!;
+
+ ///
+ /// 获取或设置创建时间。
+ ///
+ [Newtonsoft.Json.JsonProperty("create_time")]
+ [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.Rfc3339DateTimeOffsetConverter))]
+ [System.Text.Json.Serialization.JsonPropertyName("create_time")]
+ [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.Rfc3339DateTimeOffsetConverter))]
+ public DateTimeOffset CreateTime { get; set; }
+
+ ///
+ /// 获取或设置更新时间。
+ ///
+ [Newtonsoft.Json.JsonProperty("modify_time")]
+ [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.Rfc3339DateTimeOffsetConverter))]
+ [System.Text.Json.Serialization.JsonPropertyName("modify_time")]
+ [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.Rfc3339DateTimeOffsetConverter))]
+ public DateTimeOffset ModifyTime { get; set; }
+ }
+ }
+
+ ///
+ /// 获取或设置会员卡模板列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("data")]
+ [System.Text.Json.Serialization.JsonPropertyName("data")]
+ public Types.Card[] CardList { get; set; } = default!;
+
+ ///
+ /// 获取或设置分页大小。
+ ///
+ [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/_Partner/BrandCardMember/Cards/UpdateBrandPartnerCardMemberCardRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/BrandCardMember/Cards/UpdateBrandPartnerCardMemberCardRequest.cs
new file mode 100644
index 00000000..a2e1509a
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/BrandCardMember/Cards/UpdateBrandPartnerCardMemberCardRequest.cs
@@ -0,0 +1,167 @@
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [PATCH] /brand/partner/card-member/cards/{card_id} 接口的请求。
+ ///
+ public class UpdateBrandPartnerCardMemberCardRequest : WechatTenpayRequest
+ {
+ public static class Types
+ {
+ public class ValidDateInfo : CreateBrandPartnerCardMemberCardRequest.Types.ValidDateInfo
+ {
+ }
+
+ public class JumpInfo : CreateBrandPartnerCardMemberCardRequest.Types.JumpInfo
+ {
+ }
+
+ public class PurchaseJumpInfo : CreateBrandPartnerCardMemberCardRequest.Types.PurchaseJumpInfo
+ {
+ }
+
+ public class UserInfo : CreateBrandPartnerCardMemberCardRequest.Types.UserInfo
+ {
+ }
+ }
+
+ ///
+ /// 获取或设置会员卡模板 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;
+
+ ///
+ /// 获取或设置会员卡类型。
+ ///
+ [Newtonsoft.Json.JsonProperty("card_type")]
+ [System.Text.Json.Serialization.JsonPropertyName("card_type")]
+ public string? CardType { get; set; }
+
+ ///
+ /// 获取或设置会员卡名称。
+ ///
+ [Newtonsoft.Json.JsonProperty("card_title")]
+ [System.Text.Json.Serialization.JsonPropertyName("card_title")]
+ public string? CardTitle { get; set; }
+
+ ///
+ /// 获取或设置会员卡背景颜色。
+ ///
+ [Newtonsoft.Json.JsonProperty("card_color")]
+ [System.Text.Json.Serialization.JsonPropertyName("card_color")]
+ public string? CardColor { get; set; }
+
+ ///
+ /// 获取或设置会员卡图片 URL。
+ ///
+ [Newtonsoft.Json.JsonProperty("card_picture_url")]
+ [System.Text.Json.Serialization.JsonPropertyName("card_picture_url")]
+ public string? CardPictureUrl { get; set; }
+
+ ///
+ /// 获取或设置会员码跳转信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("code_jump_information")]
+ [System.Text.Json.Serialization.JsonPropertyName("code_jump_information")]
+ public Types.JumpInfo? CodeJumpInfo { get; set; }
+
+ ///
+ /// 获取或设置会员中心跳转信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("member_information")]
+ [System.Text.Json.Serialization.JsonPropertyName("member_information")]
+ public Types.JumpInfo? MemberJumpInfo { get; set; }
+
+ ///
+ /// 获取或设置积分跳转信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("points_information")]
+ [System.Text.Json.Serialization.JsonPropertyName("points_information")]
+ public Types.JumpInfo? PointsJumpInfo { get; set; }
+
+ ///
+ /// 获取或设置储值跳转信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("balance_information")]
+ [System.Text.Json.Serialization.JsonPropertyName("balance_information")]
+ public Types.JumpInfo? BalanceJumpInfo { get; set; }
+
+ ///
+ /// 获取或设置付费会员跳转信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("purchase_information")]
+ [System.Text.Json.Serialization.JsonPropertyName("purchase_information")]
+ public Types.PurchaseJumpInfo? PurchaseJumpInfo { get; set; }
+
+ ///
+ /// 获取或设置会员权益。
+ ///
+ [Newtonsoft.Json.JsonProperty("benefits")]
+ [System.Text.Json.Serialization.JsonPropertyName("benefits")]
+ public string Benefits { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置回调地址。
+ ///
+ [Newtonsoft.Json.JsonProperty("notify_url")]
+ [System.Text.Json.Serialization.JsonPropertyName("notify_url")]
+ public string NotifyUrl { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置是否置顶。
+ ///
+ [Newtonsoft.Json.JsonProperty("need_pinned")]
+ [System.Text.Json.Serialization.JsonPropertyName("need_pinned")]
+ public bool? IsPinned { get; set; }
+
+ ///
+ /// 获取或设置是否展示会员等级。
+ ///
+ [Newtonsoft.Json.JsonProperty("need_display_level")]
+ [System.Text.Json.Serialization.JsonPropertyName("need_display_level")]
+ public bool? IsDisplayLevel { get; set; }
+
+ ///
+ /// 获取或设置会员初始等级。
+ ///
+ [Newtonsoft.Json.JsonProperty("init_level")]
+ [System.Text.Json.Serialization.JsonPropertyName("init_level")]
+ public string? InitialLevel { get; set; }
+
+ ///
+ /// 获取或设置服务电话。
+ ///
+ [Newtonsoft.Json.JsonProperty("service_phone")]
+ [System.Text.Json.Serialization.JsonPropertyName("service_phone")]
+ public string? ServicePhoneNumber { get; set; }
+
+ ///
+ /// 获取或设置商家法务协议。
+ ///
+ [Newtonsoft.Json.JsonProperty("legal_agreement")]
+ [System.Text.Json.Serialization.JsonPropertyName("legal_agreement")]
+ public string? LegalAgreement { get; set; }
+
+ ///
+ /// 获取或设置会员卡有效期信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("valid_date_information")]
+ [System.Text.Json.Serialization.JsonPropertyName("valid_date_information")]
+ public Types.ValidDateInfo? ValidDateInfo { get; set; }
+
+ ///
+ /// 获取或设置用户开卡信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("user_information")]
+ [System.Text.Json.Serialization.JsonPropertyName("user_information")]
+ public Types.UserInfo? UserInfo { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/BrandCardMember/Cards/UpdateBrandPartnerCardMemberCardResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/BrandCardMember/Cards/UpdateBrandPartnerCardMemberCardResponse.cs
new file mode 100644
index 00000000..459f026b
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/BrandCardMember/Cards/UpdateBrandPartnerCardMemberCardResponse.cs
@@ -0,0 +1,9 @@
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [PATCH] /brand/partner/card-member/cards/{card_id} 接口的响应。
+ ///
+ public class UpdateBrandPartnerCardMemberCardResponse : GetBrandPartnerCardMemberCardByCardIdResponse
+ {
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/BrandCardMember/CreateBrandPartnerCardMemberPreauthTokenRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/BrandCardMember/CreateBrandPartnerCardMemberPreauthTokenRequest.cs
new file mode 100644
index 00000000..c43dd222
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/BrandCardMember/CreateBrandPartnerCardMemberPreauthTokenRequest.cs
@@ -0,0 +1,29 @@
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [POST] /brand/partner/card-member/pre-auth-tokens 接口的请求。
+ ///
+ public class CreateBrandPartnerCardMemberPreauthTokenRequest : WechatTenpayRequest
+ {
+ ///
+ /// 获取或设置会员卡模板 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("card_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("card_id")]
+ 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;
+
+ ///
+ /// 获取或设置用户的 OpenId。
+ ///
+ [Newtonsoft.Json.JsonProperty("openid")]
+ [System.Text.Json.Serialization.JsonPropertyName("openid")]
+ public string OpenId { get; set; } = string.Empty;
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/BrandCardMember/CreateBrandPartnerCardMemberPreauthTokenResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/BrandCardMember/CreateBrandPartnerCardMemberPreauthTokenResponse.cs
new file mode 100644
index 00000000..d1349710
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/BrandCardMember/CreateBrandPartnerCardMemberPreauthTokenResponse.cs
@@ -0,0 +1,26 @@
+using System;
+
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [POST] /brand/partner/card-member/pre-auth-tokens 接口的响应。
+ ///
+ public class CreateBrandPartnerCardMemberPreauthTokenResponse : WechatTenpayResponse
+ {
+ ///
+ /// 获取或设置预授权 Token。
+ ///
+ [Newtonsoft.Json.JsonProperty("token")]
+ [System.Text.Json.Serialization.JsonPropertyName("token")]
+ public string Token { get; set; } = default!;
+
+ ///
+ /// 获取或设置预授权 Token 过期时间。
+ ///
+ [Newtonsoft.Json.JsonProperty("expire_time")]
+ [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.Rfc3339DateTimeOffsetConverter))]
+ [System.Text.Json.Serialization.JsonPropertyName("expire_time")]
+ [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.Rfc3339DateTimeOffsetConverter))]
+ public DateTimeOffset ExpireTime { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/BrandCardMember/UserCards/ConfirmBrandPartnerCardMemberUserCardRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/BrandCardMember/UserCards/ConfirmBrandPartnerCardMemberUserCardRequest.cs
new file mode 100644
index 00000000..e4ab4ce2
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/BrandCardMember/UserCards/ConfirmBrandPartnerCardMemberUserCardRequest.cs
@@ -0,0 +1,106 @@
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [POST] /brand/partner/card-member/user-cards/{user_card_code}/confirm 接口的请求。
+ ///
+ [WechatTenpaySensitive]
+ public class ConfirmBrandPartnerCardMemberUserCardRequest : WechatTenpayRequest
+ {
+ public static class Types
+ {
+ public class ValidDateInfo : UpdateBrandPartnerCardMemberUserCardRequest.Types.ValidDateInfo
+ {
+ }
+
+ public class UserInfo : UpdateBrandPartnerCardMemberUserCardRequest.Types.UserInfo
+ {
+ }
+ }
+
+ ///
+ /// 获取或设置会员卡 Code。
+ ///
+ [Newtonsoft.Json.JsonIgnore]
+ [System.Text.Json.Serialization.JsonIgnore]
+ public string UserCardCode { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置会员卡模板 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;
+
+ ///
+ /// 获取或设置用户的 OpenId。
+ ///
+ [Newtonsoft.Json.JsonProperty("openid")]
+ [System.Text.Json.Serialization.JsonPropertyName("openid")]
+ public string OpenId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置会员卡背景颜色。
+ ///
+ [Newtonsoft.Json.JsonProperty("card_color")]
+ [System.Text.Json.Serialization.JsonPropertyName("card_color")]
+ public string? CardColor { get; set; }
+
+ ///
+ /// 获取或设置会员卡图片 URL。
+ ///
+ [Newtonsoft.Json.JsonProperty("card_picture_url")]
+ [System.Text.Json.Serialization.JsonPropertyName("card_picture_url")]
+ public string? CardPictureUrl { get; set; }
+
+ ///
+ /// 获取或设置用户的手机号码(需使用平台公钥/证书加密)。
+ ///
+ [Newtonsoft.Json.JsonProperty("phone_number")]
+ [System.Text.Json.Serialization.JsonPropertyName("phone_number")]
+ [WechatTenpaySensitiveProperty(scheme: Constants.SignSchemes.WECHATPAY2_RSA_2048_WITH_SHA256, algorithm: Constants.EncryptionAlgorithms.RSA_2048_ECB_PKCS8_OAEP_WITH_SHA1_AND_MGF1)]
+ [WechatTenpaySensitiveProperty(scheme: Constants.SignSchemes.WECHATPAY2_SM2_WITH_SM3, algorithm: Constants.EncryptionAlgorithms.SM2_C1C3C2_ASN1)]
+ public string? MobileNumber { get; set; }
+
+ ///
+ /// 获取或设置会员等级。
+ ///
+ [Newtonsoft.Json.JsonProperty("level")]
+ [System.Text.Json.Serialization.JsonPropertyName("level")]
+ public string? Level { get; set; }
+
+ ///
+ /// 获取或设置会员卡有效期信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("valid_date_information")]
+ [System.Text.Json.Serialization.JsonPropertyName("valid_date_information")]
+ public Types.ValidDateInfo? ValidDateInfo { get; set; }
+
+ ///
+ /// 获取或设置用户开卡信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("user_information")]
+ [System.Text.Json.Serialization.JsonPropertyName("user_information")]
+ public Types.UserInfo? UserInfo { get; set; }
+
+ ///
+ /// 获取或设置附加数据。
+ ///
+ [Newtonsoft.Json.JsonProperty("attach")]
+ [System.Text.Json.Serialization.JsonPropertyName("attach")]
+ public string? Attachment { get; set; }
+
+ ///
+ /// 获取或设置同步状态。
+ ///
+ [Newtonsoft.Json.JsonProperty("user_card_confirm_state")]
+ [System.Text.Json.Serialization.JsonPropertyName("user_card_confirm_state")]
+ public string ConfirmState { get; set; } = string.Empty;
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/BrandCardMember/UserCards/ConfirmBrandPartnerCardMemberUserCardResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/BrandCardMember/UserCards/ConfirmBrandPartnerCardMemberUserCardResponse.cs
new file mode 100644
index 00000000..afdefafe
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/BrandCardMember/UserCards/ConfirmBrandPartnerCardMemberUserCardResponse.cs
@@ -0,0 +1,10 @@
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [POST] /brand/partner/card-member/user-cards/{user_card_code}/confirm 接口的响应。
+ ///
+ [WechatTenpaySensitive]
+ public class ConfirmBrandPartnerCardMemberUserCardResponse : GetBrandPartnerCardMemberUserCardByUserCardCodeResponse
+ {
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/BrandCardMember/UserCards/GetBrandPartnerCardMemberUserCardByUserCardCodeRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/BrandCardMember/UserCards/GetBrandPartnerCardMemberUserCardByUserCardCodeRequest.cs
new file mode 100644
index 00000000..55a8cfdb
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/BrandCardMember/UserCards/GetBrandPartnerCardMemberUserCardByUserCardCodeRequest.cs
@@ -0,0 +1,36 @@
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [GET] /brand/partner/card-member/user-cards/{user_card_code} 接口的请求。
+ ///
+ public class GetBrandPartnerCardMemberUserCardByUserCardCodeRequest : WechatTenpayRequest
+ {
+ ///
+ /// 获取或设置会员卡 Code。
+ ///
+ [Newtonsoft.Json.JsonIgnore]
+ [System.Text.Json.Serialization.JsonIgnore]
+ public string UserCardCode { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置会员卡模板 ID。
+ ///
+ [Newtonsoft.Json.JsonIgnore]
+ [System.Text.Json.Serialization.JsonIgnore]
+ public string CardId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置品牌 ID。
+ ///
+ [Newtonsoft.Json.JsonIgnore]
+ [System.Text.Json.Serialization.JsonIgnore]
+ public string BrandId { 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/_Partner/BrandCardMember/UserCards/GetBrandPartnerCardMemberUserCardByUserCardCodeResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/BrandCardMember/UserCards/GetBrandPartnerCardMemberUserCardByUserCardCodeResponse.cs
new file mode 100644
index 00000000..bb7e6fde
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/BrandCardMember/UserCards/GetBrandPartnerCardMemberUserCardByUserCardCodeResponse.cs
@@ -0,0 +1,158 @@
+using System;
+
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [GET] /brand/partner/card-member/user-cards/{user_card_code} 接口的响应。
+ ///
+ [WechatTenpaySensitive]
+ public class GetBrandPartnerCardMemberUserCardByUserCardCodeResponse : WechatTenpayResponse
+ {
+ public static class Types
+ {
+ public class ValidDateInfo : QueryBrandPartnerCardMemberUserCardsResponse.Types.UserCard.Types.ValidDateInfo
+ {
+ }
+
+ public class UserInfo : QueryBrandPartnerCardMemberUserCardsResponse.Types.UserCard.Types.UserInfo
+ {
+ }
+ }
+
+ ///
+ /// 获取或设置会员卡 Code。
+ ///
+ [Newtonsoft.Json.JsonProperty("user_card_code")]
+ [System.Text.Json.Serialization.JsonPropertyName("user_card_code")]
+ public string UserCardCode { get; set; } = default!;
+
+ ///
+ /// 获取或设置会员卡模板 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("card_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("card_id")]
+ public string CardId { get; set; } = default!;
+
+ ///
+ /// 获取或设置品牌 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("brand_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("brand_id")]
+ public string BrandId { get; set; } = default!;
+
+ ///
+ /// 获取或设置用户的 OpenId。
+ ///
+ [Newtonsoft.Json.JsonProperty("openid")]
+ [System.Text.Json.Serialization.JsonPropertyName("openid")]
+ public string OpenId { get; set; } = default!;
+
+ ///
+ /// 获取或设置会员卡类型。
+ ///
+ [Newtonsoft.Json.JsonProperty("card_type")]
+ [System.Text.Json.Serialization.JsonPropertyName("card_type")]
+ public string CardType { get; set; } = default!;
+
+ ///
+ /// 获取或设置会员卡背景颜色。
+ ///
+ [Newtonsoft.Json.JsonProperty("card_color")]
+ [System.Text.Json.Serialization.JsonPropertyName("card_color")]
+ public string CardColor { get; set; } = default!;
+
+ ///
+ /// 获取或设置会员卡图片 URL。
+ ///
+ [Newtonsoft.Json.JsonProperty("card_picture_url")]
+ [System.Text.Json.Serialization.JsonPropertyName("card_picture_url")]
+ public string CardPictureUrl { get; set; } = default!;
+
+ ///
+ /// 获取或设置用户的手机号码(需使用商户私钥解密)。
+ ///
+ [Newtonsoft.Json.JsonProperty("phone_number")]
+ [System.Text.Json.Serialization.JsonPropertyName("phone_number")]
+ [WechatTenpaySensitiveProperty(scheme: Constants.SignSchemes.WECHATPAY2_RSA_2048_WITH_SHA256, algorithm: Constants.EncryptionAlgorithms.RSA_2048_ECB_PKCS8_OAEP_WITH_SHA1_AND_MGF1)]
+ [WechatTenpaySensitiveProperty(scheme: Constants.SignSchemes.WECHATPAY2_SM2_WITH_SM3, algorithm: Constants.EncryptionAlgorithms.SM2_C1C3C2_ASN1)]
+ public string? MobileNumber { get; set; }
+
+ ///
+ /// 获取或设置会员等级。
+ ///
+ [Newtonsoft.Json.JsonProperty("level")]
+ [System.Text.Json.Serialization.JsonPropertyName("level")]
+ public string? Level { get; set; }
+
+ ///
+ /// 获取或设置会员卡有效期信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("valid_date_information")]
+ [System.Text.Json.Serialization.JsonPropertyName("valid_date_information")]
+ public Types.ValidDateInfo? ValidDateInfo { get; set; }
+
+ ///
+ /// 获取或设置领取时间。
+ ///
+ [Newtonsoft.Json.JsonProperty("pickup_time")]
+ [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.Rfc3339DateTimeOffsetConverter))]
+ [System.Text.Json.Serialization.JsonPropertyName("pickup_time")]
+ [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.Rfc3339DateTimeOffsetConverter))]
+ public DateTimeOffset PickupTime { get; set; }
+
+ ///
+ /// 获取或设置用户开卡信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("user_information")]
+ [System.Text.Json.Serialization.JsonPropertyName("user_information")]
+ public Types.UserInfo? UserInfo { get; set; }
+
+ ///
+ /// 获取或设置附加数据。
+ ///
+ [Newtonsoft.Json.JsonProperty("attach")]
+ [System.Text.Json.Serialization.JsonPropertyName("attach")]
+ public string? Attachment { get; set; }
+
+ ///
+ /// 获取或设置会员卡状态。
+ ///
+ [Newtonsoft.Json.JsonProperty("user_card_state")]
+ [System.Text.Json.Serialization.JsonPropertyName("user_card_state")]
+ public string State { get; set; } = default!;
+
+ ///
+ /// 获取或设置作废原因。
+ ///
+ [Newtonsoft.Json.JsonProperty("invalid_reason")]
+ [System.Text.Json.Serialization.JsonPropertyName("invalid_reason")]
+ public string? InvalidReason { get; set; }
+
+ ///
+ /// 获取或设置作废时间。
+ ///
+ [Newtonsoft.Json.JsonProperty("invalid_time")]
+ [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.Rfc3339DateTimeOffsetConverter))]
+ [System.Text.Json.Serialization.JsonPropertyName("invalid_time")]
+ [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.Rfc3339DateTimeOffsetConverter))]
+ public DateTimeOffset? InvalidTime { get; set; }
+
+ ///
+ /// 获取或设置创建时间。
+ ///
+ [Newtonsoft.Json.JsonProperty("create_time")]
+ [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.Rfc3339DateTimeOffsetConverter))]
+ [System.Text.Json.Serialization.JsonPropertyName("create_time")]
+ [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.Rfc3339DateTimeOffsetConverter))]
+ public DateTimeOffset CreateTime { get; set; }
+
+ ///
+ /// 获取或设置更新时间。
+ ///
+ [Newtonsoft.Json.JsonProperty("modify_time")]
+ [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.Rfc3339DateTimeOffsetConverter))]
+ [System.Text.Json.Serialization.JsonPropertyName("modify_time")]
+ [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.Rfc3339DateTimeOffsetConverter))]
+ public DateTimeOffset ModifyTime { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/BrandCardMember/UserCards/ImportBrandPartnerCardMemberUserCardByOpenIdRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/BrandCardMember/UserCards/ImportBrandPartnerCardMemberUserCardByOpenIdRequest.cs
new file mode 100644
index 00000000..ab434262
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/BrandCardMember/UserCards/ImportBrandPartnerCardMemberUserCardByOpenIdRequest.cs
@@ -0,0 +1,103 @@
+using System;
+
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [POST] /brand/partner/card-member/user-cards/import-by-openid 接口的请求。
+ ///
+ [WechatTenpaySensitive]
+ public class ImportBrandPartnerCardMemberUserCardByOpenIdRequest : WechatTenpayRequest
+ {
+ public static class Types
+ {
+ public class ValidDateInfo : UpdateBrandPartnerCardMemberUserCardRequest.Types.ValidDateInfo
+ {
+ }
+
+ public class UserInfo : UpdateBrandPartnerCardMemberUserCardRequest.Types.UserInfo
+ {
+ }
+ }
+
+ ///
+ /// 获取或设置会员卡 Code。
+ ///
+ [Newtonsoft.Json.JsonProperty("user_card_code")]
+ [System.Text.Json.Serialization.JsonPropertyName("user_card_code")]
+ public string UserCardCode { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置会员卡模板 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("card_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("card_id")]
+ 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;
+
+ ///
+ /// 获取或设置用户的 OpenId。
+ ///
+ [Newtonsoft.Json.JsonProperty("openid")]
+ [System.Text.Json.Serialization.JsonPropertyName("openid")]
+ public string OpenId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置会员卡背景颜色。
+ ///
+ [Newtonsoft.Json.JsonProperty("card_color")]
+ [System.Text.Json.Serialization.JsonPropertyName("card_color")]
+ public string? CardColor { get; set; }
+
+ ///
+ /// 获取或设置会员卡图片 URL。
+ ///
+ [Newtonsoft.Json.JsonProperty("card_picture_url")]
+ [System.Text.Json.Serialization.JsonPropertyName("card_picture_url")]
+ public string? CardPictureUrl { get; set; }
+
+ ///
+ /// 获取或设置用户的手机号码(需使用平台公钥/证书加密)。
+ ///
+ [Newtonsoft.Json.JsonProperty("phone_number")]
+ [System.Text.Json.Serialization.JsonPropertyName("phone_number")]
+ [WechatTenpaySensitiveProperty(scheme: Constants.SignSchemes.WECHATPAY2_RSA_2048_WITH_SHA256, algorithm: Constants.EncryptionAlgorithms.RSA_2048_ECB_PKCS8_OAEP_WITH_SHA1_AND_MGF1)]
+ [WechatTenpaySensitiveProperty(scheme: Constants.SignSchemes.WECHATPAY2_SM2_WITH_SM3, algorithm: Constants.EncryptionAlgorithms.SM2_C1C3C2_ASN1)]
+ public string? MobileNumber { get; set; }
+
+ ///
+ /// 获取或设置会员等级。
+ ///
+ [Newtonsoft.Json.JsonProperty("level")]
+ [System.Text.Json.Serialization.JsonPropertyName("level")]
+ public string? Level { get; set; }
+
+ ///
+ /// 获取或设置会员卡有效期信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("valid_date_information")]
+ [System.Text.Json.Serialization.JsonPropertyName("valid_date_information")]
+ public Types.ValidDateInfo? ValidDateInfo { get; set; }
+
+ ///
+ /// 获取或设置用户开卡信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("user_information")]
+ [System.Text.Json.Serialization.JsonPropertyName("user_information")]
+ public Types.UserInfo? UserInfo { get; set; }
+
+ ///
+ /// 获取或设置领取时间。
+ ///
+ [Newtonsoft.Json.JsonProperty("pickup_time")]
+ [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.Rfc3339DateTimeOffsetConverter))]
+ [System.Text.Json.Serialization.JsonPropertyName("pickup_time")]
+ [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.Rfc3339DateTimeOffsetConverter))]
+ public DateTimeOffset? PickupTime { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/BrandCardMember/UserCards/ImportBrandPartnerCardMemberUserCardByOpenIdResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/BrandCardMember/UserCards/ImportBrandPartnerCardMemberUserCardByOpenIdResponse.cs
new file mode 100644
index 00000000..03fe0993
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/BrandCardMember/UserCards/ImportBrandPartnerCardMemberUserCardByOpenIdResponse.cs
@@ -0,0 +1,10 @@
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [POST] /brand/partner/card-member/user-cards/import-by-openid 接口的响应。
+ ///
+ [WechatTenpaySensitive]
+ public class ImportBrandPartnerCardMemberUserCardByOpenIdResponse : GetBrandPartnerCardMemberUserCardByUserCardCodeResponse
+ {
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/BrandCardMember/UserCards/InvalidateBrandPartnerCardMemberUserCardRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/BrandCardMember/UserCards/InvalidateBrandPartnerCardMemberUserCardRequest.cs
new file mode 100644
index 00000000..0e86e4db
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/BrandCardMember/UserCards/InvalidateBrandPartnerCardMemberUserCardRequest.cs
@@ -0,0 +1,43 @@
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [POST] /brand/partner/card-member/user-cards/{user_card_code}/invalidate 接口的请求。
+ ///
+ public class InvalidateBrandPartnerCardMemberUserCardRequest : WechatTenpayRequest
+ {
+ ///
+ /// 获取或设置会员卡 Code。
+ ///
+ [Newtonsoft.Json.JsonIgnore]
+ [System.Text.Json.Serialization.JsonIgnore]
+ public string UserCardCode { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置会员卡模板 ID。
+ ///
+ [Newtonsoft.Json.JsonIgnore]
+ [System.Text.Json.Serialization.JsonIgnore]
+ public string CardId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置品牌 ID。
+ ///
+ [Newtonsoft.Json.JsonIgnore]
+ [System.Text.Json.Serialization.JsonIgnore]
+ public string BrandId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置用户的 OpenId。
+ ///
+ [Newtonsoft.Json.JsonProperty("openid")]
+ [System.Text.Json.Serialization.JsonPropertyName("openid")]
+ public string OpenId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置作废原因。
+ ///
+ [Newtonsoft.Json.JsonProperty("invalid_reason")]
+ [System.Text.Json.Serialization.JsonPropertyName("invalid_reason")]
+ public string? InvalidReason { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/BrandCardMember/UserCards/InvalidateBrandPartnerCardMemberUserCardResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/BrandCardMember/UserCards/InvalidateBrandPartnerCardMemberUserCardResponse.cs
new file mode 100644
index 00000000..54c8aac7
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/BrandCardMember/UserCards/InvalidateBrandPartnerCardMemberUserCardResponse.cs
@@ -0,0 +1,10 @@
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [POST] /brand/partner/card-member/user-cards/{user_card_code}/invalidate 接口的响应。
+ ///
+ [WechatTenpaySensitive]
+ public class InvalidateBrandPartnerCardMemberUserCardResponse : GetBrandPartnerCardMemberUserCardByUserCardCodeResponse
+ {
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/BrandCardMember/UserCards/QueryBrandPartnerCardMemberUserCardsRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/BrandCardMember/UserCards/QueryBrandPartnerCardMemberUserCardsRequest.cs
new file mode 100644
index 00000000..3340e6ed
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/BrandCardMember/UserCards/QueryBrandPartnerCardMemberUserCardsRequest.cs
@@ -0,0 +1,45 @@
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [GET] /brand/partner/card-member/user-cards 接口的请求。
+ ///
+ public class QueryBrandPartnerCardMemberUserCardsRequest : WechatTenpayRequest
+ {
+ ///
+ /// 获取或设置品牌 ID。
+ ///
+ [Newtonsoft.Json.JsonIgnore]
+ [System.Text.Json.Serialization.JsonIgnore]
+ public string BrandId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置用户的 OpenId。
+ ///
+ [Newtonsoft.Json.JsonIgnore]
+ [System.Text.Json.Serialization.JsonIgnore]
+ public string OpenId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置用户会员卡状态。
+ ///
+ [Newtonsoft.Json.JsonIgnore]
+ [System.Text.Json.Serialization.JsonIgnore]
+ public string? State { get; set; }
+
+ ///
+ /// 获取或设置分页大小。
+ /// 默认值:10
+ ///
+ [Newtonsoft.Json.JsonIgnore]
+ [System.Text.Json.Serialization.JsonIgnore]
+ public int Limit { get; set; }
+
+ ///
+ /// 获取或设置分页开始位置。
+ /// 默认值:0
+ ///
+ [Newtonsoft.Json.JsonIgnore]
+ [System.Text.Json.Serialization.JsonIgnore]
+ public int Offset { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/BrandCardMember/UserCards/QueryBrandPartnerCardMemberUserCardsResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/BrandCardMember/UserCards/QueryBrandPartnerCardMemberUserCardsResponse.cs
new file mode 100644
index 00000000..ac991c99
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/BrandCardMember/UserCards/QueryBrandPartnerCardMemberUserCardsResponse.cs
@@ -0,0 +1,246 @@
+using System;
+
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [GET] /brand/partner/card-member/user-cards 接口的响应。
+ ///
+ [WechatTenpaySensitive]
+ public class QueryBrandPartnerCardMemberUserCardsResponse : WechatTenpayResponse
+ {
+ public static class Types
+ {
+ public class UserCard
+ {
+ public static class Types
+ {
+ public class ValidDateInfo : QueryBrandPartnerCardMemberCardsResponse.Types.Card.Types.ValidDateInfo
+ {
+ }
+
+ public class UserInfo
+ {
+ public static class Types
+ {
+ public class CommonField
+ {
+ ///
+ /// 获取或设置字段名称。
+ ///
+ [Newtonsoft.Json.JsonProperty("name")]
+ [System.Text.Json.Serialization.JsonPropertyName("name")]
+ public string Name { get; set; } = default!;
+
+ ///
+ /// 获取或设置字段值(需使用商户私钥解密)。
+ ///
+ [Newtonsoft.Json.JsonProperty("value")]
+ [System.Text.Json.Serialization.JsonPropertyName("value")]
+ [WechatTenpaySensitiveProperty(scheme: Constants.SignSchemes.WECHATPAY2_RSA_2048_WITH_SHA256, algorithm: Constants.EncryptionAlgorithms.RSA_2048_ECB_PKCS8_OAEP_WITH_SHA1_AND_MGF1)]
+ [WechatTenpaySensitiveProperty(scheme: Constants.SignSchemes.WECHATPAY2_SM2_WITH_SM3, algorithm: Constants.EncryptionAlgorithms.SM2_C1C3C2_ASN1)]
+ public string? Value { get; set; }
+ }
+
+ public class CustomField
+ {
+ ///
+ /// 获取或设置字段名称。
+ ///
+ [Newtonsoft.Json.JsonProperty("name")]
+ [System.Text.Json.Serialization.JsonPropertyName("name")]
+ public string Name { get; set; } = default!;
+
+ ///
+ /// 获取或设置字段值(需使用商户私钥解密)。
+ ///
+ [Newtonsoft.Json.JsonProperty("user_chosen_values")]
+ [System.Text.Json.Serialization.JsonPropertyName("user_chosen_values")]
+ [WechatTenpaySensitiveProperty(scheme: Constants.SignSchemes.WECHATPAY2_RSA_2048_WITH_SHA256, algorithm: Constants.EncryptionAlgorithms.RSA_2048_ECB_PKCS8_OAEP_WITH_SHA1_AND_MGF1)]
+ [WechatTenpaySensitiveProperty(scheme: Constants.SignSchemes.WECHATPAY2_SM2_WITH_SM3, algorithm: Constants.EncryptionAlgorithms.SM2_C1C3C2_ASN1)]
+ public string[]? Values { get; set; }
+ }
+ }
+
+ ///
+ /// 获取或设置通用开卡信息字段列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("common_field_list")]
+ [System.Text.Json.Serialization.JsonPropertyName("common_field_list")]
+ public Types.CommonField[]? CommonFieldList { get; set; }
+
+ ///
+ /// 获取或设置自定义开卡信息字段列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("custom_field_list")]
+ [System.Text.Json.Serialization.JsonPropertyName("custom_field_list")]
+ public Types.CustomField[]? CustomFieldList { get; set; }
+ }
+ }
+
+ ///
+ /// 获取或设置会员卡 Code。
+ ///
+ [Newtonsoft.Json.JsonProperty("user_card_code")]
+ [System.Text.Json.Serialization.JsonPropertyName("user_card_code")]
+ public string UserCardCode { get; set; } = default!;
+
+ ///
+ /// 获取或设置会员卡模板 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("card_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("card_id")]
+ public string CardId { get; set; } = default!;
+
+ ///
+ /// 获取或设置品牌 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("brand_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("brand_id")]
+ public string BrandId { get; set; } = default!;
+
+ ///
+ /// 获取或设置用户的 OpenId。
+ ///
+ [Newtonsoft.Json.JsonProperty("openid")]
+ [System.Text.Json.Serialization.JsonPropertyName("openid")]
+ public string OpenId { get; set; } = default!;
+
+ ///
+ /// 获取或设置会员卡类型。
+ ///
+ [Newtonsoft.Json.JsonProperty("card_type")]
+ [System.Text.Json.Serialization.JsonPropertyName("card_type")]
+ public string CardType { get; set; } = default!;
+
+ ///
+ /// 获取或设置会员卡背景颜色。
+ ///
+ [Newtonsoft.Json.JsonProperty("card_color")]
+ [System.Text.Json.Serialization.JsonPropertyName("card_color")]
+ public string CardColor { get; set; } = default!;
+
+ ///
+ /// 获取或设置会员卡图片 URL。
+ ///
+ [Newtonsoft.Json.JsonProperty("card_picture_url")]
+ [System.Text.Json.Serialization.JsonPropertyName("card_picture_url")]
+ public string CardPictureUrl { get; set; } = default!;
+
+ ///
+ /// 获取或设置用户的手机号码(需使用商户私钥解密)。
+ ///
+ [Newtonsoft.Json.JsonProperty("phone_number")]
+ [System.Text.Json.Serialization.JsonPropertyName("phone_number")]
+ [WechatTenpaySensitiveProperty(scheme: Constants.SignSchemes.WECHATPAY2_RSA_2048_WITH_SHA256, algorithm: Constants.EncryptionAlgorithms.RSA_2048_ECB_PKCS8_OAEP_WITH_SHA1_AND_MGF1)]
+ [WechatTenpaySensitiveProperty(scheme: Constants.SignSchemes.WECHATPAY2_SM2_WITH_SM3, algorithm: Constants.EncryptionAlgorithms.SM2_C1C3C2_ASN1)]
+ public string? MobileNumber { get; set; }
+
+ ///
+ /// 获取或设置会员等级。
+ ///
+ [Newtonsoft.Json.JsonProperty("level")]
+ [System.Text.Json.Serialization.JsonPropertyName("level")]
+ public string? Level { get; set; }
+
+ ///
+ /// 获取或设置会员卡有效期信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("valid_date_information")]
+ [System.Text.Json.Serialization.JsonPropertyName("valid_date_information")]
+ public Types.ValidDateInfo? ValidDateInfo { get; set; }
+
+ ///
+ /// 获取或设置领取时间。
+ ///
+ [Newtonsoft.Json.JsonProperty("pickup_time")]
+ [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.Rfc3339DateTimeOffsetConverter))]
+ [System.Text.Json.Serialization.JsonPropertyName("pickup_time")]
+ [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.Rfc3339DateTimeOffsetConverter))]
+ public DateTimeOffset PickupTime { get; set; }
+
+ ///
+ /// 获取或设置用户开卡信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("user_information")]
+ [System.Text.Json.Serialization.JsonPropertyName("user_information")]
+ public Types.UserInfo? UserInfo { get; set; }
+
+ ///
+ /// 获取或设置附加数据。
+ ///
+ [Newtonsoft.Json.JsonProperty("attach")]
+ [System.Text.Json.Serialization.JsonPropertyName("attach")]
+ public string? Attachment { get; set; }
+
+ ///
+ /// 获取或设置会员卡状态。
+ ///
+ [Newtonsoft.Json.JsonProperty("user_card_state")]
+ [System.Text.Json.Serialization.JsonPropertyName("user_card_state")]
+ public string State { get; set; } = default!;
+
+ ///
+ /// 获取或设置作废原因。
+ ///
+ [Newtonsoft.Json.JsonProperty("invalid_reason")]
+ [System.Text.Json.Serialization.JsonPropertyName("invalid_reason")]
+ public string? InvalidReason { get; set; }
+
+ ///
+ /// 获取或设置作废时间。
+ ///
+ [Newtonsoft.Json.JsonProperty("invalid_time")]
+ [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.Rfc3339DateTimeOffsetConverter))]
+ [System.Text.Json.Serialization.JsonPropertyName("invalid_time")]
+ [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.Rfc3339DateTimeOffsetConverter))]
+ public DateTimeOffset? InvalidTime { get; set; }
+
+ ///
+ /// 获取或设置创建时间。
+ ///
+ [Newtonsoft.Json.JsonProperty("create_time")]
+ [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.Rfc3339DateTimeOffsetConverter))]
+ [System.Text.Json.Serialization.JsonPropertyName("create_time")]
+ [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.Rfc3339DateTimeOffsetConverter))]
+ public DateTimeOffset CreateTime { get; set; }
+
+ ///
+ /// 获取或设置更新时间。
+ ///
+ [Newtonsoft.Json.JsonProperty("modify_time")]
+ [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.Rfc3339DateTimeOffsetConverter))]
+ [System.Text.Json.Serialization.JsonPropertyName("modify_time")]
+ [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.Rfc3339DateTimeOffsetConverter))]
+ public DateTimeOffset ModifyTime { get; set; }
+ }
+ }
+
+ ///
+ /// 获取或设置会员卡列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("data")]
+ [System.Text.Json.Serialization.JsonPropertyName("data")]
+ public Types.UserCard[] UserCardList { get; set; } = default!;
+
+ ///
+ /// 获取或设置分页大小。
+ ///
+ [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/_Partner/BrandCardMember/UserCards/UpdateBrandPartnerCardMemberUserCardRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/BrandCardMember/UserCards/UpdateBrandPartnerCardMemberUserCardRequest.cs
new file mode 100644
index 00000000..ce34def3
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/BrandCardMember/UserCards/UpdateBrandPartnerCardMemberUserCardRequest.cs
@@ -0,0 +1,155 @@
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [PATCH] /brand/partner/card-member/user-cards/{user_card_code} 接口的请求。
+ ///
+ [WechatTenpaySensitive]
+ public class UpdateBrandPartnerCardMemberUserCardRequest : WechatTenpayRequest
+ {
+ public static class Types
+ {
+ public class ValidDateInfo : UpdateBrandPartnerCardMemberCardRequest.Types.ValidDateInfo
+ {
+ }
+
+ public class UserInfo
+ {
+ public static class Types
+ {
+ public class CommonField
+ {
+ ///
+ /// 获取或设置字段名称。
+ ///
+ [Newtonsoft.Json.JsonProperty("name")]
+ [System.Text.Json.Serialization.JsonPropertyName("name")]
+ public string Name { get; set; } = default!;
+
+ ///
+ /// 获取或设置字段值(需使用平台公钥/证书加密)。
+ ///
+ [Newtonsoft.Json.JsonProperty("value")]
+ [System.Text.Json.Serialization.JsonPropertyName("value")]
+ [WechatTenpaySensitiveProperty(scheme: Constants.SignSchemes.WECHATPAY2_RSA_2048_WITH_SHA256, algorithm: Constants.EncryptionAlgorithms.RSA_2048_ECB_PKCS8_OAEP_WITH_SHA1_AND_MGF1)]
+ [WechatTenpaySensitiveProperty(scheme: Constants.SignSchemes.WECHATPAY2_SM2_WITH_SM3, algorithm: Constants.EncryptionAlgorithms.SM2_C1C3C2_ASN1)]
+ public string? Value { get; set; }
+ }
+
+ public class CustomField
+ {
+ ///
+ /// 获取或设置字段名称。
+ ///
+ [Newtonsoft.Json.JsonProperty("name")]
+ [System.Text.Json.Serialization.JsonPropertyName("name")]
+ public string Name { get; set; } = default!;
+
+ ///
+ /// 获取或设置字段值(需使用平台公钥/证书加密)。
+ ///
+ [Newtonsoft.Json.JsonProperty("user_chosen_values")]
+ [System.Text.Json.Serialization.JsonPropertyName("user_chosen_values")]
+ [WechatTenpaySensitiveProperty(scheme: Constants.SignSchemes.WECHATPAY2_RSA_2048_WITH_SHA256, algorithm: Constants.EncryptionAlgorithms.RSA_2048_ECB_PKCS8_OAEP_WITH_SHA1_AND_MGF1)]
+ [WechatTenpaySensitiveProperty(scheme: Constants.SignSchemes.WECHATPAY2_SM2_WITH_SM3, algorithm: Constants.EncryptionAlgorithms.SM2_C1C3C2_ASN1)]
+ 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; }
+ }
+ }
+
+ ///
+ /// 获取或设置会员卡 Code。
+ ///
+ [Newtonsoft.Json.JsonIgnore]
+ [System.Text.Json.Serialization.JsonIgnore]
+ public string UserCardCode { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置会员卡模板 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;
+
+ ///
+ /// 获取或设置用户的 OpenId。
+ ///
+ [Newtonsoft.Json.JsonProperty("openid")]
+ [System.Text.Json.Serialization.JsonPropertyName("openid")]
+ public string OpenId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置会员卡背景颜色。
+ ///
+ [Newtonsoft.Json.JsonProperty("card_color")]
+ [System.Text.Json.Serialization.JsonPropertyName("card_color")]
+ public string? CardColor { get; set; }
+
+ ///
+ /// 获取或设置会员卡图片 URL。
+ ///
+ [Newtonsoft.Json.JsonProperty("card_picture_url")]
+ [System.Text.Json.Serialization.JsonPropertyName("card_picture_url")]
+ public string? CardPictureUrl { get; set; }
+
+ ///
+ /// 获取或设置用户的手机号码(需使用平台公钥/证书加密)。
+ ///
+ [Newtonsoft.Json.JsonProperty("phone_number")]
+ [System.Text.Json.Serialization.JsonPropertyName("phone_number")]
+ [WechatTenpaySensitiveProperty(scheme: Constants.SignSchemes.WECHATPAY2_RSA_2048_WITH_SHA256, algorithm: Constants.EncryptionAlgorithms.RSA_2048_ECB_PKCS8_OAEP_WITH_SHA1_AND_MGF1)]
+ [WechatTenpaySensitiveProperty(scheme: Constants.SignSchemes.WECHATPAY2_SM2_WITH_SM3, algorithm: Constants.EncryptionAlgorithms.SM2_C1C3C2_ASN1)]
+ public string? MobileNumber { get; set; }
+
+ ///
+ /// 获取或设置会员等级。
+ ///
+ [Newtonsoft.Json.JsonProperty("level")]
+ [System.Text.Json.Serialization.JsonPropertyName("level")]
+ public string? Level { get; set; }
+
+ ///
+ /// 获取或设置会员卡有效期信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("valid_date_information")]
+ [System.Text.Json.Serialization.JsonPropertyName("valid_date_information")]
+ public Types.ValidDateInfo? ValidDateInfo { get; set; }
+
+ ///
+ /// 获取或设置用户开卡信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("user_information")]
+ [System.Text.Json.Serialization.JsonPropertyName("user_information")]
+ public Types.UserInfo? UserInfo { get; set; }
+
+ ///
+ /// 获取或设置附加数据。
+ ///
+ [Newtonsoft.Json.JsonProperty("attach")]
+ [System.Text.Json.Serialization.JsonPropertyName("attach")]
+ public string? Attachment { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/BrandCardMember/UserCards/UpdateBrandPartnerCardMemberUserCardResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/BrandCardMember/UserCards/UpdateBrandPartnerCardMemberUserCardResponse.cs
new file mode 100644
index 00000000..a7c51296
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/BrandCardMember/UserCards/UpdateBrandPartnerCardMemberUserCardResponse.cs
@@ -0,0 +1,10 @@
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [PATCH] /brand/partner/card-member/user-cards/{user_card_code} 接口的响应。
+ ///
+ [WechatTenpaySensitive]
+ public class UpdateBrandPartnerCardMemberUserCardResponse : GetBrandPartnerCardMemberUserCardByUserCardCodeResponse
+ {
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/BrandCardMember/UserFeeds/CreateBrandPartnerCardMemberUserFeedRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/BrandCardMember/UserFeeds/CreateBrandPartnerCardMemberUserFeedRequest.cs
new file mode 100644
index 00000000..d28314a2
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/BrandCardMember/UserFeeds/CreateBrandPartnerCardMemberUserFeedRequest.cs
@@ -0,0 +1,50 @@
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [POST] /brand/partner/card-member/user-feeds 接口的请求。
+ ///
+ public class CreateBrandPartnerCardMemberUserFeedRequest : WechatTenpayRequest
+ {
+ ///
+ /// 获取或设置会员卡 Code。
+ ///
+ [Newtonsoft.Json.JsonProperty("user_card_code")]
+ [System.Text.Json.Serialization.JsonPropertyName("user_card_code")]
+ public string UserCardCode { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置会员卡模板 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("card_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("card_id")]
+ 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;
+
+ ///
+ /// 获取或设置用户的 OpenId。
+ ///
+ [Newtonsoft.Json.JsonProperty("openid")]
+ [System.Text.Json.Serialization.JsonPropertyName("openid")]
+ public string OpenId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置商家请求单号。
+ ///
+ [Newtonsoft.Json.JsonProperty("out_request_no")]
+ [System.Text.Json.Serialization.JsonPropertyName("out_request_no")]
+ public string OutRequestNumber { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置会员动态内容。
+ ///
+ [Newtonsoft.Json.JsonProperty("cell")]
+ [System.Text.Json.Serialization.JsonPropertyName("cell")]
+ public string CellData { get; set; } = string.Empty;
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/BrandCardMember/UserFeeds/CreateBrandPartnerCardMemberUserFeedResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/BrandCardMember/UserFeeds/CreateBrandPartnerCardMemberUserFeedResponse.cs
new file mode 100644
index 00000000..1f113499
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/BrandCardMember/UserFeeds/CreateBrandPartnerCardMemberUserFeedResponse.cs
@@ -0,0 +1,43 @@
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [POST] /brand/partner/card-member/user-feeds 接口的响应。
+ ///
+ public class CreateBrandPartnerCardMemberUserFeedResponse : WechatTenpayResponse
+ {
+ ///
+ /// 获取或设置会员卡 Code。
+ ///
+ [Newtonsoft.Json.JsonProperty("user_card_code")]
+ [System.Text.Json.Serialization.JsonPropertyName("user_card_code")]
+ public string UserCardCode { get; set; } = default!;
+
+ ///
+ /// 获取或设置会员卡模板 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("card_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("card_id")]
+ public string CardId { get; set; } = default!;
+
+ ///
+ /// 获取或设置品牌 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("brand_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("brand_id")]
+ public string BrandId { get; set; } = default!;
+
+ ///
+ /// 获取或设置商家请求单号。
+ ///
+ [Newtonsoft.Json.JsonProperty("out_request_no")]
+ [System.Text.Json.Serialization.JsonPropertyName("out_request_no")]
+ public string OutRequestNumber { get; set; } = default!;
+
+ ///
+ /// 获取或设置会员动态内容。
+ ///
+ [Newtonsoft.Json.JsonProperty("cell")]
+ [System.Text.Json.Serialization.JsonPropertyName("cell")]
+ public string CellData { get; set; } = default!;
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/BrandCardMember/UserPoints/ConfirmBrandPartnerCardMemberUserPointExchangeCouponRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/BrandCardMember/UserPoints/ConfirmBrandPartnerCardMemberUserPointExchangeCouponRequest.cs
new file mode 100644
index 00000000..33527242
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/BrandCardMember/UserPoints/ConfirmBrandPartnerCardMemberUserPointExchangeCouponRequest.cs
@@ -0,0 +1,71 @@
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [POST] /brand/partner/card-member/user-points/exchange-coupon/confirm 接口的请求。
+ ///
+ public class ConfirmBrandPartnerCardMemberUserPointExchangeCouponRequest : WechatTenpayRequest
+ {
+ ///
+ /// 获取或设置积分兑券 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("record_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("record_id")]
+ public string RecordId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置积分兑券模板 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("exchange_coupon_template_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("exchange_coupon_template_id")]
+ public string ExchangeCouponTemplateId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置会员卡 Code。
+ ///
+ [Newtonsoft.Json.JsonProperty("user_card_code")]
+ [System.Text.Json.Serialization.JsonPropertyName("user_card_code")]
+ public string UserCardCode { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置会员卡模板 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("card_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("card_id")]
+ 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;
+
+ ///
+ /// 获取或设置用户的 OpenId。
+ ///
+ [Newtonsoft.Json.JsonProperty("openid")]
+ [System.Text.Json.Serialization.JsonPropertyName("openid")]
+ public string OpenId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置积分兑券状态。
+ ///
+ [Newtonsoft.Json.JsonProperty("state")]
+ [System.Text.Json.Serialization.JsonPropertyName("state")]
+ public string State { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置券 Code。
+ ///
+ [Newtonsoft.Json.JsonProperty("coupon_code")]
+ [System.Text.Json.Serialization.JsonPropertyName("coupon_code")]
+ public string? CouponCode { get; set; }
+
+ ///
+ /// 获取或设置失败原因。
+ ///
+ [Newtonsoft.Json.JsonProperty("fail_reason")]
+ [System.Text.Json.Serialization.JsonPropertyName("fail_reason")]
+ public string? FailReason { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/BrandCardMember/UserPoints/ConfirmBrandPartnerCardMemberUserPointExchangeCouponResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/BrandCardMember/UserPoints/ConfirmBrandPartnerCardMemberUserPointExchangeCouponResponse.cs
new file mode 100644
index 00000000..b04d8bd8
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/BrandCardMember/UserPoints/ConfirmBrandPartnerCardMemberUserPointExchangeCouponResponse.cs
@@ -0,0 +1,71 @@
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [POST] /brand/partner/card-member/user-points/exchange-coupon/confirm 接口的响应。
+ ///
+ public class ConfirmBrandPartnerCardMemberUserPointExchangeCouponResponse : WechatTenpayResponse
+ {
+ ///
+ /// 获取或设置积分兑券 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("record_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("record_id")]
+ public string RecordId { get; set; } = default!;
+
+ ///
+ /// 获取或设置积分兑券模板 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("exchange_coupon_template_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("exchange_coupon_template_id")]
+ public string ExchangeCouponTemplateId { get; set; } = default!;
+
+ ///
+ /// 获取或设置会员卡 Code。
+ ///
+ [Newtonsoft.Json.JsonProperty("user_card_code")]
+ [System.Text.Json.Serialization.JsonPropertyName("user_card_code")]
+ public string UserCardCode { get; set; } = default!;
+
+ ///
+ /// 获取或设置会员卡模板 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("card_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("card_id")]
+ public string CardId { get; set; } = default!;
+
+ ///
+ /// 获取或设置品牌 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("brand_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("brand_id")]
+ public string BrandId { get; set; } = default!;
+
+ ///
+ /// 获取或设置用户的 OpenId。
+ ///
+ [Newtonsoft.Json.JsonProperty("openid")]
+ [System.Text.Json.Serialization.JsonPropertyName("openid")]
+ public string OpenId { get; set; } = default!;
+
+ ///
+ /// 获取或设置积分兑券状态。
+ ///
+ [Newtonsoft.Json.JsonProperty("state")]
+ [System.Text.Json.Serialization.JsonPropertyName("state")]
+ public string State { get; set; } = default!;
+
+ ///
+ /// 获取或设置券 Code。
+ ///
+ [Newtonsoft.Json.JsonProperty("coupon_code")]
+ [System.Text.Json.Serialization.JsonPropertyName("coupon_code")]
+ public string? CouponCode { get; set; }
+
+ ///
+ /// 获取或设置失败原因。
+ ///
+ [Newtonsoft.Json.JsonProperty("fail_reason")]
+ [System.Text.Json.Serialization.JsonPropertyName("fail_reason")]
+ public string? FailReason { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/BrandCardMember/UserPoints/SyncBrandPartnerCardMemberUserPointRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/BrandCardMember/UserPoints/SyncBrandPartnerCardMemberUserPointRequest.cs
new file mode 100644
index 00000000..28c79e09
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/BrandCardMember/UserPoints/SyncBrandPartnerCardMemberUserPointRequest.cs
@@ -0,0 +1,50 @@
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [POST] /brand/partner/card-member/user-points/sync 接口的请求。
+ ///
+ public class SyncBrandPartnerCardMemberUserPointRequest : WechatTenpayRequest
+ {
+ ///
+ /// 获取或设置会员卡 Code。
+ ///
+ [Newtonsoft.Json.JsonProperty("user_card_code")]
+ [System.Text.Json.Serialization.JsonPropertyName("user_card_code")]
+ public string UserCardCode { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置会员卡模板 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("card_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("card_id")]
+ 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;
+
+ ///
+ /// 获取或设置用户的 OpenId。
+ ///
+ [Newtonsoft.Json.JsonProperty("openid")]
+ [System.Text.Json.Serialization.JsonPropertyName("openid")]
+ public string OpenId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置商家请求单号。
+ ///
+ [Newtonsoft.Json.JsonProperty("out_request_no")]
+ [System.Text.Json.Serialization.JsonPropertyName("out_request_no")]
+ public string OutRequestNumber { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置积分余额。
+ ///
+ [Newtonsoft.Json.JsonProperty("point_balance")]
+ [System.Text.Json.Serialization.JsonPropertyName("point_balance")]
+ public int PointBalance { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/BrandCardMember/UserPoints/SyncBrandPartnerCardMemberUserPointResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/BrandCardMember/UserPoints/SyncBrandPartnerCardMemberUserPointResponse.cs
new file mode 100644
index 00000000..570f9f1f
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/BrandCardMember/UserPoints/SyncBrandPartnerCardMemberUserPointResponse.cs
@@ -0,0 +1,50 @@
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [POST] /brand/partner/card-member/user-points/sync 接口的响应。
+ ///
+ public class SyncBrandPartnerCardMemberUserPointResponse : WechatTenpayResponse
+ {
+ ///
+ /// 获取或设置会员卡 Code。
+ ///
+ [Newtonsoft.Json.JsonProperty("user_card_code")]
+ [System.Text.Json.Serialization.JsonPropertyName("user_card_code")]
+ public string UserCardCode { get; set; } = default!;
+
+ ///
+ /// 获取或设置会员卡模板 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("card_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("card_id")]
+ public string CardId { get; set; } = default!;
+
+ ///
+ /// 获取或设置品牌 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("brand_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("brand_id")]
+ public string BrandId { get; set; } = default!;
+
+ ///
+ /// 获取或设置用户的 OpenId。
+ ///
+ [Newtonsoft.Json.JsonProperty("openid")]
+ [System.Text.Json.Serialization.JsonPropertyName("openid")]
+ public string OpenId { get; set; } = default!;
+
+ ///
+ /// 获取或设置商家请求单号。
+ ///
+ [Newtonsoft.Json.JsonProperty("out_request_no")]
+ [System.Text.Json.Serialization.JsonPropertyName("out_request_no")]
+ public string OutRequestNumber { get; set; } = default!;
+
+ ///
+ /// 获取或设置积分余额。
+ ///
+ [Newtonsoft.Json.JsonProperty("point_balance")]
+ [System.Text.Json.Serialization.JsonPropertyName("point_balance")]
+ public int PointBalance { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/SKIT.FlurlHttpClient.Wechat.TenpayV3.csproj b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/SKIT.FlurlHttpClient.Wechat.TenpayV3.csproj
index f588aa14..a093a238 100644
--- a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/SKIT.FlurlHttpClient.Wechat.TenpayV3.csproj
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/SKIT.FlurlHttpClient.Wechat.TenpayV3.csproj
@@ -15,7 +15,7 @@
https://github.com/fudiwei/DotNetCore.SKIT.FlurlHttpClient.Wechat
Flurl.Http Wechat Weixin MicroMessage Tenpay WechatPay WeixinPay Wxpay 微信 微信支付 微信商户
3.14.0
- 基于 Flurl.Http 的微信支付 API v3 版客户端,支持普通商户(直连)、合作伙伴(服务商、渠道商、机构、银行)两种接入模式,支持基础支付、代金券、商家券、委托营销、消费卡、支付有礼、银行定向促活、微信支付分、微信先享卡、支付即服务、点金计划、智慧商圈、电商收付通、平台收付通、二级商户进件、小微商户进件、消费者投诉、商户风控管理、商户违规通知、批量转账到零钱、银行组件、海关报关、融合钱包、微工卡、电子发票、电子小票、车主平台、教育续费通、校园轻松付等功能。
+ 基于 Flurl.Http 的微信支付 API v3 版客户端,支持普通商户(直连)、合作伙伴(服务商、渠道商、机构、银行)两种接入模式,支持基础支付、代金券、商家券、商品券、委托营销、消费卡、支付有礼、银行定向促活、微信支付分、微信先享卡、支付即服务、点金计划、智慧商圈、电商收付通、平台收付通、二级商户进件、小微商户进件、消费者投诉、商户风控管理、商户违规通知、批量转账到零钱、银行组件、海关报关、融合钱包、微工卡、电子发票、电子小票、车主平台、教育续费通、校园轻松付、商家名片会员等功能。
Fu Diwei
git
https://github.com/fudiwei/DotNetCore.SKIT.FlurlHttpClient.Wechat.git
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/EventSamples/_/_Partner/BrandCardMember/BrandPartnerCardMemberPointExchangeCouponResource.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/EventSamples/_/_Partner/BrandCardMember/BrandPartnerCardMemberPointExchangeCouponResource.json
new file mode 100644
index 00000000..db8077f0
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/EventSamples/_/_Partner/BrandCardMember/BrandPartnerCardMemberPointExchangeCouponResource.json
@@ -0,0 +1,13 @@
+{
+ "record_id": "WfTb8hfabrPAiw",
+ "brand_id": "1077",
+ "card_id": "pbLatjvWOibDc5",
+ "appid": "wxea9c30890f48d5ae",
+ "openid": "obLatjnxgnqzS4myYGmLZ7LgLBA",
+ "user_card_code": "478515832665",
+ "exchange_coupon_template_id": "0Flpo7FqTQ",
+ "deduct_points": 1000,
+ "product_coupon_id": "200000001",
+ "product_coupon_stock_type": "PRODUCT_COUPON_STOCK_TYPE_BUSI_FAVOR",
+ "stock_id": "100232301"
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/EventSamples/_/_Partner/BrandCardMember/BrandPartnerCardMemberUserCardResource.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/EventSamples/_/_Partner/BrandCardMember/BrandPartnerCardMemberUserCardResource.json
new file mode 100644
index 00000000..93d9d27d
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/EventSamples/_/_Partner/BrandCardMember/BrandPartnerCardMemberUserCardResource.json
@@ -0,0 +1,38 @@
+{
+ "brand_id": "1077",
+ "card_color": "#FFFF00",
+ "card_id": "pbLatjvWOibDc5",
+ "card_picture_url": "https://wxpaylogo.qpic.cn/wxpaylogo/PiajxSqBRaEIPAeia7Imvtsn7sYGNcEj33YzVvJF88ECQ19LXId8ZL2Q/0",
+ "card_type": "NORMAL",
+ "valid_date_information": {
+ "available_begin_time": "2020-05-20T13:29:35.120+08:00",
+ "available_day_after_receive": 30,
+ "available_end_time": "2020-05-20T13:29:35.120+08:00",
+ "type": "PERMANENT"
+ },
+ "invalid_reason": "传入的自定义作废原因",
+ "invalid_time": "2015-05-20T13:29:35+08:00",
+ "level": "钻石会员",
+ "openid": "obLatjnxgnqzS4myYGmLZ7LgLBA",
+ "phone_number": "12345678999",
+ "pickup_time": "2020-05-20T13:29:35.120+08:00",
+ "user_card_code": "478515832665",
+ "user_card_state": "EFFECTIVE",
+ "create_time": "2020-05-20T13:29:35.120+08:00",
+ "modify_time": "2020-05-20T13:29:35.120+08:00",
+ "user_information": {
+ "common_field_list": [
+ {
+ "name": "USER_FORM_FLAG_SEX",
+ "value": "男"
+ }
+ ],
+ "custom_field_list": [
+ {
+ "name": "喜欢的运动",
+ "user_chosen_values": [ "足球", "篮球" ]
+ }
+ ]
+ },
+ "attach": "brand_data"
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/EventSamples/_/_Partner/BrandCardMember/BrandPartnerCardMemberUserPointResource.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/EventSamples/_/_Partner/BrandCardMember/BrandPartnerCardMemberUserPointResource.json
new file mode 100644
index 00000000..dd74097f
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/EventSamples/_/_Partner/BrandCardMember/BrandPartnerCardMemberUserPointResource.json
@@ -0,0 +1,6 @@
+{
+ "brand_id": "1077",
+ "card_id": "pbLatjvWOibDc5",
+ "openid": "obLatjnxgnqzS4myYGmLZ7LgLBA",
+ "user_card_code": "478515832665"
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/BrandCardMember/Cards/CreateBrandPartnerCardMemberCardRequest.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/BrandCardMember/Cards/CreateBrandPartnerCardMemberCardRequest.json
new file mode 100644
index 00000000..491fd9cd
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/BrandCardMember/Cards/CreateBrandPartnerCardMemberCardRequest.json
@@ -0,0 +1,59 @@
+{
+ "out_request_no": "100002322019090134234sfdf",
+ "brand_id": "1004",
+ "appid": "wxea9c30890f48d5ae",
+ "card_type": "NORMAL",
+ "card_title": "测试卡",
+ "card_color": "#FFFF00",
+ "card_picture_url": "https://wxpaylogo.qpic.cn/wxpaylogo/xxxxx/0",
+ "code_mode": "SYSTEM_ALLOCATE",
+ "code_type": "BAR_CODE",
+ "code_jump_information": {
+ "jump_appid": "wxea9c30a90fs8d3fe",
+ "jump_path": "/pages/code/code"
+ },
+ "benefits": "会员折扣、专属价",
+ "notify_url": "https://www.weixin.qq.com/wxpay/notify.php",
+ "need_pinned": true,
+ "need_display_level": true,
+ "init_level": "白银会员",
+ "service_phone": "010-8877xxxx",
+ "legal_agreement": "商家需在 48 小时内发货,若商品存在质量问题,用户可在 7 天内申请退货。",
+ "valid_date_information": {
+ "type": "PERMANENT",
+ "available_begin_time": "2020-05-20T13:29:35.120+08:00",
+ "available_end_time": "2020-05-20T13:29:35.120+08:00",
+ "available_day_after_receive": 30
+ },
+ "member_information": {
+ "jump_appid": "wxea9c30a90fs8d3fe",
+ "jump_path": "/pages/points/points"
+ },
+ "points_information": {
+ "jump_appid": "wxea9c30a90fs8d3fe",
+ "jump_path": "/pages/points/points"
+ },
+ "balance_information": {
+ "jump_appid": "wxea9c30a90fs8d3fe",
+ "jump_path": "/pages/balance/balance"
+ },
+ "purchase_information": {
+ "price": 100,
+ "jump_appid": "wxea9c30a90fs8d3fe",
+ "jump_path": "/pages/purchase/purchase"
+ },
+ "user_information": {
+ "common_field_list": [
+ "USER_FORM_FLAG_SEX"
+ ],
+ "custom_field_list": [
+ {
+ "type": "CHECK_BOX",
+ "name": "喜欢的运动",
+ "values": [
+ "篮球"
+ ]
+ }
+ ]
+ }
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/BrandCardMember/Cards/CreateBrandPartnerCardMemberCardResponse.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/BrandCardMember/Cards/CreateBrandPartnerCardMemberCardResponse.json
new file mode 100644
index 00000000..182f5e73
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/BrandCardMember/Cards/CreateBrandPartnerCardMemberCardResponse.json
@@ -0,0 +1,63 @@
+{
+ "out_request_no": "100002322019090134234sfdf",
+ "card_id": "pbLatjvWOibDc5-TBnbUk1pD12o0",
+ "brand_id": "1004",
+ "appid": "wxea9c30890f48d5ae",
+ "card_type": "NORMAL",
+ "card_title": "测试卡",
+ "card_color": "#FFFF00",
+ "card_picture_url": "https://wxpaylogo.qpic.cn/wxpaylogo/xxxxx/0",
+ "code_mode": "SYSTEM_ALLOCATE",
+ "code_type": "BAR_CODE",
+ "code_jump_information": {
+ "jump_appid": "wxea9c30a90fs8d3fe",
+ "jump_path": "/pages/code/code"
+ },
+ "benefits": "会员折扣、专属价",
+ "notify_url": "https://www.weixin.qq.com/wxpay/notify.php",
+ "need_pinned": true,
+ "need_display_level": true,
+ "init_level": "白银会员",
+ "service_phone": "010-8877xxxx",
+ "legal_agreement": "商家需在 48 小时内发货,若商品存在质量问题,用户可在 7 天内申请退货。",
+ "valid_date_information": {
+ "type": "PERMANENT",
+ "available_begin_time": "2020-05-20T13:29:35.120+08:00",
+ "available_end_time": "2020-05-20T13:29:35.120+08:00",
+ "available_day_after_receive": 30
+ },
+ "member_information": {
+ "jump_appid": "wxea9c30a90fs8d3fe",
+ "jump_path": "/pages/points/points"
+ },
+ "points_information": {
+ "jump_appid": "wxea9c30a90fs8d3fe",
+ "jump_path": "/pages/points/points"
+ },
+ "balance_information": {
+ "jump_appid": "wxea9c30a90fs8d3fe",
+ "jump_path": "/pages/balance/balance"
+ },
+ "purchase_information": {
+ "price": 100,
+ "jump_appid": "wxea9c30a90fs8d3fe",
+ "jump_path": "/pages/purchase/purchase"
+ },
+ "user_information": {
+ "common_field_list": [
+ "USER_FORM_FLAG_SEX"
+ ],
+ "custom_field_list": [
+ {
+ "type": "CHECK_BOX",
+ "name": "喜欢的运动",
+ "values": [
+ "篮球"
+ ]
+ }
+ ]
+ },
+ "state": "CARD_EFFECTIVE",
+ "create_time": "2020-05-20T13:29:35.120+08:00",
+ "modify_time": "2020-05-20T13:29:35.120+08:00"
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/BrandCardMember/Cards/GetBrandPartnerCardMemberCardByCardIdResponse.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/BrandCardMember/Cards/GetBrandPartnerCardMemberCardByCardIdResponse.json
new file mode 100644
index 00000000..182f5e73
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/BrandCardMember/Cards/GetBrandPartnerCardMemberCardByCardIdResponse.json
@@ -0,0 +1,63 @@
+{
+ "out_request_no": "100002322019090134234sfdf",
+ "card_id": "pbLatjvWOibDc5-TBnbUk1pD12o0",
+ "brand_id": "1004",
+ "appid": "wxea9c30890f48d5ae",
+ "card_type": "NORMAL",
+ "card_title": "测试卡",
+ "card_color": "#FFFF00",
+ "card_picture_url": "https://wxpaylogo.qpic.cn/wxpaylogo/xxxxx/0",
+ "code_mode": "SYSTEM_ALLOCATE",
+ "code_type": "BAR_CODE",
+ "code_jump_information": {
+ "jump_appid": "wxea9c30a90fs8d3fe",
+ "jump_path": "/pages/code/code"
+ },
+ "benefits": "会员折扣、专属价",
+ "notify_url": "https://www.weixin.qq.com/wxpay/notify.php",
+ "need_pinned": true,
+ "need_display_level": true,
+ "init_level": "白银会员",
+ "service_phone": "010-8877xxxx",
+ "legal_agreement": "商家需在 48 小时内发货,若商品存在质量问题,用户可在 7 天内申请退货。",
+ "valid_date_information": {
+ "type": "PERMANENT",
+ "available_begin_time": "2020-05-20T13:29:35.120+08:00",
+ "available_end_time": "2020-05-20T13:29:35.120+08:00",
+ "available_day_after_receive": 30
+ },
+ "member_information": {
+ "jump_appid": "wxea9c30a90fs8d3fe",
+ "jump_path": "/pages/points/points"
+ },
+ "points_information": {
+ "jump_appid": "wxea9c30a90fs8d3fe",
+ "jump_path": "/pages/points/points"
+ },
+ "balance_information": {
+ "jump_appid": "wxea9c30a90fs8d3fe",
+ "jump_path": "/pages/balance/balance"
+ },
+ "purchase_information": {
+ "price": 100,
+ "jump_appid": "wxea9c30a90fs8d3fe",
+ "jump_path": "/pages/purchase/purchase"
+ },
+ "user_information": {
+ "common_field_list": [
+ "USER_FORM_FLAG_SEX"
+ ],
+ "custom_field_list": [
+ {
+ "type": "CHECK_BOX",
+ "name": "喜欢的运动",
+ "values": [
+ "篮球"
+ ]
+ }
+ ]
+ },
+ "state": "CARD_EFFECTIVE",
+ "create_time": "2020-05-20T13:29:35.120+08:00",
+ "modify_time": "2020-05-20T13:29:35.120+08:00"
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/BrandCardMember/Cards/InvalidateBrandPartnerCardMemberCardRequest.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/BrandCardMember/Cards/InvalidateBrandPartnerCardMemberCardRequest.json
new file mode 100644
index 00000000..ada534f6
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/BrandCardMember/Cards/InvalidateBrandPartnerCardMemberCardRequest.json
@@ -0,0 +1,3 @@
+{
+ "brand_id": "1004"
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/BrandCardMember/Cards/InvalidateBrandPartnerCardMemberCardResponse.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/BrandCardMember/Cards/InvalidateBrandPartnerCardMemberCardResponse.json
new file mode 100644
index 00000000..182f5e73
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/BrandCardMember/Cards/InvalidateBrandPartnerCardMemberCardResponse.json
@@ -0,0 +1,63 @@
+{
+ "out_request_no": "100002322019090134234sfdf",
+ "card_id": "pbLatjvWOibDc5-TBnbUk1pD12o0",
+ "brand_id": "1004",
+ "appid": "wxea9c30890f48d5ae",
+ "card_type": "NORMAL",
+ "card_title": "测试卡",
+ "card_color": "#FFFF00",
+ "card_picture_url": "https://wxpaylogo.qpic.cn/wxpaylogo/xxxxx/0",
+ "code_mode": "SYSTEM_ALLOCATE",
+ "code_type": "BAR_CODE",
+ "code_jump_information": {
+ "jump_appid": "wxea9c30a90fs8d3fe",
+ "jump_path": "/pages/code/code"
+ },
+ "benefits": "会员折扣、专属价",
+ "notify_url": "https://www.weixin.qq.com/wxpay/notify.php",
+ "need_pinned": true,
+ "need_display_level": true,
+ "init_level": "白银会员",
+ "service_phone": "010-8877xxxx",
+ "legal_agreement": "商家需在 48 小时内发货,若商品存在质量问题,用户可在 7 天内申请退货。",
+ "valid_date_information": {
+ "type": "PERMANENT",
+ "available_begin_time": "2020-05-20T13:29:35.120+08:00",
+ "available_end_time": "2020-05-20T13:29:35.120+08:00",
+ "available_day_after_receive": 30
+ },
+ "member_information": {
+ "jump_appid": "wxea9c30a90fs8d3fe",
+ "jump_path": "/pages/points/points"
+ },
+ "points_information": {
+ "jump_appid": "wxea9c30a90fs8d3fe",
+ "jump_path": "/pages/points/points"
+ },
+ "balance_information": {
+ "jump_appid": "wxea9c30a90fs8d3fe",
+ "jump_path": "/pages/balance/balance"
+ },
+ "purchase_information": {
+ "price": 100,
+ "jump_appid": "wxea9c30a90fs8d3fe",
+ "jump_path": "/pages/purchase/purchase"
+ },
+ "user_information": {
+ "common_field_list": [
+ "USER_FORM_FLAG_SEX"
+ ],
+ "custom_field_list": [
+ {
+ "type": "CHECK_BOX",
+ "name": "喜欢的运动",
+ "values": [
+ "篮球"
+ ]
+ }
+ ]
+ },
+ "state": "CARD_EFFECTIVE",
+ "create_time": "2020-05-20T13:29:35.120+08:00",
+ "modify_time": "2020-05-20T13:29:35.120+08:00"
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/BrandCardMember/Cards/QueryBrandPartnerCardMemberCardsResponse.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/BrandCardMember/Cards/QueryBrandPartnerCardMemberCardsResponse.json
new file mode 100644
index 00000000..eead3078
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/BrandCardMember/Cards/QueryBrandPartnerCardMemberCardsResponse.json
@@ -0,0 +1,70 @@
+{
+ "data": [
+ {
+ "out_request_no": "100002322019090134234sfdf",
+ "card_id": "pbLatjvWOibDc5-TBnbUk1pD12o0",
+ "brand_id": "1004",
+ "appid": "wxea9c30890f48d5ae",
+ "card_type": "NORMAL",
+ "card_title": "测试卡",
+ "card_color": "#FFFF00",
+ "card_picture_url": "https://wxpaylogo.qpic.cn/wxpaylogo/xxxxx/0",
+ "code_mode": "SYSTEM_ALLOCATE",
+ "code_type": "BAR_CODE",
+ "code_jump_information": {
+ "jump_appid": "wxea9c30a90fs8d3fe",
+ "jump_path": "/pages/code/code"
+ },
+ "benefits": "会员折扣、专属价",
+ "notify_url": "https://www.weixin.qq.com/wxpay/notify.php",
+ "need_pinned": true,
+ "need_display_level": true,
+ "init_level": "白银会员",
+ "service_phone": "010-8877xxxx",
+ "legal_agreement": "商家需在 48 小时内发货,若商品存在质量问题,用户可在 7 天内申请退货。",
+ "valid_date_information": {
+ "type": "PERMANENT",
+ "available_begin_time": "2020-05-20T13:29:35.120+08:00",
+ "available_end_time": "2020-05-20T13:29:35.120+08:00",
+ "available_day_after_receive": 30
+ },
+ "member_information": {
+ "jump_appid": "wxea9c30a90fs8d3fe",
+ "jump_path": "/pages/points/points"
+ },
+ "points_information": {
+ "jump_appid": "wxea9c30a90fs8d3fe",
+ "jump_path": "/pages/points/points"
+ },
+ "balance_information": {
+ "jump_appid": "wxea9c30a90fs8d3fe",
+ "jump_path": "/pages/balance/balance"
+ },
+ "purchase_information": {
+ "price": 100,
+ "jump_appid": "wxea9c30a90fs8d3fe",
+ "jump_path": "/pages/purchase/purchase"
+ },
+ "user_information": {
+ "common_field_list": [
+ "USER_FORM_FLAG_SEX"
+ ],
+ "custom_field_list": [
+ {
+ "type": "CHECK_BOX",
+ "name": "喜欢的运动",
+ "values": [
+ "篮球"
+ ]
+ }
+ ]
+ },
+ "state": "CARD_EFFECTIVE",
+ "create_time": "2020-05-20T13:29:35.120+08:00",
+ "modify_time": "2020-05-20T13:29:35.120+08:00"
+ }
+ ],
+ "total_count": 20,
+ "offset": 0,
+ "limit": 20
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/BrandCardMember/Cards/UpdateBrandPartnerCardMemberCardRequest.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/BrandCardMember/Cards/UpdateBrandPartnerCardMemberCardRequest.json
new file mode 100644
index 00000000..3fdfb48e
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/BrandCardMember/Cards/UpdateBrandPartnerCardMemberCardRequest.json
@@ -0,0 +1,52 @@
+{
+ "brand_id": "实例值",
+ "card_title": "测试卡",
+ "card_color": "#FFFF00",
+ "card_picture_url": "https://wxpaylogo.qpic.cn/wxpaylogo/xxxxx/0",
+ "code_jump_information": {
+ "jump_appid": "wxea9c30a90fs8d3fe",
+ "jump_path": "/pages/code/code"
+ },
+ "benefits": "会员折扣、专属价",
+ "notify_url": "https://www.weixin.qq.com/wxpay/notify.php",
+ "need_pinned": true,
+ "need_display_level": true,
+ "service_phone": "010-8877xxxx",
+ "valid_date_information": {
+ "type": "PERMANENT",
+ "available_begin_time": "2020-05-20T13:29:35.120+08:00",
+ "available_end_time": "2020-05-20T13:29:35.120+08:00",
+ "available_day_after_receive": 30
+ },
+ "member_information": {
+ "jump_appid": "wxea9c30a90fs8d3fe",
+ "jump_path": "/pages/points/points"
+ },
+ "points_information": {
+ "jump_appid": "wxea9c30a90fs8d3fe",
+ "jump_path": "/pages/points/points"
+ },
+ "balance_information": {
+ "jump_appid": "wxea9c30a90fs8d3fe",
+ "jump_path": "/pages/balance/balance"
+ },
+ "purchase_information": {
+ "price": 100,
+ "jump_appid": "wxea9c30a90fs8d3fe",
+ "jump_path": "/pages/purchase/purchase"
+ },
+ "user_information": {
+ "common_field_list": [
+ "USER_FORM_FLAG_SEX"
+ ],
+ "custom_field_list": [
+ {
+ "type": "CHECK_BOX",
+ "name": "喜欢的运动",
+ "values": [
+ "篮球"
+ ]
+ }
+ ]
+ }
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/BrandCardMember/Cards/UpdateBrandPartnerCardMemberCardResponse.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/BrandCardMember/Cards/UpdateBrandPartnerCardMemberCardResponse.json
new file mode 100644
index 00000000..182f5e73
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/BrandCardMember/Cards/UpdateBrandPartnerCardMemberCardResponse.json
@@ -0,0 +1,63 @@
+{
+ "out_request_no": "100002322019090134234sfdf",
+ "card_id": "pbLatjvWOibDc5-TBnbUk1pD12o0",
+ "brand_id": "1004",
+ "appid": "wxea9c30890f48d5ae",
+ "card_type": "NORMAL",
+ "card_title": "测试卡",
+ "card_color": "#FFFF00",
+ "card_picture_url": "https://wxpaylogo.qpic.cn/wxpaylogo/xxxxx/0",
+ "code_mode": "SYSTEM_ALLOCATE",
+ "code_type": "BAR_CODE",
+ "code_jump_information": {
+ "jump_appid": "wxea9c30a90fs8d3fe",
+ "jump_path": "/pages/code/code"
+ },
+ "benefits": "会员折扣、专属价",
+ "notify_url": "https://www.weixin.qq.com/wxpay/notify.php",
+ "need_pinned": true,
+ "need_display_level": true,
+ "init_level": "白银会员",
+ "service_phone": "010-8877xxxx",
+ "legal_agreement": "商家需在 48 小时内发货,若商品存在质量问题,用户可在 7 天内申请退货。",
+ "valid_date_information": {
+ "type": "PERMANENT",
+ "available_begin_time": "2020-05-20T13:29:35.120+08:00",
+ "available_end_time": "2020-05-20T13:29:35.120+08:00",
+ "available_day_after_receive": 30
+ },
+ "member_information": {
+ "jump_appid": "wxea9c30a90fs8d3fe",
+ "jump_path": "/pages/points/points"
+ },
+ "points_information": {
+ "jump_appid": "wxea9c30a90fs8d3fe",
+ "jump_path": "/pages/points/points"
+ },
+ "balance_information": {
+ "jump_appid": "wxea9c30a90fs8d3fe",
+ "jump_path": "/pages/balance/balance"
+ },
+ "purchase_information": {
+ "price": 100,
+ "jump_appid": "wxea9c30a90fs8d3fe",
+ "jump_path": "/pages/purchase/purchase"
+ },
+ "user_information": {
+ "common_field_list": [
+ "USER_FORM_FLAG_SEX"
+ ],
+ "custom_field_list": [
+ {
+ "type": "CHECK_BOX",
+ "name": "喜欢的运动",
+ "values": [
+ "篮球"
+ ]
+ }
+ ]
+ },
+ "state": "CARD_EFFECTIVE",
+ "create_time": "2020-05-20T13:29:35.120+08:00",
+ "modify_time": "2020-05-20T13:29:35.120+08:00"
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/BrandCardMember/CreateBrandPartnerCardMemberPreauthTokenRequest.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/BrandCardMember/CreateBrandPartnerCardMemberPreauthTokenRequest.json
new file mode 100644
index 00000000..45a294fe
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/BrandCardMember/CreateBrandPartnerCardMemberPreauthTokenRequest.json
@@ -0,0 +1,5 @@
+{
+ "brand_id": "1004",
+ "card_id": "pbLatjvWOibDc5-TBnbUk1pD12o0",
+ "openid": "obLatjnx9gnqzS4myYGmLZ7LgLBA"
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/BrandCardMember/CreateBrandPartnerCardMemberPreauthTokenResponse.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/BrandCardMember/CreateBrandPartnerCardMemberPreauthTokenResponse.json
new file mode 100644
index 00000000..7715c0e7
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/BrandCardMember/CreateBrandPartnerCardMemberPreauthTokenResponse.json
@@ -0,0 +1,4 @@
+{
+ "token": "d2df23f2f4fasf3gws",
+ "expire_time": "2020-05-20T13:29:35.120+08:00"
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/BrandCardMember/UserCards/ConfirmBrandPartnerCardMemberUserCardRequest.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/BrandCardMember/UserCards/ConfirmBrandPartnerCardMemberUserCardRequest.json
new file mode 100644
index 00000000..ece2bcd8
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/BrandCardMember/UserCards/ConfirmBrandPartnerCardMemberUserCardRequest.json
@@ -0,0 +1,32 @@
+{
+ "brand_id": "1004",
+ "openid": "obLatjnx9gnqzS4myYGmLZ7LgLBA",
+ "card_color": "#FFFF00",
+ "card_picture_url": "https://wxpaylogo.qpic.cn/wxpaylogo/PiajxSqBRaEIPAeia7Imvtsn7sYGNcEj33YzVvJF88ECQ19LXId8ZL2Q/0",
+ "phone_number": "vvysDQeEaH3I+wRh14St0abIkvQyFgh/fbWYSs2bLtG9tj+bdJn4WSCPzLhShNHgujZzseiL6sYmT7E65mv/eFeTa7yslYfrX0hrhHazSM/+tfvN/C3OZwiBbcrF9LTIIdBVhGOqhCx0gK5YAVZc8dbW/yJqC5i79PDfVYJtpQe3A4v/GiDa2Q+Mv03taxgnEkzqlSPjkXiCYBj9UaFJ4bqCTXiO2Kt6TpczvAaZW+9/blxiJwqEFXe78LbrIQvkDUmVdZbqBdPQ+QGQgc/2Ea4IbP/EEt1qSyXnFbzaaKSE2j4mAFON3kzNexb/SYkHZNJAuCittaW4wpGj7U+h9A==",
+ "level": "钻石会员",
+ "valid_date_information": {
+ "type": "PERMANENT",
+ "available_begin_time": "2020-05-20T13:29:35.120+08:00",
+ "available_end_time": "2020-05-20T13:29:35.120+08:00",
+ "available_day_after_receive": 30
+ },
+ "user_information": {
+ "common_field_list": [
+ {
+ "name": "USER_FORM_FLAG_BIRTHDAY",
+ "value": "vvysDQeEaH3I+wRh14St0abIkvQyFgh/fbWYSs2bLtG9tj+bdJn4WSCPzLhShNHgujZzseiL6sYmT7E65mv/eFeTa7yslYfrX0hrhHazSM/+tfvN/C3OZwiBbcrF9LTIIdBVhGOqhCx0gK5YAVZc8dbW/yJqC5i79PDfVYJtpQe3A4v/GiDa2Q+Mv03taxgnEkzqlSPjkXiCYBj9UaFJ4bqCTXiO2Kt6TpczvAaZW+9/blxiJwqEFXe78LbrIQvkDUmVdZbqBdPQ+QGQgc/2Ea4IbP/EEt1qSyXnFbzaaKSE2j4mAFON3kzNexb/SYkHZNJAuCittaW4wpGj7U+h9A=="
+ }
+ ],
+ "custom_field_list": [
+ {
+ "name": "喜欢的运动",
+ "user_chosen_values": [
+ "vvysDQeEaH3I+wRh14St0abIkvQyFgh/fbWYSs2bLtG9tj+bdJn4WSCPzLhShNHgujZzseiL6sYmT7E65mv/eFeTa7yslYfrX0hrhHazSM/+tfvN/C3OZwiBbcrF9LTIIdBVhGOqhCx0gK5YAVZc8dbW/yJqC5i79PDfVYJtpQe3A4v/GiDa2Q+Mv03taxgnEkzqlSPjkXiCYBj9UaFJ4bqCTXiO2Kt6TpczvAaZW+9/blxiJwqEFXe78LbrIQvkDUmVdZbqBdPQ+QGQgc/2Ea4IbP/EEt1qSyXnFbzaaKSE2j4mAFON3kzNexb/SYkHZNJAuCittaW4wpGj7U+h9A=="
+ ]
+ }
+ ]
+ },
+ "attach": "自定义数据说明",
+ "user_card_confirm_state": "CREATE_CARD_SUCCESS"
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/BrandCardMember/UserCards/ConfirmBrandPartnerCardMemberUserCardResponse.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/BrandCardMember/UserCards/ConfirmBrandPartnerCardMemberUserCardResponse.json
new file mode 100644
index 00000000..6603de53
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/BrandCardMember/UserCards/ConfirmBrandPartnerCardMemberUserCardResponse.json
@@ -0,0 +1,40 @@
+{
+ "user_card_code": "478515832665",
+ "card_id": "pbLatjvWOibDc5-TBnbUk1pD12o0",
+ "openid": "obLatjnx9gnqzS4myYGmLZ7LgLBA",
+ "card_color": "#FFFF00",
+ "card_picture_url": "https://wxpaylogo.qpic.cn/wxpaylogo/PiajxSqBRaEIPAeia7Imvtsn7sYGNcEj33YzVvJF88ECQ19LXId8ZL2Q/0",
+ "brand_id": "1001622624",
+ "card_type": "NORMAL",
+ "phone_number": "vvysDQeEaH3I+wRh14St0abIkvQyFgh/fbWYSs2bLtG9tj+bdJn4WSCPzLhShNHgujZzseiL6sYmT7E65mv/eFeTa7yslYfrX0hrhHazSM/+tfvN/C3OZwiBbcrF9LTIIdBVhGOqhCx0gK5YAVZc8dbW/yJqC5i79PDfVYJtpQe3A4v/GiDa2Q+Mv03taxgnEkzqlSPjkXiCYBj9UaFJ4bqCTXiO2Kt6TpczvAaZW+9/blxiJwqEFXe78LbrIQvkDUmVdZbqBdPQ+QGQgc/2Ea4IbP/EEt1qSyXnFbzaaKSE2j4mAFON3kzNexb/SYkHZNJAuCittaW4wpGj7U+h9A==",
+ "level": "钻石会员",
+ "valid_date_information": {
+ "type": "PERMANENT",
+ "available_begin_time": "2020-05-20T13:29:35.120+08:00",
+ "available_end_time": "2020-05-20T13:29:35.120+08:00",
+ "available_day_after_receive": 30
+ },
+ "pickup_time": "2020-05-20T13:29:35.120+08:00",
+ "user_information": {
+ "common_field_list": [
+ {
+ "name": "USER_FORM_FLAG_BIRTHDAY",
+ "value": "vvysDQeEaH3I+wRh14St0abIkvQyFgh/fbWYSs2bLtG9tj+bdJn4WSCPzLhShNHgujZzseiL6sYmT7E65mv/eFeTa7yslYfrX0hrhHazSM/+tfvN/C3OZwiBbcrF9LTIIdBVhGOqhCx0gK5YAVZc8dbW/yJqC5i79PDfVYJtpQe3A4v/GiDa2Q+Mv03taxgnEkzqlSPjkXiCYBj9UaFJ4bqCTXiO2Kt6TpczvAaZW+9/blxiJwqEFXe78LbrIQvkDUmVdZbqBdPQ+QGQgc/2Ea4IbP/EEt1qSyXnFbzaaKSE2j4mAFON3kzNexb/SYkHZNJAuCittaW4wpGj7U+h9A=="
+ }
+ ],
+ "custom_field_list": [
+ {
+ "name": "喜欢的运动",
+ "user_chosen_values": [
+ "vvysDQeEaH3I+wRh14St0abIkvQyFgh/fbWYSs2bLtG9tj+bdJn4WSCPzLhShNHgujZzseiL6sYmT7E65mv/eFeTa7yslYfrX0hrhHazSM/+tfvN/C3OZwiBbcrF9LTIIdBVhGOqhCx0gK5YAVZc8dbW/yJqC5i79PDfVYJtpQe3A4v/GiDa2Q+Mv03taxgnEkzqlSPjkXiCYBj9UaFJ4bqCTXiO2Kt6TpczvAaZW+9/blxiJwqEFXe78LbrIQvkDUmVdZbqBdPQ+QGQgc/2Ea4IbP/EEt1qSyXnFbzaaKSE2j4mAFON3kzNexb/SYkHZNJAuCittaW4wpGj7U+h9A=="
+ ]
+ }
+ ]
+ },
+ "attach": "自定义数据说明",
+ "user_card_state": "EFFECTIVE",
+ "invalid_reason": "传入的自定义作废原因",
+ "invalid_time": "2020-05-20T13:29:35.120+08:00",
+ "create_time": "2020-05-20T13:29:35.120+08:00",
+ "modify_time": "2020-05-20T13:29:35.120+08:00"
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/BrandCardMember/UserCards/GetBrandPartnerCardMemberUserCardByUserCardCodeResponse.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/BrandCardMember/UserCards/GetBrandPartnerCardMemberUserCardByUserCardCodeResponse.json
new file mode 100644
index 00000000..6603de53
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/BrandCardMember/UserCards/GetBrandPartnerCardMemberUserCardByUserCardCodeResponse.json
@@ -0,0 +1,40 @@
+{
+ "user_card_code": "478515832665",
+ "card_id": "pbLatjvWOibDc5-TBnbUk1pD12o0",
+ "openid": "obLatjnx9gnqzS4myYGmLZ7LgLBA",
+ "card_color": "#FFFF00",
+ "card_picture_url": "https://wxpaylogo.qpic.cn/wxpaylogo/PiajxSqBRaEIPAeia7Imvtsn7sYGNcEj33YzVvJF88ECQ19LXId8ZL2Q/0",
+ "brand_id": "1001622624",
+ "card_type": "NORMAL",
+ "phone_number": "vvysDQeEaH3I+wRh14St0abIkvQyFgh/fbWYSs2bLtG9tj+bdJn4WSCPzLhShNHgujZzseiL6sYmT7E65mv/eFeTa7yslYfrX0hrhHazSM/+tfvN/C3OZwiBbcrF9LTIIdBVhGOqhCx0gK5YAVZc8dbW/yJqC5i79PDfVYJtpQe3A4v/GiDa2Q+Mv03taxgnEkzqlSPjkXiCYBj9UaFJ4bqCTXiO2Kt6TpczvAaZW+9/blxiJwqEFXe78LbrIQvkDUmVdZbqBdPQ+QGQgc/2Ea4IbP/EEt1qSyXnFbzaaKSE2j4mAFON3kzNexb/SYkHZNJAuCittaW4wpGj7U+h9A==",
+ "level": "钻石会员",
+ "valid_date_information": {
+ "type": "PERMANENT",
+ "available_begin_time": "2020-05-20T13:29:35.120+08:00",
+ "available_end_time": "2020-05-20T13:29:35.120+08:00",
+ "available_day_after_receive": 30
+ },
+ "pickup_time": "2020-05-20T13:29:35.120+08:00",
+ "user_information": {
+ "common_field_list": [
+ {
+ "name": "USER_FORM_FLAG_BIRTHDAY",
+ "value": "vvysDQeEaH3I+wRh14St0abIkvQyFgh/fbWYSs2bLtG9tj+bdJn4WSCPzLhShNHgujZzseiL6sYmT7E65mv/eFeTa7yslYfrX0hrhHazSM/+tfvN/C3OZwiBbcrF9LTIIdBVhGOqhCx0gK5YAVZc8dbW/yJqC5i79PDfVYJtpQe3A4v/GiDa2Q+Mv03taxgnEkzqlSPjkXiCYBj9UaFJ4bqCTXiO2Kt6TpczvAaZW+9/blxiJwqEFXe78LbrIQvkDUmVdZbqBdPQ+QGQgc/2Ea4IbP/EEt1qSyXnFbzaaKSE2j4mAFON3kzNexb/SYkHZNJAuCittaW4wpGj7U+h9A=="
+ }
+ ],
+ "custom_field_list": [
+ {
+ "name": "喜欢的运动",
+ "user_chosen_values": [
+ "vvysDQeEaH3I+wRh14St0abIkvQyFgh/fbWYSs2bLtG9tj+bdJn4WSCPzLhShNHgujZzseiL6sYmT7E65mv/eFeTa7yslYfrX0hrhHazSM/+tfvN/C3OZwiBbcrF9LTIIdBVhGOqhCx0gK5YAVZc8dbW/yJqC5i79PDfVYJtpQe3A4v/GiDa2Q+Mv03taxgnEkzqlSPjkXiCYBj9UaFJ4bqCTXiO2Kt6TpczvAaZW+9/blxiJwqEFXe78LbrIQvkDUmVdZbqBdPQ+QGQgc/2Ea4IbP/EEt1qSyXnFbzaaKSE2j4mAFON3kzNexb/SYkHZNJAuCittaW4wpGj7U+h9A=="
+ ]
+ }
+ ]
+ },
+ "attach": "自定义数据说明",
+ "user_card_state": "EFFECTIVE",
+ "invalid_reason": "传入的自定义作废原因",
+ "invalid_time": "2020-05-20T13:29:35.120+08:00",
+ "create_time": "2020-05-20T13:29:35.120+08:00",
+ "modify_time": "2020-05-20T13:29:35.120+08:00"
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/BrandCardMember/UserCards/ImportBrandPartnerCardMemberUserCardByOpenIdRequest.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/BrandCardMember/UserCards/ImportBrandPartnerCardMemberUserCardByOpenIdRequest.json
new file mode 100644
index 00000000..2d17538b
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/BrandCardMember/UserCards/ImportBrandPartnerCardMemberUserCardByOpenIdRequest.json
@@ -0,0 +1,33 @@
+{
+ "brand_id": "1004",
+ "card_id": "pbLatjvWOibDc5-TBnbUk1pD12o0",
+ "openid": "obLatjnx9gnqzS4myYGmLZ7LgLBA",
+ "user_card_code": "478515832665",
+ "phone_number": "vvysDQeEaH3I+wRh14St0abIkvQyFgh/fbWYSs2bLtG9tj+bdJn4WSCPzLhShNHgujZzseiL6sYmT7E65mv/eFeTa7yslYfrX0hrhHazSM/+tfvN/C3OZwiBbcrF9LTIIdBVhGOqhCx0gK5YAVZc8dbW/yJqC5i79PDfVYJtpQe3A4v/GiDa2Q+Mv03taxgnEkzqlSPjkXiCYBj9UaFJ4bqCTXiO2Kt6TpczvAaZW+9/blxiJwqEFXe78LbrIQvkDUmVdZbqBdPQ+QGQgc/2Ea4IbP/EEt1qSyXnFbzaaKSE2j4mAFON3kzNexb/SYkHZNJAuCittaW4wpGj7U+h9A==",
+ "card_color": "#FFFF00",
+ "card_picture_url": "https://wxpaylogo.qpic.cn/wxpaylogo/PiajxSqBRaEIPAeia7Imvtsn7sYGNcEj33YzVvJF88ECQ19LXId8ZL2Q/0",
+ "level": "钻石会员",
+ "user_information": {
+ "common_field_list": [
+ {
+ "name": "USER_FORM_FLAG_BIRTHDAY",
+ "value": "vvysDQeEaH3I+wRh14St0abIkvQyFgh/fbWYSs2bLtG9tj+bdJn4WSCPzLhShNHgujZzseiL6sYmT7E65mv/eFeTa7yslYfrX0hrhHazSM/+tfvN/C3OZwiBbcrF9LTIIdBVhGOqhCx0gK5YAVZc8dbW/yJqC5i79PDfVYJtpQe3A4v/GiDa2Q+Mv03taxgnEkzqlSPjkXiCYBj9UaFJ4bqCTXiO2Kt6TpczvAaZW+9/blxiJwqEFXe78LbrIQvkDUmVdZbqBdPQ+QGQgc/2Ea4IbP/EEt1qSyXnFbzaaKSE2j4mAFON3kzNexb/SYkHZNJAuCittaW4wpGj7U+h9A=="
+ }
+ ],
+ "custom_field_list": [
+ {
+ "name": "喜欢的运动",
+ "user_chosen_values": [
+ "vvysDQeEaH3I+wRh14St0abIkvQyFgh/fbWYSs2bLtG9tj+bdJn4WSCPzLhShNHgujZzseiL6sYmT7E65mv/eFeTa7yslYfrX0hrhHazSM/+tfvN/C3OZwiBbcrF9LTIIdBVhGOqhCx0gK5YAVZc8dbW/yJqC5i79PDfVYJtpQe3A4v/GiDa2Q+Mv03taxgnEkzqlSPjkXiCYBj9UaFJ4bqCTXiO2Kt6TpczvAaZW+9/blxiJwqEFXe78LbrIQvkDUmVdZbqBdPQ+QGQgc/2Ea4IbP/EEt1qSyXnFbzaaKSE2j4mAFON3kzNexb/SYkHZNJAuCittaW4wpGj7U+h9A=="
+ ]
+ }
+ ]
+ },
+ "valid_date_information": {
+ "type": "PERMANENT",
+ "available_begin_time": "2020-05-20T13:29:35.120+08:00",
+ "available_end_time": "2020-05-20T13:29:35.120+08:00",
+ "available_day_after_receive": 30
+ },
+ "pickup_time": "2020-05-20T13:29:35.120+08:00"
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/BrandCardMember/UserCards/ImportBrandPartnerCardMemberUserCardByOpenIdResponse.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/BrandCardMember/UserCards/ImportBrandPartnerCardMemberUserCardByOpenIdResponse.json
new file mode 100644
index 00000000..6603de53
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/BrandCardMember/UserCards/ImportBrandPartnerCardMemberUserCardByOpenIdResponse.json
@@ -0,0 +1,40 @@
+{
+ "user_card_code": "478515832665",
+ "card_id": "pbLatjvWOibDc5-TBnbUk1pD12o0",
+ "openid": "obLatjnx9gnqzS4myYGmLZ7LgLBA",
+ "card_color": "#FFFF00",
+ "card_picture_url": "https://wxpaylogo.qpic.cn/wxpaylogo/PiajxSqBRaEIPAeia7Imvtsn7sYGNcEj33YzVvJF88ECQ19LXId8ZL2Q/0",
+ "brand_id": "1001622624",
+ "card_type": "NORMAL",
+ "phone_number": "vvysDQeEaH3I+wRh14St0abIkvQyFgh/fbWYSs2bLtG9tj+bdJn4WSCPzLhShNHgujZzseiL6sYmT7E65mv/eFeTa7yslYfrX0hrhHazSM/+tfvN/C3OZwiBbcrF9LTIIdBVhGOqhCx0gK5YAVZc8dbW/yJqC5i79PDfVYJtpQe3A4v/GiDa2Q+Mv03taxgnEkzqlSPjkXiCYBj9UaFJ4bqCTXiO2Kt6TpczvAaZW+9/blxiJwqEFXe78LbrIQvkDUmVdZbqBdPQ+QGQgc/2Ea4IbP/EEt1qSyXnFbzaaKSE2j4mAFON3kzNexb/SYkHZNJAuCittaW4wpGj7U+h9A==",
+ "level": "钻石会员",
+ "valid_date_information": {
+ "type": "PERMANENT",
+ "available_begin_time": "2020-05-20T13:29:35.120+08:00",
+ "available_end_time": "2020-05-20T13:29:35.120+08:00",
+ "available_day_after_receive": 30
+ },
+ "pickup_time": "2020-05-20T13:29:35.120+08:00",
+ "user_information": {
+ "common_field_list": [
+ {
+ "name": "USER_FORM_FLAG_BIRTHDAY",
+ "value": "vvysDQeEaH3I+wRh14St0abIkvQyFgh/fbWYSs2bLtG9tj+bdJn4WSCPzLhShNHgujZzseiL6sYmT7E65mv/eFeTa7yslYfrX0hrhHazSM/+tfvN/C3OZwiBbcrF9LTIIdBVhGOqhCx0gK5YAVZc8dbW/yJqC5i79PDfVYJtpQe3A4v/GiDa2Q+Mv03taxgnEkzqlSPjkXiCYBj9UaFJ4bqCTXiO2Kt6TpczvAaZW+9/blxiJwqEFXe78LbrIQvkDUmVdZbqBdPQ+QGQgc/2Ea4IbP/EEt1qSyXnFbzaaKSE2j4mAFON3kzNexb/SYkHZNJAuCittaW4wpGj7U+h9A=="
+ }
+ ],
+ "custom_field_list": [
+ {
+ "name": "喜欢的运动",
+ "user_chosen_values": [
+ "vvysDQeEaH3I+wRh14St0abIkvQyFgh/fbWYSs2bLtG9tj+bdJn4WSCPzLhShNHgujZzseiL6sYmT7E65mv/eFeTa7yslYfrX0hrhHazSM/+tfvN/C3OZwiBbcrF9LTIIdBVhGOqhCx0gK5YAVZc8dbW/yJqC5i79PDfVYJtpQe3A4v/GiDa2Q+Mv03taxgnEkzqlSPjkXiCYBj9UaFJ4bqCTXiO2Kt6TpczvAaZW+9/blxiJwqEFXe78LbrIQvkDUmVdZbqBdPQ+QGQgc/2Ea4IbP/EEt1qSyXnFbzaaKSE2j4mAFON3kzNexb/SYkHZNJAuCittaW4wpGj7U+h9A=="
+ ]
+ }
+ ]
+ },
+ "attach": "自定义数据说明",
+ "user_card_state": "EFFECTIVE",
+ "invalid_reason": "传入的自定义作废原因",
+ "invalid_time": "2020-05-20T13:29:35.120+08:00",
+ "create_time": "2020-05-20T13:29:35.120+08:00",
+ "modify_time": "2020-05-20T13:29:35.120+08:00"
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/BrandCardMember/UserCards/InvalidateBrandPartnerCardMemberUserCardRequest.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/BrandCardMember/UserCards/InvalidateBrandPartnerCardMemberUserCardRequest.json
new file mode 100644
index 00000000..dc78ce75
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/BrandCardMember/UserCards/InvalidateBrandPartnerCardMemberUserCardRequest.json
@@ -0,0 +1,4 @@
+{
+ "openid": "obLatjnx9gnqzS4myYGmLZ7LgLBA",
+ "invalid_reason": "传入的自定义作废原因"
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/BrandCardMember/UserCards/QueryBrandPartnerCardMemberUserCardsResponse.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/BrandCardMember/UserCards/QueryBrandPartnerCardMemberUserCardsResponse.json
new file mode 100644
index 00000000..325f5416
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/BrandCardMember/UserCards/QueryBrandPartnerCardMemberUserCardsResponse.json
@@ -0,0 +1,47 @@
+{
+ "data": [
+ {
+ "user_card_code": "478515832665",
+ "card_id": "pbLatjvWOibDc5-TBnbUk1pD12o0",
+ "openid": "obLatjnx9gnqzS4myYGmLZ7LgLBA",
+ "card_color": "#FFFF00",
+ "card_picture_url": "https://wxpaylogo.qpic.cn/wxpaylogo/PiajxSqBRaEIPAeia7Imvtsn7sYGNcEj33YzVvJF88ECQ19LXId8ZL2Q/0",
+ "brand_id": "1001622624",
+ "card_type": "NORMAL",
+ "phone_number": "vvysDQeEaH3I+wRh14St0abIkvQyFgh/fbWYSs2bLtG9tj+bdJn4WSCPzLhShNHgujZzseiL6sYmT7E65mv/eFeTa7yslYfrX0hrhHazSM/+tfvN/C3OZwiBbcrF9LTIIdBVhGOqhCx0gK5YAVZc8dbW/yJqC5i79PDfVYJtpQe3A4v/GiDa2Q+Mv03taxgnEkzqlSPjkXiCYBj9UaFJ4bqCTXiO2Kt6TpczvAaZW+9/blxiJwqEFXe78LbrIQvkDUmVdZbqBdPQ+QGQgc/2Ea4IbP/EEt1qSyXnFbzaaKSE2j4mAFON3kzNexb/SYkHZNJAuCittaW4wpGj7U+h9A==",
+ "level": "钻石会员",
+ "valid_date_information": {
+ "type": "PERMANENT",
+ "available_begin_time": "2020-05-20T13:29:35.120+08:00",
+ "available_end_time": "2020-05-20T13:29:35.120+08:00",
+ "available_day_after_receive": 30
+ },
+ "pickup_time": "2020-05-20T13:29:35.120+08:00",
+ "user_information": {
+ "common_field_list": [
+ {
+ "name": "USER_FORM_FLAG_BIRTHDAY",
+ "value": "vvysDQeEaH3I+wRh14St0abIkvQyFgh/fbWYSs2bLtG9tj+bdJn4WSCPzLhShNHgujZzseiL6sYmT7E65mv/eFeTa7yslYfrX0hrhHazSM/+tfvN/C3OZwiBbcrF9LTIIdBVhGOqhCx0gK5YAVZc8dbW/yJqC5i79PDfVYJtpQe3A4v/GiDa2Q+Mv03taxgnEkzqlSPjkXiCYBj9UaFJ4bqCTXiO2Kt6TpczvAaZW+9/blxiJwqEFXe78LbrIQvkDUmVdZbqBdPQ+QGQgc/2Ea4IbP/EEt1qSyXnFbzaaKSE2j4mAFON3kzNexb/SYkHZNJAuCittaW4wpGj7U+h9A=="
+ }
+ ],
+ "custom_field_list": [
+ {
+ "name": "喜欢的运动",
+ "user_chosen_values": [
+ "vvysDQeEaH3I+wRh14St0abIkvQyFgh/fbWYSs2bLtG9tj+bdJn4WSCPzLhShNHgujZzseiL6sYmT7E65mv/eFeTa7yslYfrX0hrhHazSM/+tfvN/C3OZwiBbcrF9LTIIdBVhGOqhCx0gK5YAVZc8dbW/yJqC5i79PDfVYJtpQe3A4v/GiDa2Q+Mv03taxgnEkzqlSPjkXiCYBj9UaFJ4bqCTXiO2Kt6TpczvAaZW+9/blxiJwqEFXe78LbrIQvkDUmVdZbqBdPQ+QGQgc/2Ea4IbP/EEt1qSyXnFbzaaKSE2j4mAFON3kzNexb/SYkHZNJAuCittaW4wpGj7U+h9A=="
+ ]
+ }
+ ]
+ },
+ "attach": "自定义数据说明",
+ "user_card_state": "EFFECTIVE",
+ "invalid_reason": "传入的自定义作废原因",
+ "invalid_time": "2020-05-20T13:29:35.120+08:00",
+ "create_time": "2020-05-20T13:29:35.120+08:00",
+ "modify_time": "2020-05-20T13:29:35.120+08:00"
+ }
+ ],
+ "total_count": 20,
+ "offset": 0,
+ "limit": 20
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/BrandCardMember/UserCards/UpdateBrandPartnerCardMemberUserCardRequest.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/BrandCardMember/UserCards/UpdateBrandPartnerCardMemberUserCardRequest.json
new file mode 100644
index 00000000..71ebad79
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/BrandCardMember/UserCards/UpdateBrandPartnerCardMemberUserCardRequest.json
@@ -0,0 +1,31 @@
+{
+ "brand_id": "1004",
+ "openid": "obLatjnx9gnqzS4myYGmLZ7LgLBA",
+ "card_color": "#FFFF00",
+ "card_picture_url": "https://wxpaylogo.qpic.cn/wxpaylogo/PiajxSqBRaEIPAeia7Imvtsn7sYGNcEj33YzVvJF88ECQ19LXId8ZL2Q/0",
+ "phone_number": "vvysDQeEaH3I+wRh14St0abIkvQyFgh/fbWYSs2bLtG9tj+bdJn4WSCPzLhShNHgujZzseiL6sYmT7E65mv/eFeTa7yslYfrX0hrhHazSM/+tfvN/C3OZwiBbcrF9LTIIdBVhGOqhCx0gK5YAVZc8dbW/yJqC5i79PDfVYJtpQe3A4v/GiDa2Q+Mv03taxgnEkzqlSPjkXiCYBj9UaFJ4bqCTXiO2Kt6TpczvAaZW+9/blxiJwqEFXe78LbrIQvkDUmVdZbqBdPQ+QGQgc/2Ea4IbP/EEt1qSyXnFbzaaKSE2j4mAFON3kzNexb/SYkHZNJAuCittaW4wpGj7U+h9A==",
+ "level": "钻石会员",
+ "valid_date_information": {
+ "type": "PERMANENT",
+ "available_begin_time": "2020-05-20T13:29:35.120+08:00",
+ "available_end_time": "2020-05-20T13:29:35.120+08:00",
+ "available_day_after_receive": 30
+ },
+ "user_information": {
+ "common_field_list": [
+ {
+ "name": "USER_FORM_FLAG_BIRTHDAY",
+ "value": "vvysDQeEaH3I+wRh14St0abIkvQyFgh/fbWYSs2bLtG9tj+bdJn4WSCPzLhShNHgujZzseiL6sYmT7E65mv/eFeTa7yslYfrX0hrhHazSM/+tfvN/C3OZwiBbcrF9LTIIdBVhGOqhCx0gK5YAVZc8dbW/yJqC5i79PDfVYJtpQe3A4v/GiDa2Q+Mv03taxgnEkzqlSPjkXiCYBj9UaFJ4bqCTXiO2Kt6TpczvAaZW+9/blxiJwqEFXe78LbrIQvkDUmVdZbqBdPQ+QGQgc/2Ea4IbP/EEt1qSyXnFbzaaKSE2j4mAFON3kzNexb/SYkHZNJAuCittaW4wpGj7U+h9A=="
+ }
+ ],
+ "custom_field_list": [
+ {
+ "name": "喜欢的运动",
+ "user_chosen_values": [
+ "vvysDQeEaH3I+wRh14St0abIkvQyFgh/fbWYSs2bLtG9tj+bdJn4WSCPzLhShNHgujZzseiL6sYmT7E65mv/eFeTa7yslYfrX0hrhHazSM/+tfvN/C3OZwiBbcrF9LTIIdBVhGOqhCx0gK5YAVZc8dbW/yJqC5i79PDfVYJtpQe3A4v/GiDa2Q+Mv03taxgnEkzqlSPjkXiCYBj9UaFJ4bqCTXiO2Kt6TpczvAaZW+9/blxiJwqEFXe78LbrIQvkDUmVdZbqBdPQ+QGQgc/2Ea4IbP/EEt1qSyXnFbzaaKSE2j4mAFON3kzNexb/SYkHZNJAuCittaW4wpGj7U+h9A=="
+ ]
+ }
+ ]
+ },
+ "attach": "自定义数据说明"
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/BrandCardMember/UserCards/UpdateBrandPartnerCardMemberUserCardResponse.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/BrandCardMember/UserCards/UpdateBrandPartnerCardMemberUserCardResponse.json
new file mode 100644
index 00000000..6603de53
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/BrandCardMember/UserCards/UpdateBrandPartnerCardMemberUserCardResponse.json
@@ -0,0 +1,40 @@
+{
+ "user_card_code": "478515832665",
+ "card_id": "pbLatjvWOibDc5-TBnbUk1pD12o0",
+ "openid": "obLatjnx9gnqzS4myYGmLZ7LgLBA",
+ "card_color": "#FFFF00",
+ "card_picture_url": "https://wxpaylogo.qpic.cn/wxpaylogo/PiajxSqBRaEIPAeia7Imvtsn7sYGNcEj33YzVvJF88ECQ19LXId8ZL2Q/0",
+ "brand_id": "1001622624",
+ "card_type": "NORMAL",
+ "phone_number": "vvysDQeEaH3I+wRh14St0abIkvQyFgh/fbWYSs2bLtG9tj+bdJn4WSCPzLhShNHgujZzseiL6sYmT7E65mv/eFeTa7yslYfrX0hrhHazSM/+tfvN/C3OZwiBbcrF9LTIIdBVhGOqhCx0gK5YAVZc8dbW/yJqC5i79PDfVYJtpQe3A4v/GiDa2Q+Mv03taxgnEkzqlSPjkXiCYBj9UaFJ4bqCTXiO2Kt6TpczvAaZW+9/blxiJwqEFXe78LbrIQvkDUmVdZbqBdPQ+QGQgc/2Ea4IbP/EEt1qSyXnFbzaaKSE2j4mAFON3kzNexb/SYkHZNJAuCittaW4wpGj7U+h9A==",
+ "level": "钻石会员",
+ "valid_date_information": {
+ "type": "PERMANENT",
+ "available_begin_time": "2020-05-20T13:29:35.120+08:00",
+ "available_end_time": "2020-05-20T13:29:35.120+08:00",
+ "available_day_after_receive": 30
+ },
+ "pickup_time": "2020-05-20T13:29:35.120+08:00",
+ "user_information": {
+ "common_field_list": [
+ {
+ "name": "USER_FORM_FLAG_BIRTHDAY",
+ "value": "vvysDQeEaH3I+wRh14St0abIkvQyFgh/fbWYSs2bLtG9tj+bdJn4WSCPzLhShNHgujZzseiL6sYmT7E65mv/eFeTa7yslYfrX0hrhHazSM/+tfvN/C3OZwiBbcrF9LTIIdBVhGOqhCx0gK5YAVZc8dbW/yJqC5i79PDfVYJtpQe3A4v/GiDa2Q+Mv03taxgnEkzqlSPjkXiCYBj9UaFJ4bqCTXiO2Kt6TpczvAaZW+9/blxiJwqEFXe78LbrIQvkDUmVdZbqBdPQ+QGQgc/2Ea4IbP/EEt1qSyXnFbzaaKSE2j4mAFON3kzNexb/SYkHZNJAuCittaW4wpGj7U+h9A=="
+ }
+ ],
+ "custom_field_list": [
+ {
+ "name": "喜欢的运动",
+ "user_chosen_values": [
+ "vvysDQeEaH3I+wRh14St0abIkvQyFgh/fbWYSs2bLtG9tj+bdJn4WSCPzLhShNHgujZzseiL6sYmT7E65mv/eFeTa7yslYfrX0hrhHazSM/+tfvN/C3OZwiBbcrF9LTIIdBVhGOqhCx0gK5YAVZc8dbW/yJqC5i79PDfVYJtpQe3A4v/GiDa2Q+Mv03taxgnEkzqlSPjkXiCYBj9UaFJ4bqCTXiO2Kt6TpczvAaZW+9/blxiJwqEFXe78LbrIQvkDUmVdZbqBdPQ+QGQgc/2Ea4IbP/EEt1qSyXnFbzaaKSE2j4mAFON3kzNexb/SYkHZNJAuCittaW4wpGj7U+h9A=="
+ ]
+ }
+ ]
+ },
+ "attach": "自定义数据说明",
+ "user_card_state": "EFFECTIVE",
+ "invalid_reason": "传入的自定义作废原因",
+ "invalid_time": "2020-05-20T13:29:35.120+08:00",
+ "create_time": "2020-05-20T13:29:35.120+08:00",
+ "modify_time": "2020-05-20T13:29:35.120+08:00"
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/BrandCardMember/UserFeeds/CreateBrandPartnerCardMemberUserFeedRequest.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/BrandCardMember/UserFeeds/CreateBrandPartnerCardMemberUserFeedRequest.json
new file mode 100644
index 00000000..c26eb96b
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/BrandCardMember/UserFeeds/CreateBrandPartnerCardMemberUserFeedRequest.json
@@ -0,0 +1,8 @@
+{
+ "brand_id": "1004",
+ "card_id": "pbLatjvWOibDc5-TBnbUk1pD12o0",
+ "user_card_code": "478515832665",
+ "openid": "obLatjnx9gnqzS4myYGmLZ7LgLBA",
+ "out_request_no": "100002322019090134234sfdf",
+ "cell": "15_1200_1"
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/BrandCardMember/UserFeeds/CreateBrandPartnerCardMemberUserFeedResponse.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/BrandCardMember/UserFeeds/CreateBrandPartnerCardMemberUserFeedResponse.json
new file mode 100644
index 00000000..92582957
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/BrandCardMember/UserFeeds/CreateBrandPartnerCardMemberUserFeedResponse.json
@@ -0,0 +1,7 @@
+{
+ "brand_id": "1004",
+ "card_id": "pbLatjvWOibDc5-TBnbUk1pD12o0",
+ "user_card_code": "478515832665",
+ "out_request_no": "100002322019090134234sfdf",
+ "cell": "15_1200_1"
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/BrandCardMember/UserPoints/ConfirmBrandPartnerCardMemberUserPointExchangeCouponRequest.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/BrandCardMember/UserPoints/ConfirmBrandPartnerCardMemberUserPointExchangeCouponRequest.json
new file mode 100644
index 00000000..a4580eae
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/BrandCardMember/UserPoints/ConfirmBrandPartnerCardMemberUserPointExchangeCouponRequest.json
@@ -0,0 +1,11 @@
+{
+ "record_id": "pbLatjvWOibDc5-TBnbUk1pD12o0",
+ "exchange_coupon_template_id": "0Flpo7FqTQ",
+ "brand_id": "1004",
+ "card_id": "pbLatjvWOibDc5-TBnbUk1pD12o0",
+ "openid": "obLatjnx9gnqzS4myYGmLZ7LgLBA",
+ "user_card_code": "478515832665",
+ "state": "POINT_EXCHANGE_COUPON_SUCCESS",
+ "coupon_code": "123446565767",
+ "fail_reason": "积分不足"
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/BrandCardMember/UserPoints/ConfirmBrandPartnerCardMemberUserPointExchangeCouponResponse.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/BrandCardMember/UserPoints/ConfirmBrandPartnerCardMemberUserPointExchangeCouponResponse.json
new file mode 100644
index 00000000..a4580eae
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/BrandCardMember/UserPoints/ConfirmBrandPartnerCardMemberUserPointExchangeCouponResponse.json
@@ -0,0 +1,11 @@
+{
+ "record_id": "pbLatjvWOibDc5-TBnbUk1pD12o0",
+ "exchange_coupon_template_id": "0Flpo7FqTQ",
+ "brand_id": "1004",
+ "card_id": "pbLatjvWOibDc5-TBnbUk1pD12o0",
+ "openid": "obLatjnx9gnqzS4myYGmLZ7LgLBA",
+ "user_card_code": "478515832665",
+ "state": "POINT_EXCHANGE_COUPON_SUCCESS",
+ "coupon_code": "123446565767",
+ "fail_reason": "积分不足"
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/BrandCardMember/UserPoints/SyncBrandPartnerCardMemberUserPointRequest.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/BrandCardMember/UserPoints/SyncBrandPartnerCardMemberUserPointRequest.json
new file mode 100644
index 00000000..6f946927
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/BrandCardMember/UserPoints/SyncBrandPartnerCardMemberUserPointRequest.json
@@ -0,0 +1,8 @@
+{
+ "out_request_no": "100002322019090134234sfdf",
+ "brand_id": "1004",
+ "card_id": "pbLatjvWOibDc5-TBnbUk1pD12o0",
+ "openid": "obLatjnx9gnqzS4myYGmLZ7LgLBA",
+ "user_card_code": "478515832665",
+ "point_balance": 1000
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/BrandCardMember/UserPoints/SyncBrandPartnerCardMemberUserPointResponse.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/BrandCardMember/UserPoints/SyncBrandPartnerCardMemberUserPointResponse.json
new file mode 100644
index 00000000..6f946927
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/BrandCardMember/UserPoints/SyncBrandPartnerCardMemberUserPointResponse.json
@@ -0,0 +1,8 @@
+{
+ "out_request_no": "100002322019090134234sfdf",
+ "brand_id": "1004",
+ "card_id": "pbLatjvWOibDc5-TBnbUk1pD12o0",
+ "openid": "obLatjnx9gnqzS4myYGmLZ7LgLBA",
+ "user_card_code": "478515832665",
+ "point_balance": 1000
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/TestCase_RequestEncryptionTests.cs b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/TestCase_RequestEncryptionTests.cs
index 3f4aa867..c6033040 100644
--- a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/TestCase_RequestEncryptionTests.cs
+++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/TestCase_RequestEncryptionTests.cs
@@ -287,6 +287,219 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests
}
}
+ [Fact(DisplayName = "测试用例:加密请求中的敏感数据([PATCH] /brand/partner/card-member/user-cards/{user_card_code})")]
+ public async Task TestEncryptRequestSensitiveProperty_UpdateBrandPartnerCardMemberUserCardRequest()
+ {
+ static Models.UpdateBrandPartnerCardMemberUserCardRequest GenerateMockRequestModel()
+ {
+ return new Models.UpdateBrandPartnerCardMemberUserCardRequest()
+ {
+ MobileNumber = MOCK_PLAIN_STR,
+ UserInfo = new Models.UpdateBrandPartnerCardMemberUserCardRequest.Types.UserInfo()
+ {
+ CommonFieldList = new List()
+ {
+ new Models.UpdateBrandPartnerCardMemberUserCardRequest.Types.UserInfo.Types.CommonField()
+ {
+ Value = MOCK_PLAIN_STR
+ }
+ },
+ CustomFieldList = new List()
+ {
+ new Models.UpdateBrandPartnerCardMemberUserCardRequest.Types.UserInfo.Types.CustomField()
+ {
+ Values = new List() { MOCK_PLAIN_STR }
+ }
+ }
+ }
+ };
+ }
+
+ static void AssertMockRequestModel(Models.UpdateBrandPartnerCardMemberUserCardRequest request, Func decryptor)
+ {
+ Assert.NotEqual(MOCK_PLAIN_STR, request.MobileNumber!);
+ Assert.Equal(MOCK_PLAIN_STR, decryptor.Invoke(request.UserInfo!.CommonFieldList![0].Value!));
+ Assert.Equal(MOCK_PLAIN_STR, decryptor.Invoke(request.UserInfo!.CustomFieldList![0].Values![0]));
+ Assert.Equal(MOCK_CERT_SN, request.WechatpaySerialNumber!, ignoreCase: true);
+ }
+
+ if (!string.IsNullOrEmpty(TestConfigs.WechatMerchantRSACertificatePrivateKey))
+ {
+ using (var client = CreateMockClientUseRSA(autoEncrypt: false))
+ {
+ var request = GenerateMockRequestModel();
+ client.EncryptRequestSensitiveProperty(request);
+ AssertMockRequestModel(request, (cipher) => Utilities.RSAUtility.DecryptWithECB(RSA_PEM_PRIVATE_KEY, (EncodedString)cipher)!);
+ }
+
+ using (var client = CreateMockClientUseRSA(autoEncrypt: true))
+ {
+ var request = GenerateMockRequestModel();
+ await client.ExecuteUpdateBrandPartnerCardMemberUserCardAsync(request);
+ AssertMockRequestModel(request, (cipher) => Utilities.RSAUtility.DecryptWithECB(RSA_PEM_PRIVATE_KEY, (EncodedString)cipher)!);
+ }
+ }
+
+ if (!string.IsNullOrEmpty(TestConfigs.WechatMerchantSM2CertificatePrivateKey))
+ {
+ using (var client = CreateMockClientUseSM2(autoEncrypt: false))
+ {
+ var request = GenerateMockRequestModel();
+ client.EncryptRequestSensitiveProperty(request);
+ AssertMockRequestModel(request, (cipher) => Utilities.SM2Utility.Decrypt(SM2_PEM_PRIVATE_KEY, (EncodedString)cipher)!);
+ }
+
+ using (var client = CreateMockClientUseSM2(autoEncrypt: true))
+ {
+ var request = GenerateMockRequestModel();
+ await client.ExecuteUpdateBrandPartnerCardMemberUserCardAsync(request);
+ AssertMockRequestModel(request, (cipher) => Utilities.SM2Utility.Decrypt(SM2_PEM_PRIVATE_KEY, (EncodedString)cipher)!);
+ }
+ }
+ }
+
+ [Fact(DisplayName = "测试用例:加密请求中的敏感数据([POST] /brand/partner/card-member/user-cards/{user_card_code}/confirm)")]
+ public async Task TestEncryptRequestSensitiveProperty_ConfirmBrandPartnerCardMemberUserCardRequest()
+ {
+ static Models.ConfirmBrandPartnerCardMemberUserCardRequest GenerateMockRequestModel()
+ {
+ return new Models.ConfirmBrandPartnerCardMemberUserCardRequest()
+ {
+ MobileNumber = MOCK_PLAIN_STR,
+ UserInfo = new Models.ConfirmBrandPartnerCardMemberUserCardRequest.Types.UserInfo()
+ {
+ CommonFieldList = new List()
+ {
+ new Models.ConfirmBrandPartnerCardMemberUserCardRequest.Types.UserInfo.Types.CommonField()
+ {
+ Value = MOCK_PLAIN_STR
+ }
+ },
+ CustomFieldList = new List()
+ {
+ new Models.ConfirmBrandPartnerCardMemberUserCardRequest.Types.UserInfo.Types.CustomField()
+ {
+ Values = new List() { MOCK_PLAIN_STR }
+ }
+ }
+ }
+ };
+ }
+
+ static void AssertMockRequestModel(Models.ConfirmBrandPartnerCardMemberUserCardRequest request, Func decryptor)
+ {
+ Assert.NotEqual(MOCK_PLAIN_STR, request.MobileNumber!);
+ Assert.Equal(MOCK_PLAIN_STR, decryptor.Invoke(request.UserInfo!.CommonFieldList![0].Value!));
+ Assert.Equal(MOCK_PLAIN_STR, decryptor.Invoke(request.UserInfo!.CustomFieldList![0].Values![0]));
+ Assert.Equal(MOCK_CERT_SN, request.WechatpaySerialNumber!, ignoreCase: true);
+ }
+
+ if (!string.IsNullOrEmpty(TestConfigs.WechatMerchantRSACertificatePrivateKey))
+ {
+ using (var client = CreateMockClientUseRSA(autoEncrypt: false))
+ {
+ var request = GenerateMockRequestModel();
+ client.EncryptRequestSensitiveProperty(request);
+ AssertMockRequestModel(request, (cipher) => Utilities.RSAUtility.DecryptWithECB(RSA_PEM_PRIVATE_KEY, (EncodedString)cipher)!);
+ }
+
+ using (var client = CreateMockClientUseRSA(autoEncrypt: true))
+ {
+ var request = GenerateMockRequestModel();
+ await client.ExecuteConfirmBrandPartnerCardMemberUserCardAsync(request);
+ AssertMockRequestModel(request, (cipher) => Utilities.RSAUtility.DecryptWithECB(RSA_PEM_PRIVATE_KEY, (EncodedString)cipher)!);
+ }
+ }
+
+ if (!string.IsNullOrEmpty(TestConfigs.WechatMerchantSM2CertificatePrivateKey))
+ {
+ using (var client = CreateMockClientUseSM2(autoEncrypt: false))
+ {
+ var request = GenerateMockRequestModel();
+ client.EncryptRequestSensitiveProperty(request);
+ AssertMockRequestModel(request, (cipher) => Utilities.SM2Utility.Decrypt(SM2_PEM_PRIVATE_KEY, (EncodedString)cipher)!);
+ }
+
+ using (var client = CreateMockClientUseSM2(autoEncrypt: true))
+ {
+ var request = GenerateMockRequestModel();
+ await client.ExecuteConfirmBrandPartnerCardMemberUserCardAsync(request);
+ AssertMockRequestModel(request, (cipher) => Utilities.SM2Utility.Decrypt(SM2_PEM_PRIVATE_KEY, (EncodedString)cipher)!);
+ }
+ }
+ }
+
+ [Fact(DisplayName = "测试用例:加密请求中的敏感数据([POST] /brand/partner/card-member/user-cards/import-by-openid)")]
+ public async Task TestEncryptRequestSensitiveProperty_ImportBrandPartnerCardMemberUserCardByOpenIdRequest()
+ {
+ static Models.ImportBrandPartnerCardMemberUserCardByOpenIdRequest GenerateMockRequestModel()
+ {
+ return new Models.ImportBrandPartnerCardMemberUserCardByOpenIdRequest()
+ {
+ MobileNumber = MOCK_PLAIN_STR,
+ UserInfo = new Models.ImportBrandPartnerCardMemberUserCardByOpenIdRequest.Types.UserInfo()
+ {
+ CommonFieldList = new List()
+ {
+ new Models.ImportBrandPartnerCardMemberUserCardByOpenIdRequest.Types.UserInfo.Types.CommonField()
+ {
+ Value = MOCK_PLAIN_STR
+ }
+ },
+ CustomFieldList = new List()
+ {
+ new Models.ImportBrandPartnerCardMemberUserCardByOpenIdRequest.Types.UserInfo.Types.CustomField()
+ {
+ Values = new List() { MOCK_PLAIN_STR }
+ }
+ }
+ }
+ };
+ }
+
+ static void AssertMockRequestModel(Models.ImportBrandPartnerCardMemberUserCardByOpenIdRequest request, Func decryptor)
+ {
+ Assert.NotEqual(MOCK_PLAIN_STR, request.MobileNumber!);
+ Assert.Equal(MOCK_PLAIN_STR, decryptor.Invoke(request.UserInfo!.CommonFieldList![0].Value!));
+ Assert.Equal(MOCK_PLAIN_STR, decryptor.Invoke(request.UserInfo!.CustomFieldList![0].Values![0]));
+ Assert.Equal(MOCK_CERT_SN, request.WechatpaySerialNumber!, ignoreCase: true);
+ }
+
+ if (!string.IsNullOrEmpty(TestConfigs.WechatMerchantRSACertificatePrivateKey))
+ {
+ using (var client = CreateMockClientUseRSA(autoEncrypt: false))
+ {
+ var request = GenerateMockRequestModel();
+ client.EncryptRequestSensitiveProperty(request);
+ AssertMockRequestModel(request, (cipher) => Utilities.RSAUtility.DecryptWithECB(RSA_PEM_PRIVATE_KEY, (EncodedString)cipher)!);
+ }
+
+ using (var client = CreateMockClientUseRSA(autoEncrypt: true))
+ {
+ var request = GenerateMockRequestModel();
+ await client.ExecuteImportBrandPartnerCardMemberUserCardByOpenIdAsync(request);
+ AssertMockRequestModel(request, (cipher) => Utilities.RSAUtility.DecryptWithECB(RSA_PEM_PRIVATE_KEY, (EncodedString)cipher)!);
+ }
+ }
+
+ if (!string.IsNullOrEmpty(TestConfigs.WechatMerchantSM2CertificatePrivateKey))
+ {
+ using (var client = CreateMockClientUseSM2(autoEncrypt: false))
+ {
+ var request = GenerateMockRequestModel();
+ client.EncryptRequestSensitiveProperty(request);
+ AssertMockRequestModel(request, (cipher) => Utilities.SM2Utility.Decrypt(SM2_PEM_PRIVATE_KEY, (EncodedString)cipher)!);
+ }
+
+ using (var client = CreateMockClientUseSM2(autoEncrypt: true))
+ {
+ var request = GenerateMockRequestModel();
+ await client.ExecuteImportBrandPartnerCardMemberUserCardByOpenIdAsync(request);
+ AssertMockRequestModel(request, (cipher) => Utilities.SM2Utility.Decrypt(SM2_PEM_PRIVATE_KEY, (EncodedString)cipher)!);
+ }
+ }
+ }
+
[Fact(DisplayName = "测试用例:加密请求中的敏感数据([POST] /brand/profitsharing/orders)")]
public async Task TestEncryptRequestSensitiveProperty_CreateBrandProfitSharingOrderRequest()
{
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/TestCase_ResponseDecryptionTests.cs b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/TestCase_ResponseDecryptionTests.cs
index 51870b6c..e318b84a 100644
--- a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/TestCase_ResponseDecryptionTests.cs
+++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/TestCase_ResponseDecryptionTests.cs
@@ -87,6 +87,172 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests
}
}
+ [Fact(DisplayName = "测试用例:解密响应中的敏感数据([GET] /brand/partner/card-member/user-cards)")]
+ public async Task TestDecryptResponseSensitiveProperty_QueryBrandPartnerCardMemberUserCardsResponse()
+ {
+ static Models.QueryBrandPartnerCardMemberUserCardsResponse GenerateMockResponseModel(Func encryptor)
+ {
+ return SetMockResponseRawStatusAsOk(new Models.QueryBrandPartnerCardMemberUserCardsResponse()
+ {
+ UserCardList = new Models.QueryBrandPartnerCardMemberUserCardsResponse.Types.UserCard[]
+ {
+ new Models.QueryBrandPartnerCardMemberUserCardsResponse.Types.UserCard()
+ {
+ MobileNumber = encryptor.Invoke(MOCK_PLAIN_STR),
+ UserInfo = new Models.QueryBrandPartnerCardMemberUserCardsResponse.Types.UserCard.Types.UserInfo()
+ {
+ CommonFieldList = new Models.QueryBrandPartnerCardMemberUserCardsResponse.Types.UserCard.Types.UserInfo.Types.CommonField[]
+ {
+ new Models.QueryBrandPartnerCardMemberUserCardsResponse.Types.UserCard.Types.UserInfo.Types.CommonField()
+ {
+ Value = encryptor.Invoke(MOCK_PLAIN_STR)
+ }
+ },
+ CustomFieldList = new Models.QueryBrandPartnerCardMemberUserCardsResponse.Types.UserCard.Types.UserInfo.Types.CustomField[]
+ {
+ new Models.QueryBrandPartnerCardMemberUserCardsResponse.Types.UserCard.Types.UserInfo.Types.CustomField()
+ {
+ Values = new string[] { encryptor.Invoke(MOCK_PLAIN_STR) }
+ }
+ }
+ }
+ }
+ }
+ });
+ }
+
+ static void AssertMockResponseModel(Models.QueryBrandPartnerCardMemberUserCardsResponse response)
+ {
+ Assert.Equal(MOCK_PLAIN_STR, response.UserCardList[0].MobileNumber);
+ Assert.Equal(MOCK_PLAIN_STR, response.UserCardList[0].UserInfo!.CommonFieldList![0].Value);
+ Assert.Equal(MOCK_PLAIN_STR, response.UserCardList[0].UserInfo!.CustomFieldList![0].Values![0]);
+ }
+
+ if (!string.IsNullOrEmpty(TestConfigs.WechatMerchantRSACertificatePrivateKey))
+ {
+ using (var client = CreateMockClientUseRSA(autoDecrypt: false))
+ {
+ var response = GenerateMockResponseModel((plain) => Utilities.RSAUtility.EncryptWithECBByCertificate(RSA_PEM_CERTIFICATE, plain)!);
+ client.DecryptResponseSensitiveProperty(response);
+ AssertMockResponseModel(response);
+ }
+
+ using (var client = CreateMockClientUseRSA(
+ autoDecrypt: true,
+ mockResponseContent: new SystemTextJsonSerializer().Serialize(
+ GenerateMockResponseModel((plain) => Utilities.RSAUtility.EncryptWithECBByCertificate(RSA_PEM_CERTIFICATE, plain)!)
+ )
+ ))
+ {
+ var request = new Models.QueryBrandPartnerCardMemberUserCardsRequest();
+ var response = await client.ExecuteQueryBrandPartnerCardMemberUserCardsAsync(request);
+ AssertMockResponseModel(response);
+ }
+ }
+
+ if (!string.IsNullOrEmpty(TestConfigs.WechatMerchantSM2CertificatePrivateKey))
+ {
+ using (var client = CreateMockClientUseSM2(autoDecrypt: false))
+ {
+ var response = GenerateMockResponseModel((plain) => Utilities.SM2Utility.EncryptByCertificate(SM2_PEM_CERTIFICATE, plain)!);
+ client.DecryptResponseSensitiveProperty(response);
+ AssertMockResponseModel(response);
+ }
+
+ using (var client = CreateMockClientUseSM2(
+ autoDecrypt: true,
+ mockResponseContent: new SystemTextJsonSerializer().Serialize(
+ GenerateMockResponseModel((plain) => Utilities.SM2Utility.EncryptByCertificate(SM2_PEM_CERTIFICATE, plain)!)
+ )
+ ))
+ {
+ var request = new Models.QueryBrandPartnerCardMemberUserCardsRequest();
+ var response = await client.ExecuteQueryBrandPartnerCardMemberUserCardsAsync(request);
+ AssertMockResponseModel(response);
+ }
+ }
+ }
+
+ [Fact(DisplayName = "测试用例:解密响应中的敏感数据([GET] /brand/partner/card-member/user-cards/{user_card_code})")]
+ public async Task TestDecryptResponseSensitiveProperty_GetBrandPartnerCardMemberUserCardByUserCardCodeResponse()
+ {
+ static Models.GetBrandPartnerCardMemberUserCardByUserCardCodeResponse GenerateMockResponseModel(Func encryptor)
+ {
+ return SetMockResponseRawStatusAsOk(new Models.GetBrandPartnerCardMemberUserCardByUserCardCodeResponse()
+ {
+ MobileNumber = encryptor.Invoke(MOCK_PLAIN_STR),
+ UserInfo = new Models.GetBrandPartnerCardMemberUserCardByUserCardCodeResponse.Types.UserInfo()
+ {
+ CommonFieldList = new Models.GetBrandPartnerCardMemberUserCardByUserCardCodeResponse.Types.UserInfo.Types.CommonField[]
+ {
+ new Models.GetBrandPartnerCardMemberUserCardByUserCardCodeResponse.Types.UserInfo.Types.CommonField()
+ {
+ Value = encryptor.Invoke(MOCK_PLAIN_STR)
+ }
+ },
+ CustomFieldList = new Models.GetBrandPartnerCardMemberUserCardByUserCardCodeResponse.Types.UserInfo.Types.CustomField[]
+ {
+ new Models.GetBrandPartnerCardMemberUserCardByUserCardCodeResponse.Types.UserInfo.Types.CustomField()
+ {
+ Values = new string[] { encryptor.Invoke(MOCK_PLAIN_STR) }
+ }
+ }
+ }
+ });
+ }
+
+ static void AssertMockResponseModel(Models.GetBrandPartnerCardMemberUserCardByUserCardCodeResponse response)
+ {
+ Assert.Equal(MOCK_PLAIN_STR, response.MobileNumber);
+ Assert.Equal(MOCK_PLAIN_STR, response.UserInfo!.CommonFieldList![0].Value);
+ Assert.Equal(MOCK_PLAIN_STR, response.UserInfo!.CustomFieldList![0].Values![0]);
+ }
+
+ if (!string.IsNullOrEmpty(TestConfigs.WechatMerchantRSACertificatePrivateKey))
+ {
+ using (var client = CreateMockClientUseRSA(autoDecrypt: false))
+ {
+ var response = GenerateMockResponseModel((plain) => Utilities.RSAUtility.EncryptWithECBByCertificate(RSA_PEM_CERTIFICATE, plain)!);
+ client.DecryptResponseSensitiveProperty(response);
+ AssertMockResponseModel(response);
+ }
+
+ using (var client = CreateMockClientUseRSA(
+ autoDecrypt: true,
+ mockResponseContent: new SystemTextJsonSerializer().Serialize(
+ GenerateMockResponseModel((plain) => Utilities.RSAUtility.EncryptWithECBByCertificate(RSA_PEM_CERTIFICATE, plain)!)
+ )
+ ))
+ {
+ var request = new Models.GetBrandPartnerCardMemberUserCardByUserCardCodeRequest();
+ var response = await client.ExecuteGetBrandPartnerCardMemberUserCardByUserCardCodeAsync(request);
+ AssertMockResponseModel(response);
+ }
+ }
+
+ if (!string.IsNullOrEmpty(TestConfigs.WechatMerchantSM2CertificatePrivateKey))
+ {
+ using (var client = CreateMockClientUseSM2(autoDecrypt: false))
+ {
+ var response = GenerateMockResponseModel((plain) => Utilities.SM2Utility.EncryptByCertificate(SM2_PEM_CERTIFICATE, plain)!);
+ client.DecryptResponseSensitiveProperty(response);
+ AssertMockResponseModel(response);
+ }
+
+ using (var client = CreateMockClientUseSM2(
+ autoDecrypt: true,
+ mockResponseContent: new SystemTextJsonSerializer().Serialize(
+ GenerateMockResponseModel((plain) => Utilities.SM2Utility.EncryptByCertificate(SM2_PEM_CERTIFICATE, plain)!)
+ )
+ ))
+ {
+ var request = new Models.GetBrandPartnerCardMemberUserCardByUserCardCodeRequest();
+ var response = await client.ExecuteGetBrandPartnerCardMemberUserCardByUserCardCodeAsync(request);
+ AssertMockResponseModel(response);
+ }
+ }
+ }
+
[Fact(DisplayName = "测试用例:解密响应中的敏感数据([GET] /certificates)")]
public async Task TestDecryptResponseSensitiveProperty_QueryCertificatesResponse()
{