mirror of
https://gitee.com/fudiwei/DotNetCore.SKIT.FlurlHttpClient.Wechat.git
synced 2025-09-19 01:58:14 +08:00
feat(tenpayv3): 新增会员卡投放相关接口
This commit is contained in:
@@ -321,5 +321,104 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3
|
||||
return await client.SendRequestWithJsonAsync<Models.GetMarketingMemberCardOpenCallbackResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Activation
|
||||
/// <summary>
|
||||
/// <para>异步调用 [POST] /marketing/membercard-open/cards/{card_id}/qrcode 接口。</para>
|
||||
/// <para>REF: https://pay.weixin.qq.com/wiki/doc/apiv3/wxpay/marketing/membercard_open/chapter4_3.shtml </para>
|
||||
/// </summary>
|
||||
/// <param name="client"></param>
|
||||
/// <param name="request"></param>
|
||||
/// <param name="cancellationToken"></param>
|
||||
/// <returns></returns>
|
||||
public static async Task<Models.CreateMarketingMemberCardOpenCardQrcodeResponse> ExecuteCreateMarketingMemberCardOpenCardQrcodeAsync(this WechatTenpayClient client, Models.CreateMarketingMemberCardOpenCardQrcodeRequest request, CancellationToken cancellationToken = default)
|
||||
{
|
||||
if (client is null) throw new ArgumentNullException(nameof(client));
|
||||
if (request is null) throw new ArgumentNullException(nameof(request));
|
||||
|
||||
IFlurlRequest flurlReq = client
|
||||
.CreateRequest(request, HttpMethod.Post, "marketing", "membercard-open", "cards", request.CardId, "qrcode");
|
||||
|
||||
return await client.SendRequestWithJsonAsync<Models.CreateMarketingMemberCardOpenCardQrcodeResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// <para>异步调用 [POST] /marketing/membercard-open/cards/{card_id}/permission-tokens 接口。</para>
|
||||
/// <para>REF: https://pay.weixin.qq.com/wiki/doc/apiv3/wxpay/marketing/membercard_open/chapter4_7.shtml </para>
|
||||
/// </summary>
|
||||
/// <param name="client"></param>
|
||||
/// <param name="request"></param>
|
||||
/// <param name="cancellationToken"></param>
|
||||
/// <returns></returns>
|
||||
public static async Task<Models.CreateMarketingMemberCardOpenCardPermissionTokenResponse> ExecuteCreateMarketingMemberCardOpenCardPermissionTokenAsync(this WechatTenpayClient client, Models.CreateMarketingMemberCardOpenCardPermissionTokenRequest request, CancellationToken cancellationToken = default)
|
||||
{
|
||||
if (client is null) throw new ArgumentNullException(nameof(client));
|
||||
if (request is null) throw new ArgumentNullException(nameof(request));
|
||||
|
||||
IFlurlRequest flurlReq = client
|
||||
.CreateRequest(request, HttpMethod.Post, "marketing", "membercard-open", "cards", request.CardId, "permission-tokens");
|
||||
|
||||
return await client.SendRequestWithJsonAsync<Models.CreateMarketingMemberCardOpenCardPermissionTokenResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// <para>异步调用 [GET] /marketing/membercard-open/cards/{card_id}/decrypt-code 接口。</para>
|
||||
/// <para>REF: https://pay.weixin.qq.com/wiki/doc/apiv3/wxpay/marketing/membercard_open/chapter4_4.shtml </para>
|
||||
/// </summary>
|
||||
/// <param name="client"></param>
|
||||
/// <param name="request"></param>
|
||||
/// <param name="cancellationToken"></param>
|
||||
/// <returns></returns>
|
||||
public static async Task<Models.DecryptMarketingMemberCardOpenCardCodeResponse> ExecuteDecryptMarketingMemberCardOpenCardCodeAsync(this WechatTenpayClient client, Models.DecryptMarketingMemberCardOpenCardCodeRequest request, CancellationToken cancellationToken = default)
|
||||
{
|
||||
if (client is null) throw new ArgumentNullException(nameof(client));
|
||||
if (request is null) throw new ArgumentNullException(nameof(request));
|
||||
|
||||
IFlurlRequest flurlReq = client
|
||||
.CreateRequest(request, HttpMethod.Get, "marketing", "membercard-open", "cards", request.CardId, "decrypt-code")
|
||||
.SetQueryParam("card_id", request.CardId)
|
||||
.SetQueryParam("encrypt_code", request.EncryptedCode);
|
||||
|
||||
return await client.SendRequestWithJsonAsync<Models.DecryptMarketingMemberCardOpenCardCodeResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// <para>异步调用 [GET] /marketing/membercard-open/activate-informations/{activate_ticket} 接口。</para>
|
||||
/// <para>REF: https://pay.weixin.qq.com/wiki/doc/apiv3/wxpay/marketing/membercard_open/chapter4_5.shtml </para>
|
||||
/// </summary>
|
||||
/// <param name="client"></param>
|
||||
/// <param name="request"></param>
|
||||
/// <param name="cancellationToken"></param>
|
||||
/// <returns></returns>
|
||||
public static async Task<Models.GetMarketingMemberCardOpenActivateInformationResponse> ExecuteGetMarketingMemberCardOpenActivateInformationAsync(this WechatTenpayClient client, Models.GetMarketingMemberCardOpenActivateInformationRequest 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", "activate-informations", request.ActivateTicket);
|
||||
|
||||
return await client.SendRequestWithJsonAsync<Models.GetMarketingMemberCardOpenActivateInformationResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// <para>异步调用 [POST] /marketing/membercard-open/cards/{card_id}/codes/{code}/activate 接口。</para>
|
||||
/// <para>REF: https://pay.weixin.qq.com/wiki/doc/apiv3/wxpay/marketing/membercard_open/chapter3_10.shtml </para>
|
||||
/// </summary>
|
||||
/// <param name="client"></param>
|
||||
/// <param name="request"></param>
|
||||
/// <param name="cancellationToken"></param>
|
||||
/// <returns></returns>
|
||||
public static async Task<Models.ActivateMarketingMemberCardOpenCardCodeResponse> ExecuteActivateMarketingMemberCardOpenCardCodeAsync(this WechatTenpayClient client, Models.ActivateMarketingMemberCardOpenCardCodeRequest request, CancellationToken cancellationToken = default)
|
||||
{
|
||||
if (client is null) throw new ArgumentNullException(nameof(client));
|
||||
if (request is null) throw new ArgumentNullException(nameof(request));
|
||||
|
||||
IFlurlRequest flurlReq = client
|
||||
.CreateRequest(request, HttpMethod.Post, "marketing", "membercard-open", "cards", request.CardId, "codes", request.Code, "activate");
|
||||
|
||||
return await client.SendRequestWithJsonAsync<Models.ActivateMarketingMemberCardOpenCardCodeResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
|
@@ -0,0 +1,29 @@
|
||||
namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
|
||||
{
|
||||
/// <summary>
|
||||
/// <para>表示 [POST] /marketing/membercard-open/cards/{card_id}/codes/{code}/activate 接口的请求。</para>
|
||||
/// </summary>
|
||||
public class ActivateMarketingMemberCardOpenCardCodeRequest : WechatTenpayRequest
|
||||
{
|
||||
/// <summary>
|
||||
/// 获取或设置会员卡 ID。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonIgnore]
|
||||
[System.Text.Json.Serialization.JsonIgnore]
|
||||
public string CardId { get; set; } = string.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置会员卡 Code。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonIgnore]
|
||||
[System.Text.Json.Serialization.JsonIgnore]
|
||||
public string Code { get; set; } = string.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置会员编号。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("membership_number")]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("membership_number")]
|
||||
public string? MembershipNumber { get; set; }
|
||||
}
|
||||
}
|
@@ -0,0 +1,9 @@
|
||||
namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
|
||||
{
|
||||
/// <summary>
|
||||
/// <para>表示 [POST] /marketing/membercard-open/cards/{card_id}/codes/{code}/activate 接口的响应。</para>
|
||||
/// </summary>
|
||||
public class ActivateMarketingMemberCardOpenCardCodeResponse : WechatTenpayResponse
|
||||
{
|
||||
}
|
||||
}
|
@@ -0,0 +1,57 @@
|
||||
namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
|
||||
{
|
||||
/// <summary>
|
||||
/// <para>表示 [POST] /marketing/membercard-open/cards/{card_id}/permission-tokens 接口的请求。</para>
|
||||
/// </summary>
|
||||
public class CreateMarketingMemberCardOpenCardPermissionTokenRequest : WechatTenpayRequest
|
||||
{
|
||||
/// <summary>
|
||||
/// 获取或设置会员卡 ID。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonIgnore]
|
||||
[System.Text.Json.Serialization.JsonIgnore]
|
||||
public string CardId { get; set; } = string.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置激活类型。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("activate_type")]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("activate_type")]
|
||||
public string ActivateType { get; set; } = string.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置是否在用户在开卡完成后返回拉起开卡组件的商家页面。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("navigate_back_previous_page")]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("navigate_back_previous_page")]
|
||||
public bool? RequireNavigateBackPreviousPage { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置激活跳转 URL。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("activate_url")]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("activate_url")]
|
||||
public string? ActivateUrl { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置激活跳转小程序 AppId。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("activate_appid")]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("activate_appid")]
|
||||
public string? ActivateMiniProgramAppId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置激活跳转小程序页面路径。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("activate_path")]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("activate_path")]
|
||||
public string ActivateMiniProgramPath { get; set; } = string.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置自定义场景值。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("outer_str")]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("outer_str")]
|
||||
public string? OuterString { get; set; }
|
||||
}
|
||||
}
|
@@ -0,0 +1,15 @@
|
||||
namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
|
||||
{
|
||||
/// <summary>
|
||||
/// <para>表示 [POST] /marketing/membercard-open/cards/{card_id}/permission-tokens 接口的响应。</para>
|
||||
/// </summary>
|
||||
public class CreateMarketingMemberCardOpenCardPermissionTokenResponse : WechatTenpayResponse
|
||||
{
|
||||
/// <summary>
|
||||
/// 获取或设置预授权 Token。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("permission_token")]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("permission_token")]
|
||||
public string PermissionToken { get; set; } = default!;
|
||||
}
|
||||
}
|
@@ -0,0 +1,50 @@
|
||||
namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
|
||||
{
|
||||
/// <summary>
|
||||
/// <para>表示 [POST] /marketing/membercard-open/cards/{card_id}/qrcode 接口的请求。</para>
|
||||
/// </summary>
|
||||
public class CreateMarketingMemberCardOpenCardQrcodeRequest : WechatTenpayRequest
|
||||
{
|
||||
/// <summary>
|
||||
/// 获取或设置会员卡 ID。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonIgnore]
|
||||
[System.Text.Json.Serialization.JsonIgnore]
|
||||
public string CardId { get; set; } = string.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置激活类型。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("activate_type")]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("activate_type")]
|
||||
public string ActivateType { get; set; } = string.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置激活跳转 URL。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("activate_url")]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("activate_url")]
|
||||
public string? ActivateUrl { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置激活跳转小程序 AppId。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("activate_appid")]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("activate_appid")]
|
||||
public string? ActivateMiniProgramAppId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置激活跳转小程序页面路径。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("activate_path")]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("activate_path")]
|
||||
public string ActivateMiniProgramPath { get; set; } = string.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置自定义场景值。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("outer_str")]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("outer_str")]
|
||||
public string? OuterString { get; set; }
|
||||
}
|
||||
}
|
@@ -0,0 +1,15 @@
|
||||
namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
|
||||
{
|
||||
/// <summary>
|
||||
/// <para>表示 [POST] /marketing/membercard-open/cards/{card_id}/qrcode 接口的响应。</para>
|
||||
/// </summary>
|
||||
public class CreateMarketingMemberCardOpenCardQrcodeResponse : WechatTenpayResponse
|
||||
{
|
||||
/// <summary>
|
||||
/// 获取或设置二维码对应的 URL。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("url")]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("url")]
|
||||
public string QrcodeUrl { get; set; } = default!;
|
||||
}
|
||||
}
|
@@ -0,0 +1,22 @@
|
||||
namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
|
||||
{
|
||||
/// <summary>
|
||||
/// <para>表示 [GET] /marketing/membercard-open/cards/{card_id}/decrypt-code 接口的请求。</para>
|
||||
/// </summary>
|
||||
public class DecryptMarketingMemberCardOpenCardCodeRequest : WechatTenpayRequest
|
||||
{
|
||||
/// <summary>
|
||||
/// 获取或设置会员卡 ID。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonIgnore]
|
||||
[System.Text.Json.Serialization.JsonIgnore]
|
||||
public string CardId { get; set; } = string.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置加密会员 Code。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonIgnore]
|
||||
[System.Text.Json.Serialization.JsonIgnore]
|
||||
public string EncryptedCode { get; set; } = string.Empty;
|
||||
}
|
||||
}
|
@@ -0,0 +1,13 @@
|
||||
namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
|
||||
{
|
||||
/// <summary>
|
||||
/// <para>表示 [GET] /marketing/membercard-open/cards/{card_id}/decrypt-code 接口的响应。</para>
|
||||
/// </summary>
|
||||
public class DecryptMarketingMemberCardOpenCardCodeResponse : WechatTenpayResponse
|
||||
{
|
||||
public override bool IsSuccessful()
|
||||
{
|
||||
return RawStatus == 200;
|
||||
}
|
||||
}
|
||||
}
|
@@ -0,0 +1,15 @@
|
||||
namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
|
||||
{
|
||||
/// <summary>
|
||||
/// <para>表示 [GET] /marketing/membercard-open/activate-informations/{activate_ticket} 接口的请求。</para>
|
||||
/// </summary>
|
||||
public class GetMarketingMemberCardOpenActivateInformationRequest : WechatTenpayRequest
|
||||
{
|
||||
/// <summary>
|
||||
/// 获取或设置激活 Ticket。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonIgnore]
|
||||
[System.Text.Json.Serialization.JsonIgnore]
|
||||
public string ActivateTicket { get; set; } = string.Empty;
|
||||
}
|
||||
}
|
@@ -0,0 +1,36 @@
|
||||
namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
|
||||
{
|
||||
/// <summary>
|
||||
/// <para>表示 [GET] /marketing/membercard-open/activate-informations/{activate_ticket} 接口的响应。</para>
|
||||
/// </summary>
|
||||
public class GetMarketingMemberCardOpenActivateInformationResponse : WechatTenpayResponse
|
||||
{
|
||||
public static class Types
|
||||
{
|
||||
public class UserInformation : GetMarketingMemberCardOpenCardCodeByCardIdAndCodeResponse.Types.UserInformation
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置用户的微信昵称。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("nickname")]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("nickname")]
|
||||
public string? Nickname { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置用户的微信头像 URL。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("head_image_url")]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("head_image_url")]
|
||||
public string? HeadImageUrl { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置用户开卡时填写的个人信息。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("user_information")]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("user_information")]
|
||||
public Types.UserInformation? UserInformation { get; set; }
|
||||
}
|
||||
}
|
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"membership_number": "316510891298"
|
||||
}
|
@@ -0,0 +1 @@
|
||||
{}
|
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"activate_type": "AUTO_ACTIVATE",
|
||||
"navigate_back_previous_page": true,
|
||||
"activate_url": "https://w.url.cn/s/Ahz3p2C",
|
||||
"activate_appid": "wxea9c30a90fs8d3fe",
|
||||
"activate_path": "pages/activate/activate",
|
||||
"outer_str": "szwxtd"
|
||||
}
|
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"permission_token": "EhhEF0Jt0uDLPK6Cr70KCrJmkTtfPPE222gUFsdP87CF4RqzpIdnNpDsbOD1kpsNuioecawJqEUfANcDhLrSA3xadU4pD6IJ7tpLEheA3kS1b6"
|
||||
}
|
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"activate_type": "AUTO_ACTIVATE",
|
||||
"activate_url": "https://w.url.cn/s/Ahz3p2C",
|
||||
"activate_appid": "wxea9c30a90fs8d3fe",
|
||||
"activate_path": "pages/activate/activate",
|
||||
"outer_str": "szwxtd"
|
||||
}
|
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"url": "https://w.url.cn/s/Ahz3p2C"
|
||||
}
|
@@ -0,0 +1 @@
|
||||
{}
|
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"code": "751234212312"
|
||||
}
|
@@ -0,0 +1 @@
|
||||
{}
|
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"nickname": "周星星",
|
||||
"head_image_url": "https://xxx.jpg",
|
||||
"user_information": {
|
||||
"common_field_list": [
|
||||
{
|
||||
"name": "USER_FORM_FLAG_MOBILE",
|
||||
"value": "深圳"
|
||||
}
|
||||
],
|
||||
"custom_field_list": [
|
||||
{
|
||||
"name": "喜欢的运动",
|
||||
"value": "篮球",
|
||||
"value_list": [
|
||||
"羽毛球,足球,乒乓球"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user