Skip to content

Commit 8aae308

Browse files
committed
feat(tenpayv3): 新增还款支付相关接口
1 parent 048a51a commit 8aae308

19 files changed

Lines changed: 602 additions & 47 deletions

docs/WechatTenpayV3/Basic_ModelDefinition.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,8 @@
4848
|| 经营能力:微信支付分签约计划 | 直连商户 & 合作伙伴 | |
4949
|| 经营能力:平台收付通 | 合作伙伴 | |
5050
|| 经营能力:平台保证金 | 合作伙伴 | |
51-
|| 经营能力:个人收款(二手交易) | 合作伙伴 | |
51+
|| 经营能力:个人收款 | 合作伙伴 | |
52+
|| 经营能力:还款支付 | 合作伙伴 | |
5253
|| 运营工具:代金券 | 直连商户 & 合作伙伴 | |
5354
|| 运营工具:商家券 | 直连商户 & 合作伙伴 | |
5455
|| 运营工具:消费金 | 直连商户 | |

src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Events/CombineTransactions/CombineTransactionResource.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ public class Payer : Models.GetCombineTransactionByCombineOutTradeNumberResponse
5959
/// </summary>
6060
[Newtonsoft.Json.JsonProperty("sub_orders")]
6161
[System.Text.Json.Serialization.JsonPropertyName("sub_orders")]
62-
public Types.SubOrder[]? SubOrderList { get; set; } = default!;
62+
public Types.SubOrder[]? SubOrderList { get; set; }
6363

