diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Events/MarketingMemberCardOpen/MarketingMemberCardResource.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Events/MarketingMemberCardOpen/MarketingMemberCardResource.cs new file mode 100644 index 00000000..23c26176 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Events/MarketingMemberCardOpen/MarketingMemberCardResource.cs @@ -0,0 +1,69 @@ +using System; + +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Events +{ + /// + /// 表示 MEMBERCARD.ACTIVATE_CARD 通知的数据。 + /// 表示 MEMBERCARD.USERCARD_MANAGE 通知的数据。 + /// + public class MarketingMemberCardResource : WechatTenpayEvent.Types.IDecryptedResource + { + /// + /// 获取或设置事件类型。 + /// + [Newtonsoft.Json.JsonProperty("event_type")] + [System.Text.Json.Serialization.JsonPropertyName("event_type")] + public string EventType { get; set; } = default!; + + /// + /// 获取或设置会员卡 ID。 + /// + [Newtonsoft.Json.JsonProperty("card_id")] + [System.Text.Json.Serialization.JsonPropertyName("card_id")] + public string CardId { get; set; } = default!; + + /// + /// 获取或设置会员卡 Code。 + /// + [Newtonsoft.Json.JsonProperty("code")] + [System.Text.Json.Serialization.JsonPropertyName("code")] + public string? Code { get; set; } + + /// + /// 获取或设置用户唯一标识。 + /// + [Newtonsoft.Json.JsonProperty("openid")] + [System.Text.Json.Serialization.JsonPropertyName("openid")] + public string OpenId { get; set; } = default!; + + /// + /// 获取或设置用户统一标识。 + /// + [Newtonsoft.Json.JsonProperty("unionid")] + [System.Text.Json.Serialization.JsonPropertyName("unionid")] + public string? UnionId { get; set; } + + /// + /// 获取或设置场景值。 + /// + [Newtonsoft.Json.JsonProperty("activate_scene")] + [System.Text.Json.Serialization.JsonPropertyName("activate_scene")] + public string? SceneString { get; set; } + + /// + /// 获取或设置自定义场景值。 + /// + [Newtonsoft.Json.JsonProperty("outer_str")] + [System.Text.Json.Serialization.JsonPropertyName("outer_str")] + public string? OuterString { get; set; } + + /// + /// 获取或设置事件时间。 + /// + [Newtonsoft.Json.JsonProperty("event_time")] + [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.RFC3339DateTimeOffsetConverter))] + [System.Text.Json.Serialization.JsonPropertyName("event_time")] + [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.RFC3339DateTimeOffsetConverter))] + public DateTimeOffset EventTime { get; set; } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecuteMarketingMemberCardOpenExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecuteMarketingMemberCardOpenExtensions.cs index 4f024831..0f404f02 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecuteMarketingMemberCardOpenExtensions.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecuteMarketingMemberCardOpenExtensions.cs @@ -281,5 +281,45 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3 return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); } #endregion + + #region Callback + /// + /// 异步调用 [POST] /marketing/membercard-open/callback 接口。 + /// REF: https://pay.weixin.qq.com/wiki/doc/apiv3/wxpay/marketing/membercard_open/chapter6_1.shtml + /// + /// + /// + /// + /// + public static async Task ExecuteUpdateMarketingMemberCardOpenCallbackAsync(this WechatTenpayClient client, Models.UpdateMarketingMemberCardOpenCallbackRequest request, CancellationToken cancellationToken = default) + { + if (client is null) throw new ArgumentNullException(nameof(client)); + if (request is null) throw new ArgumentNullException(nameof(request)); + + IFlurlRequest flurlReq = client + .CreateRequest(request, HttpMethod.Post, "marketing", "membercard-open", "callback"); + + return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } + + /// + /// 异步调用 [GET] /marketing/membercard-open/callback 接口。 + /// REF: https://pay.weixin.qq.com/wiki/doc/apiv3/wxpay/marketing/membercard_open/chapter6_2.shtml + /// + /// + /// + /// + /// + public static async Task ExecuteGetMarketingMemberCardOpenCallbackAsync(this WechatTenpayClient client, Models.GetMarketingMemberCardOpenCallbackRequest request, CancellationToken cancellationToken = default) + { + if (client is null) throw new ArgumentNullException(nameof(client)); + if (request is null) throw new ArgumentNullException(nameof(request)); + + IFlurlRequest flurlReq = client + .CreateRequest(request, HttpMethod.Get, "marketing", "membercard-open", "callback"); + + return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } + #endregion } } diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/MarketingMemberCardOpen/Callback/GetMarketingMemberCardOpenCallbackRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/MarketingMemberCardOpen/Callback/GetMarketingMemberCardOpenCallbackRequest.cs new file mode 100644 index 00000000..f8cd93cb --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/MarketingMemberCardOpen/Callback/GetMarketingMemberCardOpenCallbackRequest.cs @@ -0,0 +1,9 @@ +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models +{ + /// + /// 表示 [GET] /marketing/membercard-open/callback 接口的请求。 + /// + public class GetMarketingMemberCardOpenCallbackRequest : WechatTenpayRequest + { + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/MarketingMemberCardOpen/Callback/GetMarketingMemberCardOpenCallbackResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/MarketingMemberCardOpen/Callback/GetMarketingMemberCardOpenCallbackResponse.cs new file mode 100644 index 00000000..8d21069c --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/MarketingMemberCardOpen/Callback/GetMarketingMemberCardOpenCallbackResponse.cs @@ -0,0 +1,22 @@ +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models +{ + /// + /// 表示 [GET] /marketing/membercard-open/callback 接口的响应。 + /// + public class GetMarketingMemberCardOpenCallbackResponse : WechatTenpayResponse + { + /// + /// 获取或设置微信商户号。 + /// + [Newtonsoft.Json.JsonProperty("mchid")] + [System.Text.Json.Serialization.JsonPropertyName("mchid")] + public string MerchantId { get; set; } = default!; + + /// + /// 获取或设置通知地址。 + /// + [Newtonsoft.Json.JsonProperty("notify_url")] + [System.Text.Json.Serialization.JsonPropertyName("notify_url")] + public string NotifyUrl { get; set; } = default!; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/MarketingMemberCardOpen/Callback/UpdateMarketingMemberCardOpenCallbackRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/MarketingMemberCardOpen/Callback/UpdateMarketingMemberCardOpenCallbackRequest.cs new file mode 100644 index 00000000..cc288be7 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/MarketingMemberCardOpen/Callback/UpdateMarketingMemberCardOpenCallbackRequest.cs @@ -0,0 +1,15 @@ +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models +{ + /// + /// 表示 [POST] /marketing/membercard-open/callback 接口的请求。 + /// + public class UpdateMarketingMemberCardOpenCallbackRequest : WechatTenpayRequest + { + /// + /// 获取或设置通知地址。 + /// + [Newtonsoft.Json.JsonProperty("notify_url")] + [System.Text.Json.Serialization.JsonPropertyName("notify_url")] + public string NotifyUrl { get; set; } = string.Empty; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/MarketingMemberCardOpen/Callback/UpdateMarketingMemberCardOpenCallbackResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/MarketingMemberCardOpen/Callback/UpdateMarketingMemberCardOpenCallbackResponse.cs new file mode 100644 index 00000000..4900f4ae --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/MarketingMemberCardOpen/Callback/UpdateMarketingMemberCardOpenCallbackResponse.cs @@ -0,0 +1,9 @@ +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models +{ + /// + /// 表示 [POST] /marketing/membercard-open/callback 接口的响应。 + /// + public class UpdateMarketingMemberCardOpenCallbackResponse : GetMarketingMemberCardOpenCallbackResponse + { + } +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/EventSamples/MarketingMemberCardOpen/MarketingMemberCardResource.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/EventSamples/MarketingMemberCardOpen/MarketingMemberCardResource.json new file mode 100644 index 00000000..09b8e4ae --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/EventSamples/MarketingMemberCardOpen/MarketingMemberCardResource.json @@ -0,0 +1,9 @@ +{ + "event_type": "MEMBER_CARD_ACTIVATE", + "event_time": "2019-12-17T10:35:53+08:00", + "openid": "obLatjnx9gnqzS4myYGmLZ7LgLBA", + "unionid": "obLatjvNtj7wO79ewoQBVIUEArg0", + "card_id": "paCkC00igoi8VmVpDvapnUhkN99w", + "code": "289560490049", + "outer_str": "sz_store_001" +} \ No newline at end of file diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/MarketingMemberCardOpen/Callback/GetMarketingMemberCardOpenCallbackRequest.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/MarketingMemberCardOpen/Callback/GetMarketingMemberCardOpenCallbackRequest.json new file mode 100644 index 00000000..22fdca1b --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/MarketingMemberCardOpen/Callback/GetMarketingMemberCardOpenCallbackRequest.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/MarketingMemberCardOpen/Callback/GetMarketingMemberCardOpenCallbackResponse.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/MarketingMemberCardOpen/Callback/GetMarketingMemberCardOpenCallbackResponse.json new file mode 100644 index 00000000..aadae39d --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/MarketingMemberCardOpen/Callback/GetMarketingMemberCardOpenCallbackResponse.json @@ -0,0 +1,4 @@ +{ + "notify_url": "https://shangjia.com", + "mchid": "99999105" +} \ No newline at end of file diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/MarketingMemberCardOpen/Callback/UpdateMarketingMemberCardOpenCallbackRequest.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/MarketingMemberCardOpen/Callback/UpdateMarketingMemberCardOpenCallbackRequest.json new file mode 100644 index 00000000..c8d417fc --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/MarketingMemberCardOpen/Callback/UpdateMarketingMemberCardOpenCallbackRequest.json @@ -0,0 +1,3 @@ +{ + "notify_url": "https://shangjia.com" +} \ No newline at end of file diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/MarketingMemberCardOpen/Callback/UpdateMarketingMemberCardOpenCallbackResponse.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/MarketingMemberCardOpen/Callback/UpdateMarketingMemberCardOpenCallbackResponse.json new file mode 100644 index 00000000..aadae39d --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/MarketingMemberCardOpen/Callback/UpdateMarketingMemberCardOpenCallbackResponse.json @@ -0,0 +1,4 @@ +{ + "notify_url": "https://shangjia.com", + "mchid": "99999105" +} \ No newline at end of file