diff --git a/docs/WechatTenpayV3/Basic_ModelDefinition.md b/docs/WechatTenpayV3/Basic_ModelDefinition.md index adc69558..c0060390 100644 --- a/docs/WechatTenpayV3/Basic_ModelDefinition.md +++ b/docs/WechatTenpayV3/Basic_ModelDefinition.md @@ -207,6 +207,8 @@ - 发起转账并完成免确认收款授权:`CreateFundAppMerchantTransferBillPreTransferWithAuthorization` + - 发起免确认收款授权:`CreateFundAppMerchantTransferUserConfirmAuthorization` + - 商户单号查询授权结果:`GetFundAppMerchantTransferUserConfirmAuthorizationByOutAuthorizationNumber` - 用户授权后转账:`CreateFundAppMerchantTransferBillTransfer` diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecuteFundAppExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecuteFundAppExtensions.cs index 0c4bc2b9..f65196ad 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecuteFundAppExtensions.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecuteFundAppExtensions.cs @@ -233,6 +233,28 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3 return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false); } + /// + /// 异步调用 [POST] /fund-app/mch-transfer/user-confirm-authorization 接口。 + /// + /// REF:
+ /// + ///
+ ///
+ /// + /// + /// + /// + public static async Task ExecuteCreateFundAppMerchantTransferUserConfirmAuthorizationAsync(this WechatTenpayClient client, Models.CreateFundAppMerchantTransferUserConfirmAuthorizationRequest 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, "fund-app", "mch-transfer", "user-confirm-authorization"); + + return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false); + } + /// /// 异步调用 [GET] /fund-app/mch-transfer/user-confirm-authorization/out-authorization-no/{out_authorization_no} 接口。 /// diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/FundApp/MerchantTransfer/TransferBills/CreateFundAppMerchantTransferUserConfirmAuthorizationRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/FundApp/MerchantTransfer/TransferBills/CreateFundAppMerchantTransferUserConfirmAuthorizationRequest.cs new file mode 100644 index 00000000..c9c74197 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/FundApp/MerchantTransfer/TransferBills/CreateFundAppMerchantTransferUserConfirmAuthorizationRequest.cs @@ -0,0 +1,58 @@ +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models +{ + /// + /// 表示 [POST] /fund-app/mch-transfer/user-confirm-authorization 接口的请求。 + /// + [WechatTenpaySensitive] + public class CreateFundAppMerchantTransferUserConfirmAuthorizationRequest : WechatTenpayRequest + { + /// + /// 获取或设置微信 AppId。 + /// + [Newtonsoft.Json.JsonProperty("appid")] + [System.Text.Json.Serialization.JsonPropertyName("appid")] + public string AppId { get; set; } = string.Empty; + + /// + /// 获取或设置商户侧授权单号。 + /// + [Newtonsoft.Json.JsonProperty("out_authorization_no")] + [System.Text.Json.Serialization.JsonPropertyName("out_authorization_no")] + public string OutAuthorizationNumber { get; set; } = string.Empty; + + /// + /// 获取或设置收款用户 OpenId。 + /// + [Newtonsoft.Json.JsonProperty("openid")] + [System.Text.Json.Serialization.JsonPropertyName("openid")] + public string OpenId { get; set; } = string.Empty; + + /// + /// 获取或设置转账场景 ID。 + /// + [Newtonsoft.Json.JsonProperty("transfer_scene_id")] + [System.Text.Json.Serialization.JsonPropertyName("transfer_scene_id")] + public string? TransferSceneId { get; set; } + + /// + /// 获取或设置授权结果通知地址。 + /// + [Newtonsoft.Json.JsonProperty("authorization_notify_url")] + [System.Text.Json.Serialization.JsonPropertyName("authorization_notify_url")] + public string? AuthorizationNotifyUrl { get; set; } + + /// + /// 获取或设置用户展示名称。 + /// + [Newtonsoft.Json.JsonProperty("user_display_name")] + [System.Text.Json.Serialization.JsonPropertyName("user_display_name")] + public string UserDisplayName { get; set; } = string.Empty; + + /// + /// 获取或设置用户收款感知。 + /// + [Newtonsoft.Json.JsonProperty("user_recv_perception")] + [System.Text.Json.Serialization.JsonPropertyName("user_recv_perception")] + public string? UserReceivePerception { get; set; } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/FundApp/MerchantTransfer/TransferBills/CreateFundAppMerchantTransferUserConfirmAuthorizationResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/FundApp/MerchantTransfer/TransferBills/CreateFundAppMerchantTransferUserConfirmAuthorizationResponse.cs new file mode 100644 index 00000000..0f316976 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/FundApp/MerchantTransfer/TransferBills/CreateFundAppMerchantTransferUserConfirmAuthorizationResponse.cs @@ -0,0 +1,40 @@ +using System; + +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models +{ + /// + /// 表示 [POST] /fund-app/mch-transfer/user-confirm-authorization 接口的响应。 + /// + public class CreateFundAppMerchantTransferUserConfirmAuthorizationResponse : WechatTenpayResponse + { + /// + /// 获取或设置商户侧授权单号。 + /// + [Newtonsoft.Json.JsonProperty("out_authorization_no")] + [System.Text.Json.Serialization.JsonPropertyName("out_authorization_no")] + public string OutAuthorizationNumber { get; set; } = default!; + + /// + /// 获取或设置授权状态。 + /// + [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("package_info")] + [System.Text.Json.Serialization.JsonPropertyName("package_info")] + public string? PackageInfo { get; set; } + } +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/FundApp/MerchantTransfer/TransferBills/CreateFundAppMerchantTransferUserConfirmAuthorizationRequest.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/FundApp/MerchantTransfer/TransferBills/CreateFundAppMerchantTransferUserConfirmAuthorizationRequest.json new file mode 100644 index 00000000..36342a0e --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/FundApp/MerchantTransfer/TransferBills/CreateFundAppMerchantTransferUserConfirmAuthorizationRequest.json @@ -0,0 +1,9 @@ +{ + "out_authorization_no": "plfk2020042013", + "appid": "102022609", + "openid": "oLTPCuFqLz_UVHHD67rLX5BxXysI", + "transfer_scene_id": "1000", + "user_display_name": "wx_123456", + "user_recv_perception": "现金奖励", + "authorization_notify_url": "https://www.weixin.qq.com/wxpay/pay.php" +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/FundApp/MerchantTransfer/TransferBills/CreateFundAppMerchantTransferUserConfirmAuthorizationResponse.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/FundApp/MerchantTransfer/TransferBills/CreateFundAppMerchantTransferUserConfirmAuthorizationResponse.json new file mode 100644 index 00000000..0cb2ce73 --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/FundApp/MerchantTransfer/TransferBills/CreateFundAppMerchantTransferUserConfirmAuthorizationResponse.json @@ -0,0 +1,6 @@ +{ + "out_authorization_no": "plfk2020042013", + "state": "WAIT_USER_CONFIRM", + "create_time": "2015-05-20T13:29:35.120+08:00", + "package_info": "0002-affffddafdfafddffda==" +}