Skip to content

Commit 992bbf1

Browse files
committed
feat(tenpayv3): 新增微信分付支付方式前置曝光相关接口
1 parent 223232f commit 992bbf1

15 files changed

Lines changed: 392 additions & 0 deletions
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
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 WechatTenpayClientExecutePayAcquiringBankTransactionsExtensions
10+
{
11+
#region Exposure
12+
/// <summary>
13+
/// <para>异步调用 [POST] /pay/acquiring-bank/transactions/exposure 接口。</para>
14+
/// <para>
15+
/// REF: <br/>
16+
/// <![CDATA[ https://pay.weixin.qq.com/doc/v3/partner/4014326541 ]]>
17+
/// </para>
18+
/// </summary>
19+
/// <param name="client"></param>
20+
/// <param name="request"></param>
21+
/// <param name="cancellationToken"></param>
22+
/// <returns></returns>
23+
public static async Task<Models.CreatePayAcquiringBankTransactionExposureResponse> ExecuteCreatePayAcquiringBankTransactionExposureAsync(this WechatTenpayClient client, Models.CreatePayAcquiringBankTransactionExposureRequest request, CancellationToken cancellationToken = default)
24+
{
25+
if (client is null) throw new ArgumentNullException(nameof(client));
26+
if (request is null) throw new ArgumentNullException(nameof(request));
27+
28+
IFlurlRequest flurlReq = client
29+
.CreateFlurlRequest(request, HttpMethod.Post, "pay", "acquiring-bank", "transactions", "exposure");
30+
31+
return await client.SendFlurlRequestAsJsonAsync<Models.CreatePayAcquiringBankTransactionExposureResponse>(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
32+
}
33+
#endregion
34+
}
35+
}

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

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -283,5 +283,32 @@ public static class WechatTenpayClientExecutePayPartnerTransactionsExtensions
283283

284284
return await client.SendFlurlRequestAsJsonAsync<Models.ReversePayPartnerTransactionResponse>(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
285285
}
286+
287+
#region Exposure
288+
/// <summary>
289+
/// <para>异步调用 [POST] /pay/partner/transactions/exposure 接口。</para>
290+
/// <para>
291+
/// REF: <br/>
292+
/// <![CDATA[ https://pay.weixin.qq.com/doc/v3/partner/4014326522 ]]>
293+
/// </para>
294+
/// </summary>
295+
/// <param name="client"></param>
296+
/// <param name="request"></param>
297+
/// <param name="cancellationToken"></param>
298+
/// <returns></returns>
299+
public static async Task<Models.CreatePayPartnerTransactionExposureResponse> ExecuteCreatePayPartnerTransactionExposureAsync(this WechatTenpayClient client, Models.CreatePayPartnerTransactionExposureRequest request, CancellationToken cancellationToken = default)
300+
{
301+
if (client is null) throw new ArgumentNullException(nameof(client));
302+
if (request is null) throw new ArgumentNullException(nameof(request));
303+
304+
if (request.MerchantId is null)
305+
request.MerchantId = client.Credentials.MerchantId;
306+
307+
IFlurlRequest flurlReq = client
308+
.CreateFlurlRequest(request, HttpMethod.Post, "pay", "partner", "transactions", "exposure");
309+
310+
return await client.SendFlurlRequestAsJsonAsync<Models.CreatePayPartnerTransactionExposureResponse>(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
311+
}
312+
#endregion
286313
}
287314
}

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

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -248,5 +248,32 @@ public static class WechatTenpayClientExecutePayTransactionsExtensions
248248

