feat(tenpayv3): 新增会员卡事件通知相关接口

This commit is contained in:
Fu Diwei 2021-12-09 01:16:00 +08:00
parent b50c216fab
commit 6860c0d0f2
11 changed files with 185 additions and 0 deletions

View File

@ -0,0 +1,69 @@
using System;
namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Events
{
/// <summary>
/// <para>表示 MEMBERCARD.ACTIVATE_CARD 通知的数据。</para>
/// <para>表示 MEMBERCARD.USERCARD_MANAGE 通知的数据。</para>
/// </summary>
public class MarketingMemberCardResource : WechatTenpayEvent.Types.IDecryptedResource
{
/// <summary>
/// 获取或设置事件类型。
/// </summary>
[Newtonsoft.Json.JsonProperty("event_type")]
[System.Text.Json.Serialization.JsonPropertyName("event_type")]
public string EventType { get; set; } = default!;
/// <summary>
/// 获取或设置会员卡 ID。
/// </summary>
[Newtonsoft.Json.JsonProperty("card_id")]
[System.Text.Json.Serialization.JsonPropertyName("card_id")]
public string CardId { get; set; } = default!;
/// <summary>
/// 获取或设置会员卡 Code。
/// </summary>
[Newtonsoft.Json.JsonProperty("code")]
[System.Text.Json.Serialization.JsonPropertyName("code")]
public string? Code { get; set; }
/// <summary>
/// 获取或设置用户唯一标识。
/// </summary>
[Newtonsoft.Json.JsonProperty("openid")]
[System.Text.Json.Serialization.JsonPropertyName("openid")]
public string OpenId { get; set; } = default!;
/// <summary>
/// 获取或设置用户统一标识。
/// </summary>
[Newtonsoft.Json.JsonProperty("unionid")]
[System.Text.Json.Serialization.JsonPropertyName("unionid")]
public string? UnionId { get; set; }
/// <summary>
/// 获取或设置场景值。
/// </summary>
[Newtonsoft.Json.JsonProperty("activate_scene")]
[System.Text.Json.Serialization.JsonPropertyName("activate_scene")]
public string? SceneString { get; set; }
/// <summary>
/// 获取或设置自定义场景值。
/// </summary>
[Newtonsoft.Json.JsonProperty("outer_str")]
[System.Text.Json.Serialization.JsonPropertyName("outer_str")]
public string? OuterString { get; set; }
/// <summary>
/// 获取或设置事件时间。
/// </summary>
[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; }
}
}

View File

@ -281,5 +281,45 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3
return await client.SendRequestWithJsonAsync<Models.UpdateMarketingMemberCardOpenCardCodeResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
}
#endregion
#region Callback
/// <summary>
/// <para>异步调用 [POST] /marketing/membercard-open/callback 接口。</para>
/// <para>REF: https://pay.weixin.qq.com/wiki/doc/apiv3/wxpay/marketing/membercard_open/chapter6_1.shtml </para>
/// </summary>
/// <param name="client"></param>
/// <param name="request"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public static async Task<Models.UpdateMarketingMemberCardOpenCallbackResponse> 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<Models.UpdateMarketingMemberCardOpenCallbackResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
}
/// <summary>
/// <para>异步调用 [GET] /marketing/membercard-open/callback 接口。</para>
/// <para>REF: https://pay.weixin.qq.com/wiki/doc/apiv3/wxpay/marketing/membercard_open/chapter6_2.shtml </para>
/// </summary>
/// <param name="client"></param>
/// <param name="request"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public static async Task<Models.GetMarketingMemberCardOpenCallbackResponse> 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<Models.GetMarketingMemberCardOpenCallbackResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
}
#endregion
}
}

View File

@ -0,0 +1,9 @@
namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
{
/// <summary>
/// <para>表示 [GET] /marketing/membercard-open/callback 接口的请求。</para>
/// </summary>
public class GetMarketingMemberCardOpenCallbackRequest : WechatTenpayRequest
{
}
}

View File

@ -0,0 +1,22 @@
namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
{
/// <summary>
/// <para>表示 [GET] /marketing/membercard-open/callback 接口的响应。</para>
/// </summary>
public class GetMarketingMemberCardOpenCallbackResponse : WechatTenpayResponse
{
/// <summary>
/// 获取或设置微信商户号。
/// </summary>
[Newtonsoft.Json.JsonProperty("mchid")]
[System.Text.Json.Serialization.JsonPropertyName("mchid")]
public string MerchantId { get; set; } = default!;
/// <summary>
/// 获取或设置通知地址。
/// </summary>
[Newtonsoft.Json.JsonProperty("notify_url")]
[System.Text.Json.Serialization.JsonPropertyName("notify_url")]
public string NotifyUrl { get; set; } = default!;
}
}

View File

@ -0,0 +1,15 @@
namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
{
/// <summary>
/// <para>表示 [POST] /marketing/membercard-open/callback 接口的请求。</para>
/// </summary>
public class UpdateMarketingMemberCardOpenCallbackRequest : WechatTenpayRequest
{
/// <summary>
/// 获取或设置通知地址。
/// </summary>
[Newtonsoft.Json.JsonProperty("notify_url")]
[System.Text.Json.Serialization.JsonPropertyName("notify_url")]
public string NotifyUrl { get; set; } = string.Empty;
}
}

View File

@ -0,0 +1,9 @@
namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
{
/// <summary>
/// <para>表示 [POST] /marketing/membercard-open/callback 接口的响应。</para>
/// </summary>
public class UpdateMarketingMemberCardOpenCallbackResponse : GetMarketingMemberCardOpenCallbackResponse
{
}
}

View File

@ -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"
}

View File

@ -0,0 +1,4 @@
{
"notify_url": "https://shangjia.com",
"mchid": "99999105"
}

View File

@ -0,0 +1,4 @@
{
"notify_url": "https://shangjia.com",
"mchid": "99999105"
}