6464
/// <summary>
6565
/// 获取或设置支付者信息。
Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
using System;
2+
using System.Net.Http;
3+
using System.Threading;
4+
using System.Threading.Tasks;
5+
using Flurl.Http;
6+
7+
namespace SKIT.FlurlHttpClient.Wechat.TenpayV3
8+
{
9+
public static class WechatTenpayClientExecuteRepaymentPartnerExtensions
10+
{
11+
/// <summary>
12+
/// <para>异步调用 [POST] /repayment/combine-transactions/partner/prepay 接口。</para>
13+
/// <para>
14+
/// REF: <br/>
15+
/// <![CDATA[ https://pay.weixin.qq.com/doc/v3/partner/4015124463 ]]>
16+
/// </para>
17+
/// </summary>
18+
/// <param name="client"></param>
19+
/// <param name="request"></param>
20+
/// <param name="cancellationToken"></param>
21+
/// <returns></returns>
22+
public static async Task<Models.CreateRepaymentPartnerCombineTransactionResponse> ExecuteCreateRepaymentPartnerCombineTransactionAsync(this WechatTenpayClient client, Models.CreateRepaymentPartnerCombineTransactionRequest request, CancellationToken cancellationToken = default)
23+
{
24+
if (client is null) throw new ArgumentNullException(nameof(client));
25+
if (request is null) throw new ArgumentNullException(nameof(request));
26+
27+
if (request.CombineMerchantId is null)
28+
request.CombineMerchantId = client.Credentials.MerchantId;
29+
30+
if (request.SubOrderList is not null)
31+
{
32+
foreach (var subOrder in request.SubOrderList)
33+
{
34+
if (subOrder.MerchantId is null)
35+
subOrder.MerchantId = request.CombineMerchantId;
36+
}
37+
}
38+
39+
IFlurlRequest flurlReq = client
40+
.CreateFlurlRequest(request, HttpMethod.Post, "repayment", "combine-transactions", "partner", "prepay");
41+
42+
return await client.SendFlurlRequestAsJsonAsync<Models.CreateRepaymentPartnerCombineTransactionResponse>(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
43+
}
44+
45+
/// <summary>
46+
/// <para>异步调用 [GET] /repayment/combine-transactions/partner/out-trade-no/{combine_out_trade_no} 接口。</para>
47+
/// <para>
48+
/// REF: <br/>
49+
/// <![CDATA[ https://pay.weixin.qq.com/doc/v3/partner/4015124483 ]]>
50+
/// </para>
51+
/// </summary>
52+
/// <param name="client"></param>
53+
/// <param name="request"></param>
54+
/// <param name="cancellationToken"></param>
55+
/// <returns></returns>
56+
public static async Task<Models.GetRepaymentPartnerCombineTransactionByOutTradeNumberResponse> ExecuteGetRepaymentPartnerCombineTransactionByOutTradeNumberAsync(this WechatTenpayClient client, Models.GetRepaymentPartnerCombineTransactionByOutTradeNumberRequest request, CancellationToken cancellationToken = default)
57+
{
58+
if (client is null) throw new ArgumentNullException(nameof(client));
59+
if (request is null) throw new ArgumentNullException(nameof(request));
60+
61+
IFlurlRequest flurlReq = client
62+
.CreateFlurlRequest(request, HttpMethod.Get, "repayment", "combine-transactions", "partner", "out-trade-no", request.CombineOutTradeNumber);
63+
64+
return await client.SendFlurlRequestAsJsonAsync<Models.GetRepaymentPartnerCombineTransactionByOutTradeNumberResponse>(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
65+
}
66+
67+
/// <summary>
68+
/// <para>异步调用 [POST] /repayment/combine-transactions/partner/out-trade-no/{combine_out_trade_no}/close 接口。</para>
69+
/// <para>
70+
/// REF: <br/>
71+
/// <![CDATA[ https://pay.weixin.qq.com/doc/v3/partner/4015124497 ]]>
72+
/// </para>
73+
/// </summary>
74+
/// <param name="client"></param>
75+
/// <param name="request"></param>
76+
/// <param name="cancellationToken"></param>
77+
/// <returns></returns>
78+
public static async Task<Models.CloseRepaymentPartnerCombineTransactionResponse> ExecuteCloseRepaymentPartnerCombineTransactionAsync(this WechatTenpayClient client, Models.CloseRepaymentPartnerCombineTransactionRequest request, CancellationToken cancellationToken = default)
79+
{
80+
if (client is null) throw new ArgumentNullException(nameof(client));
81+
if (request is null) throw new ArgumentNullException(nameof(request));
82+
83+
IFlurlRequest flurlReq = client
84+
.CreateFlurlRequest(request, HttpMethod.Post, "repayment", "combine-transactions", "partner", "out-trade-no", request.CombineOutTradeNumber, "close");
85+
86+
return await client.SendFlurlRequestAsJsonAsync<Models.CloseRepaymentPartnerCombineTransactionResponse>(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
87+
}
88+
}
89+
}

src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientParameterExtensions.cs

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,8 @@ public static class WechatTenpayClientParameterExtensions
2323
/// <![CDATA[ https://pay.weixin.qq.com/doc/v3/partner/4012091236 ]]> <br/>
2424
/// <![CDATA[ https://pay.weixin.qq.com/doc/v3/partner/4012166844 ]]> <br/>
2525
/// <![CDATA[ https://pay.weixin.qq.com/doc/v3/partner/4012166847 ]]> <br/>
26-
/// <![CDATA[ https://pay.weixin.qq.com/doc/v3/partner/4012602233 ]]>
26+
/// <![CDATA[ https://pay.weixin.qq.com/doc/v3/partner/4012602233 ]]> <br/>
27+
/// <![CDATA[ https://pay.weixin.qq.com/doc/v3/partner/4015124455 ]]>
2728
/// </para>
2829
/// </summary>
2930
/// <param name="client"></param>
@@ -64,7 +65,8 @@ public static IDictionary<string, string> GenerateParametersForJsapiPayRequest(t
6465
/// <![CDATA[ https://pay.weixin.qq.com/doc/v3/partner/4012090949 ]]> <br/>
6566
/// <![CDATA[ https://pay.weixin.qq.com/doc/v3/partner/4012166845 ]]> <br/>
6667
/// <![CDATA[ https://pay.weixin.qq.com/doc/v3/partner/4013080233 ]]> <br/>
67-
/// <![CDATA[ https://pay.weixin.qq.com/doc/v3/partner/4015001851 ]]>
68+
/// <![CDATA[ https://pay.weixin.qq.com/doc/v3/partner/4015001851 ]]> <br/>
69+
/// <![CDATA[ https://pay.weixin.qq.com/doc/v3/partner/4015124372 ]]>
6870
/// </para>
6971
/// </summary>
7072
/// <param name="client"></param>
@@ -85,7 +87,8 @@ public static IDictionary<string, string> GenerateParametersForAppPayRequest(thi
8587
/// <![CDATA[ https://pay.weixin.qq.com/doc/v3/partner/4012090949 ]]> <br/>
8688
/// <![CDATA[ https://pay.weixin.qq.com/doc/v3/partner/4012166845 ]]> <br/>
8789
/// <![CDATA[ https://pay.weixin.qq.com/doc/v3/partner/4013080233 ]]> <br/>
88-
/// <![CDATA[ https://pay.weixin.qq.com/doc/v3/partner/4015001851 ]]>
90+
/// <![CDATA[ https://pay.weixin.qq.com/doc/v3/partner/4015001851 ]]> <br/>
91+
/// <![CDATA[ https://pay.weixin.qq.com/doc/v3/partner/4015124372 ]]>
8992
/// </para>
9093
/// </summary>
9194
/// <param name="client"></param>

src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/CombineTransactions/CreateCombineTransactionAppRequest.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ public class Settlement
4545
/// </summary>
4646
[Newtonsoft.Json.JsonProperty("subsidy_amount")]
4747
[System.Text.Json.Serialization.JsonPropertyName("subsidy_amount")]
48-
public long? SubsidyAmount { get; set; }
48+
public int? SubsidyAmount { get; set; }
4949
}
5050
}
5151

src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/CombineTransactions/CreateCombineTransactionH5Request.cs

Lines changed: 2 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -18,43 +18,8 @@ public class Scene : CreateCombineTransactionAppRequest.Types.Scene
1818
{
1919
public static class Types
2020
{
21-
public class H5
21+
public class H5Info : CreatePayTransactionH5Request.Types.Scene.Types.H5Info
2222
{
23-
/// <summary>
24-
/// 获取或设置场景类型。
25-
/// <para>默认值:"Wap"</para>
26-
/// </summary>
27-
[Newtonsoft.Json.JsonProperty("type")]
28-
[System.Text.Json.Serialization.JsonPropertyName("type")]
29-
public string Type { get; set; } = "Wap";
30-
31-
/// <summary>
32-
/// 获取或设置应用名称。
33-
/// </summary>
34-
[Newtonsoft.Json.JsonProperty("app_name")]
35-
[System.Text.Json.Serialization.JsonPropertyName("app_name")]
36-
public string? AppName { get; set; }
37-
38-
/// <summary>
39-
/// 获取或设置网站 URL。
40-
/// </summary>
41-
[Newtonsoft.Json.JsonProperty("app_url")]
42-
[System.Text.Json.Serialization.JsonPropertyName("app_url")]
43-
public string? AppUrl { get; set; }
44-
45-
/// <summary>
46-
/// 获取或设置 iOS 平台 BundleID。
47-
/// </summary>
48-
[Newtonsoft.Json.JsonProperty("bundle_id")]
49-
[System.Text.Json.Serialization.JsonPropertyName("bundle_id")]
50-
public string? BundleId { get; set; }
51-
52-
/// <summary>
53-
/// 获取或设置 Android 平台 PackageName。
54-
/// </summary>
55-
[Newtonsoft.Json.JsonProperty("package_name")]
56-
[System.Text.Json.Serialization.JsonPropertyName("package_name")]
57-
public string? PackageName { get; set; }
5823
}
5924
}
6025

@@ -63,7 +28,7 @@ public class H5
6328
/// </summary>
6429
[Newtonsoft.Json.JsonProperty("h5_info")]
6530
[System.Text.Json.Serialization.JsonPropertyName("h5_info")]
66-
public Types.H5 H5 { get; set; } = new Types.H5();
31+
public Types.H5Info H5Info { get; set; } = new Types.H5Info();
6732
}
6833
}
6934

src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/CombineTransactions/GetCombineTransactionByCombineOutTradeNumberResponse.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -207,7 +207,7 @@ public class Scene
207207
/// </summary>
208208
[Newtonsoft.Json.JsonProperty("sub_orders")]
209209
[System.Text.Json.Serialization.JsonPropertyName("sub_orders")]
210-
public Types.SubOrder[]? SubOrderList { get; set; } = default!;
210+
public Types.SubOrder[]? SubOrderList { get; set; }
211211

212212
/// <summary>
213213
/// 获取或设置支付者信息。

src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/PayTransactions/CreatePayTransactionH5Request.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ public class Scene : CreatePayTransactionAppRequest.Types.Scene
2121
{
2222
public static new class Types
2323
{
24-
public class H5
24+
public class H5Info
2525
{
2626
/// <summary>
2727
/// 获取或设置场景类型。
@@ -66,7 +66,7 @@ public class H5
6666
/// </summary>
6767
[Newtonsoft.Json.JsonProperty("h5_info")]
6868
[System.Text.Json.Serialization.JsonPropertyName("h5_info")]
69-
public Types.H5 H5 { get; set; } = new Types.H5();
69+
public Types.H5Info H5Info { get; set; } = new Types.H5Info();
7070
}
7171

7272
public class Settlement : CreatePayTransactionAppRequest.Types.Settlement

src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/Ecommerce/CombinePAPay/GetEcommerceCombinePAPayTransactionByCombineOutTradeNumberResponse.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ public class Payer : GetCombineTransactionByCombineOutTradeNumberResponse.Types.
5555
/// </summary>
5656
[Newtonsoft.Json.JsonProperty("sub_orders")]
5757
[System.Text.Json.Serialization.JsonPropertyName("sub_orders")]
58-
public Types.SubOrder[]? SubOrderList { get; set; } = default!;
58+
public Types.SubOrder[]? SubOrderList { get; set; }
5959

6060
/// <summary>
6161
/// 获取或设置支付者信息。
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
using System.Collections.Generic;
2+
3+
namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
4+
{
5+
/// <summary>
6+
/// <para>表示 [POST] /repayment/combine-transactions/partner/out-trade-no/{combine_out_trade_no}/close 接口的请求。</para>
7+
/// </summary>
8+
public class CloseRepaymentPartnerCombineTransactionRequest : WechatTenpayRequest
9+
{
10+
public static class Types
11+
{
12+
public class SubOrder
13+
{
14+
/// <summary>
15+
/// 获取或设置子单微信商户号。如果不指定将使用还款单微信商户号。
16+
/// </summary>
17+
[Newtonsoft.Json.JsonProperty("mchid")]
18+
[System.Text.Json.Serialization.JsonPropertyName("mchid")]
19+
public string? MerchantId { get; set; }
20+
21+
/// <summary>
22+
/// 获取或设置子单子商户号。
23+
/// </summary>
24+
[Newtonsoft.Json.JsonProperty("sub_mchid")]
25+
[System.Text.Json.Serialization.JsonPropertyName("sub_mchid")]
26+
public string? SubMerchantId { get; set; }
27+
28+
/// <summary>
29+
/// 获取或设置子单商户订单号。
30+
/// </summary>
31+
[Newtonsoft.Json.JsonProperty("out_trade_no")]
32+
[System.Text.Json.Serialization.JsonPropertyName("out_trade_no")]
33+
public string OutTradeNumber { get; set; } = string.Empty;
34+
}
35+
}
36+
37+
/// <summary>
38+
/// 获取或设置还款单商户订单号。
39+
/// </summary>
40+
[Newtonsoft.Json.JsonIgnore]
41+
[System.Text.Json.Serialization.JsonIgnore]
42+
public string CombineOutTradeNumber { get; set; } = string.Empty;
43+
44+
/// <summary>
45+
/// 获取或设置子单列表。
46+
/// </summary>
47+
[Newtonsoft.Json.JsonProperty("sub_orders")]
48+
[System.Text.Json.Serialization.JsonPropertyName("sub_orders")]
49+
public IList<Types.SubOrder> SubOrderList { get; set; } = new List<Types.SubOrder>();
50+
}
51+
}

0 commit comments

Comments
 (0)