249249
return await client.SendFlurlRequestAsJsonAsync<Models.ReversePayTransactionResponse>(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
250250
}
251+
252+
#region Exposure
253+
/// <summary>
254+
/// <para>异步调用 [POST] /pay/transactions/exposure 接口。</para>
255+
/// <para>
256+
/// REF: <br/>
257+
/// <![CDATA[ https://pay.weixin.qq.com/doc/v3/merchant/4014326314 ]]>
258+
/// </para>
259+
/// </summary>
260+
/// <param name="client"></param>
261+
/// <param name="request"></param>
262+
/// <param name="cancellationToken"></param>
263+
/// <returns></returns>
264+
public static async Task<Models.CreatePayTransactionExposureResponse> ExecuteCreatePayTransactionExposureAsync(this WechatTenpayClient client, Models.CreatePayTransactionExposureRequest request, CancellationToken cancellationToken = default)
265+
{
266+
if (client is null) throw new ArgumentNullException(nameof(client));
267+
if (request is null) throw new ArgumentNullException(nameof(request));
268+
269+
if (request.MerchantId is null)
270+
request.MerchantId = client.Credentials.MerchantId;
271+
272+
IFlurlRequest flurlReq = client
273+
.CreateFlurlRequest(request, HttpMethod.Post, "pay", "transactions", "exposure");
274+
275+
return await client.SendFlurlRequestAsJsonAsync<Models.CreatePayTransactionExposureResponse>(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
276+
}
277+
#endregion
251278
}
252279
}
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
2+
{
3+
/// <summary>
4+
/// <para>表示 [POST] /pay/transactions/exposure 接口的请求。</para>
5+
/// </summary>
6+
public class CreatePayTransactionExposureRequest : WechatTenpayRequest
7+
{
8+
public static class Types
9+
{
10+
public class Payer
11+
{
12+
/// <summary>
13+
/// 获取或设置用户唯一标识。
14+
/// </summary>
15+
[Newtonsoft.Json.JsonProperty("openid")]
16+
[System.Text.Json.Serialization.JsonPropertyName("openid")]
17+
public string? OpenId { get; set; }
18+
19+
/// <summary>
20+
/// 获取或设置手机号哈希值。
21+
/// </summary>
22+
[Newtonsoft.Json.JsonProperty("phone_number_hash")]
23+
[System.Text.Json.Serialization.JsonPropertyName("phone_number_hash")]
24+
public string? PhoneNumberHash { get; set; }
25+
}
26+
}
27+
28+
/// <summary>
29+
/// 获取或设置微信商户号。如果不指定将使用构造 <see cref="WechatTenpayClient"/> 时的 <see cref="WechatTenpayClientOptions.MerchantId"/> 参数。
30+
/// </summary>
31+
[Newtonsoft.Json.JsonProperty("mchid")]
32+
[System.Text.Json.Serialization.JsonPropertyName("mchid")]
33+
public string? MerchantId { get; set; }
34+
35+
/// <summary>
36+
/// 获取或设置微信 AppId。
37+
/// </summary>
38+
[Newtonsoft.Json.JsonProperty("appid")]
39+
[System.Text.Json.Serialization.JsonPropertyName("appid")]
40+
public string AppId { get; set; } = string.Empty;
41+
42+
/// <summary>
43+
/// 获取或设置商户订单号。
44+
/// </summary>
45+
[Newtonsoft.Json.JsonProperty("out_trade_no")]
46+
[System.Text.Json.Serialization.JsonPropertyName("out_trade_no")]
47+
public string OutTradeNumber { get; set; } = string.Empty;
48+
49+
/// <summary>
50+
/// 获取或设置支付者信息。
51+
/// </summary>
52+
[Newtonsoft.Json.JsonProperty("payer")]
53+
[System.Text.Json.Serialization.JsonPropertyName("payer")]
54+
public Types.Payer? Payer { get; set; }
55+
}
56+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
2+
{
3+
/// <summary>
4+
/// <para>表示 [POST] /pay/transactions/exposure 接口的响应。</para>
5+
/// </summary>
6+
public class CreatePayTransactionExposureResponse : WechatTenpayResponse
7+
{
8+
/// <summary>
9+
/// 获取或设置是否建议曝光微信分付。
10+
/// </summary>
11+
[Newtonsoft.Json.JsonProperty("fqf_exposure")]
12+
[System.Text.Json.Serialization.JsonPropertyName("fqf_exposure")]
13+
public bool IsExposed { get; set; }
14+
15+
/// <summary>
16+
/// 获取或设置曝光凭证。
17+
/// </summary>
18+
[Newtonsoft.Json.JsonProperty("market_exposure_token")]
19+
[System.Text.Json.Serialization.JsonPropertyName("market_exposure_token")]
20+
public string? MarketExposureToken { get; set; }
21+
}
22+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
2+
{
3+
/// <summary>
4+
/// <para>表示 [POST] /pay/acquiring-bank/transactions/exposure 接口的请求。</para>
5+
/// </summary>
6+
public class CreatePayAcquiringBankTransactionExposureRequest : WechatTenpayRequest
7+
{
8+
public static class Types
9+
{
10+
public class Payer
11+
{
12+
/// <summary>
13+
/// 获取或设置用户唯一标识。
14+
/// </summary>
15+
[Newtonsoft.Json.JsonProperty("acquiring_bank_openid")]
16+
[System.Text.Json.Serialization.JsonPropertyName("acquiring_bank_openid")]
17+
public string? OpenId { get; set; }
18+
19+
/// <summary>
20+
/// 获取或设置用户在特约商户下的唯一标识。
21+
/// </summary>
22+
[Newtonsoft.Json.JsonProperty("merchant_openid")]
23+
[System.Text.Json.Serialization.JsonPropertyName("merchant_openid")]
24+
public string? SubOpenId { get; set; }
25+
26+
/// <summary>
27+
/// 获取或设置手机号哈希值。
28+
/// </summary>
29+
[Newtonsoft.Json.JsonProperty("phone_number_hash")]
30+
[System.Text.Json.Serialization.JsonPropertyName("phone_number_hash")]
31+
public string? PhoneNumberHash { get; set; }
32+
}
33+
}
34+
35+
/// <summary>
36+
/// 获取或设置从业机构号。
37+
/// </summary>
38+
[Newtonsoft.Json.JsonProperty("acquiring_bank_id")]
39+
[System.Text.Json.Serialization.JsonPropertyName("acquiring_bank_id")]
40+
public string AquiringBankId { get; set; } = string.Empty;
41+
42+
/// <summary>
43+
/// 获取或设置从业机构 AppId。
44+
/// </summary>
45+
[Newtonsoft.Json.JsonProperty("acquiring_bank_appid")]
46+
[System.Text.Json.Serialization.JsonPropertyName("acquiring_bank_appid")]
47+
public string? AquiringBankAppId { get; set; }
48+
49+
/// <summary>
50+
/// 获取或设置特约商户号。
51+
/// </summary>
52+
[Newtonsoft.Json.JsonProperty("merchant_id")]
53+
[System.Text.Json.Serialization.JsonPropertyName("merchant_id")]
54+
public string SubMerchantId { get; set; } = string.Empty;
55+
56+
/// <summary>
57+
/// 获取或设置特约商户 AppId。
58+
/// </summary>
59+
[Newtonsoft.Json.JsonProperty("merchant_appid")]
60+
[System.Text.Json.Serialization.JsonPropertyName("merchant_appid")]
61+
public string? SubAppId { get; set; }
62+
63+
/// <summary>
64+
/// 获取或设置渠道商户号。
65+
/// </summary>
66+
[Newtonsoft.Json.JsonProperty("channel_id")]
67+
[System.Text.Json.Serialization.JsonPropertyName("channel_id")]
68+
public string ChannelId { get; set; } = string.Empty;
69+
70+
/// <summary>
71+
/// 获取或设置商户订单号。
72+
/// </summary>
73+
[Newtonsoft.Json.JsonProperty("out_trade_no")]
74+
[System.Text.Json.Serialization.JsonPropertyName("out_trade_no")]
75+
public string OutTradeNumber { get; set; } = string.Empty;
76+
77+
/// <summary>
78+
/// 获取或设置支付者信息。
79+
/// </summary>
80+
[Newtonsoft.Json.JsonProperty("payer")]
81+
[System.Text.Json.Serialization.JsonPropertyName("payer")]
82+
public Types.Payer? Payer { get; set; }
83+
}
84+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
2+
{
3+
/// <summary>
4+
/// <para>表示 [POST] /pay/acquiring-bank/transactions/exposure 接口的响应。</para>
5+
/// </summary>
6+
public class CreatePayAcquiringBankTransactionExposureResponse : CreatePayTransactionExposureResponse
7+
{
8+
}
9+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
2+
{
3+
/// <summary>
4+
/// <para>表示 [POST] /pay/partner/transactions/exposure 接口的请求。</para>
5+
/// </summary>
6+
public class CreatePayPartnerTransactionExposureRequest : WechatTenpayRequest
7+
{
8+
public static class Types
9+
{
10+
public class Payer
11+
{
12+
/// <summary>
13+
/// 获取或设置用户唯一标识。
14+
/// </summary>
15+
[Newtonsoft.Json.JsonProperty("sp_openid")]
16+
[System.Text.Json.Serialization.JsonPropertyName("sp_openid")]
17+
public string? OpenId { get; set; }
18+
19+
/// <summary>
20+
/// 获取或设置用户在子商户下的唯一标识。
21+
/// </summary>
22+
[Newtonsoft.Json.JsonProperty("sub_openid")]
23+
[System.Text.Json.Serialization.JsonPropertyName("sub_openid")]
24+
public string? SubOpenId { get; set; }
25+
26+
/// <summary>
27+
/// 获取或设置手机号哈希值。
28+
/// </summary>
29+
[Newtonsoft.Json.JsonProperty("phone_number_hash")]
30+
[System.Text.Json.Serialization.JsonPropertyName("phone_number_hash")]
31+
public string? PhoneNumberHash { get; set; }
32+
}
33+
}
34+
35+
/// <summary>
36+
/// 获取或设置服务商商户号。如果不指定将使用构造 <see cref="WechatTenpayClient"/> 时的 <see cref="WechatTenpayClientOptions.MerchantId"/> 参数。
37+
/// </summary>
38+
[Newtonsoft.Json.JsonProperty("sp_mchid")]
39+
[System.Text.Json.Serialization.JsonPropertyName("sp_mchid")]
40+
public string? MerchantId { get; set; }
41+
42+
/// <summary>
43+
/// 获取或设置子商户号。
44+
/// </summary>
45+
[Newtonsoft.Json.JsonProperty("sub_mchid")]
46+
[System.Text.Json.Serialization.JsonPropertyName("sub_mchid")]
47+
public string SubMerchantId { get; set; } = string.Empty;
48+
49+
/// <summary>
50+
/// 获取或设置服务商 AppId。
51+
/// </summary>
52+
[Newtonsoft.Json.JsonProperty("sp_appid")]
53+
[System.Text.Json.Serialization.JsonPropertyName("sp_appid")]
54+
public string AppId { get; set; } = string.Empty;
55+
56+
/// <summary>
57+
/// 获取或设置子商户 AppId。
58+
/// </summary>
59+
[Newtonsoft.Json.JsonProperty("sub_appid")]
60+
[System.Text.Json.Serialization.JsonPropertyName("sub_appid")]
61+
public string? SubAppId { get; set; }
62+
63+
/// <summary>
64+
/// 获取或设置商户订单号。
65+
/// </summary>
66+
[Newtonsoft.Json.JsonProperty("out_trade_no")]
67+
[System.Text.Json.Serialization.JsonPropertyName("out_trade_no")]
68+
public string OutTradeNumber { get; set; } = string.Empty;
69+
70+
/// <summary>
71+
/// 获取或设置支付者信息。
72+
/// </summary>
73+
[Newtonsoft.Json.JsonProperty("payer")]
74+
[System.Text.Json.Serialization.JsonPropertyName("payer")]
75+
public Types.Payer? Payer { get; set; }
76+
}
77+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
2+
{
3+
/// <summary>
4+
/// <para>表示 [POST] /pay/partner/transactions/exposure 接口的响应。</para>
5+
/// </summary>
6+
public class CreatePayPartnerTransactionExposureResponse : CreatePayTransactionExposureResponse
7+
{
8+
}
9+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
{
2+
"mchid": "example_mchid",
3+
"appid": "wxd678efh567hg6787",
4+
"payer": {
5+
"openid": "oLTPCuEfSOSZA6X5uR_JxNKjrGLg",
6+
"phone_number_hash": "ABDEF3445546456B"
7+
},
8+
"out_trade_no": "example_out_trade_no"
9+
}

0 commit comments

Comments
 (0)