Skip to content

Commit 49a89ee

Browse files
committed
feat(tenpayv3): 新增风险订单同步及处理相关接口
1 parent c844946 commit 49a89ee

20 files changed

Lines changed: 629 additions & 0 deletions

docs/WechatTenpayV3/Basic_ModelDefinition.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1431,6 +1431,12 @@
14311431

14321432
- 处置结果回传:`CreateMerchantRiskManageTradeRiskResult`
14331433

1434+
- 风险订单同步及处理
1435+
1436+
- 查询风险订单:`QueryMerchantRiskManagePartnerECTradeRiskTrades`
1437+
1438+
- 处置结果回传:`CreateMerchantRiskManagePartnerECTradeRiskResult`
1439+
14341440
- 不活跃商户身份核实
14351441

14361442
- 发起不活跃商户身份核实:`CreateComplianceInactiveMerchantIdentityVerification`
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Events
2+
{
3+
/// <summary>
4+
/// <para>表示 RISKTRADE.IDENTIFICATION 通知的数据。</para>
5+
/// <para>
6+
/// REF: <br/>
7+
/// <![CDATA[ https://pay.weixin.qq.com/doc/v3/merchant/4013894258 ]]> <br/>
8+
/// <![CDATA[ https://pay.weixin.qq.com/doc/v3/partner/4013894240 ]]>
9+
/// </para>
10+
/// </summary>
11+
public class RiskTradeIdentificationResource : WechatTenpayEvent.Types.IDecryptedResource
12+
{
13+
/// <summary>
14+
/// 获取或设置微信商户号。
15+
/// </summary>
16+
[Newtonsoft.Json.JsonProperty("mchid")]
17+
[System.Text.Json.Serialization.JsonPropertyName("mchid")]
18+
public string MerchantId { get; set; } = default!;
19+
20+
/// <summary>
21+
/// 获取或设置商户订单号。
22+
/// </summary>
23+
[Newtonsoft.Json.JsonProperty("out_trade_no")]
24+
[System.Text.Json.Serialization.JsonPropertyName("out_trade_no")]
25+
public string OutTradeNumber { get; set; } = default!;
26+
27+
/// <summary>
28+
/// 获取或设置风险类型。
29+
/// </summary>
30+
[Newtonsoft.Json.JsonProperty("risk_type")]
31+
[System.Text.Json.Serialization.JsonPropertyName("risk_type")]
32+
public int RiskType { get; set; }
33+
34+
/// <summary>
35+
/// 获取或设置风险等级。
36+
/// </summary>
37+
[Newtonsoft.Json.JsonProperty("risk_level")]
38+
[System.Text.Json.Serialization.JsonPropertyName("risk_level")]
39+
public int RiskLevel { get; set; }
40+
}
41+
}

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

Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,96 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3
88
{
99
public static class WechatTenpayClientExecuteMerchantRiskManageExtensions
1010
{
11+
#region ECTradeRisk
12+
/// <summary>
13+
/// <para>异步调用 [POST] /merchant-risk-manage/ec-trade-risk/query-risk-trades 接口。</para>
14+
/// <para>
15+
/// REF: <br/>
16+
/// <![CDATA[ https://pay.weixin.qq.com/doc/v3/merchant/4013894247 ]]>
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.QueryMerchantRiskManageECTradeRiskTradesResponse> ExecuteQueryMerchantRiskManageECTradeRiskTradesAsync(this WechatTenpayClient client, Models.QueryMerchantRiskManageECTradeRiskTradesRequest 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, "merchant-risk-manage", "ec-trade-risk", "query-risk-trades");
30+
31+
return await client.SendFlurlRequestAsJsonAsync<Models.QueryMerchantRiskManageECTradeRiskTradesResponse>(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
32+
}
33+
34+
/// <summary>
35+
/// <para>异步调用 [POST] /merchant-risk-manage/ec-trade-risk/recv-dispose-result 接口。</para>
36+
/// <para>
37+
/// REF: <br/>
38+
/// <![CDATA[ https://pay.weixin.qq.com/doc/v3/merchant/4013894250 ]]>
39+
/// </para>
40+
/// </summary>
41+
/// <param name="client"></param>
42+
/// <param name="request"></param>
43+
/// <param name="cancellationToken"></param>
44+
/// <returns></returns>
45+
public static async Task<Models.CreateMerchantRiskManageECTradeRiskResultResponse> ExecuteCreateMerchantRiskManageECTradeRiskResultAsync(this WechatTenpayClient client, Models.CreateMerchantRiskManageECTradeRiskResultRequest request, CancellationToken cancellationToken = default)
46+
{
47+
if (client is null) throw new ArgumentNullException(nameof(client));
48+
if (request is null) throw new ArgumentNullException(nameof(request));
49+
50+
IFlurlRequest flurlReq = client
51+
.CreateFlurlRequest(request, HttpMethod.Post, "merchant-risk-manage", "ec-trade-risk", "recv-dispose-result");
52+
53+
return await client.SendFlurlRequestAsJsonAsync<Models.CreateMerchantRiskManageECTradeRiskResultResponse>(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
54+
}
55+
56+
/// <summary>
57+
/// <para>异步调用 [POST] /merchant-risk-manage/ec-trade-risk/query-risk-trades 接口。</para>
58+
/// <para>
59+
/// REF: <br/>
60+
/// <![CDATA[ https://pay.weixin.qq.com/doc/v3/partner/4013894221 ]]>
61+
/// </para>
62+
/// </summary>
63+
/// <param name="client"></param>
64+
/// <param name="request"></param>
65+
/// <param name="cancellationToken"></param>
66+
/// <returns></returns>
67+
public static async Task<Models.QueryMerchantRiskManagePartnerECTradeRiskTradesResponse> ExecuteQueryMerchantRiskManagePartnerECTradeRiskTradesAsync(this WechatTenpayClient client, Models.QueryMerchantRiskManagePartnerECTradeRiskTradesRequest request, CancellationToken cancellationToken = default)
68+
{
69+
if (client is null) throw new ArgumentNullException(nameof(client));
70+
if (request is null) throw new ArgumentNullException(nameof(request));
71+
72+
IFlurlRequest flurlReq = client
73+
.CreateFlurlRequest(request, HttpMethod.Post, "merchant-risk-manage", "ec-trade-risk", "query-risk-trades");
74+
75+
return await client.SendFlurlRequestAsJsonAsync<Models.QueryMerchantRiskManagePartnerECTradeRiskTradesResponse>(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
76+
}
77+
78+
/// <summary>
79+
/// <para>异步调用 [POST] /merchant-risk-manage/ec-trade-risk/recv-dispose-result 接口。</para>
80+
/// <para>
81+
/// REF: <br/>
82+
/// <![CDATA[ https://pay.weixin.qq.com/doc/v3/partner/4013894227 ]]>
83+
/// </para>
84+
/// </summary>
85+
/// <param name="client"></param>
86+
/// <param name="request"></param>
87+
/// <param name="cancellationToken"></param>
88+
/// <returns></returns>
89+
public static async Task<Models.CreateMerchantRiskManagePartnerECTradeRiskResultResponse> ExecuteCreateMerchantRiskManagePartnerECTradeRiskResultAsync(this WechatTenpayClient client, Models.CreateMerchantRiskManagePartnerECTradeRiskResultRequest request, CancellationToken cancellationToken = default)
90+
{
91+
if (client is null) throw new ArgumentNullException(nameof(client));
92+
if (request is null) throw new ArgumentNullException(nameof(request));
93+
94+
IFlurlRequest flurlReq = client
95+
.CreateFlurlRequest(request, HttpMethod.Post, "merchant-risk-manage", "ec-trade-risk", "recv-dispose-result");
96+
97+
return await client.SendFlurlRequestAsJsonAsync<Models.CreateMerchantRiskManagePartnerECTradeRiskResultResponse>(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
98+
}
99+
#endregion
100+
11101
#region TradeRisk
12102
/// <summary>
13103
/// <para>异步调用 [POST] /merchant-risk-manage/report-trade-union-information 接口。</para>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
using System.Collections.Generic;
2+
3+
namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
4+
{
5+
/// <summary>
6+
/// <para>表示 [POST] /merchant-risk-manage/ec-trade-risk/recv-dispose-result 接口的请求。</para>
7+
/// </summary>
8+
public class CreateMerchantRiskManageECTradeRiskResultRequest : WechatTenpayRequest
9+
{
10+
/// <summary>
11+
/// 获取或设置微信商户号。
12+
/// </summary>
13+
[Newtonsoft.Json.JsonProperty("mchid")]
14+
[System.Text.Json.Serialization.JsonPropertyName("mchid")]
15+
public string? MerchantId { get; set; }
16+
17+
/// <summary>
18+
/// 获取或设置商户订单号。
19+
/// </summary>
20+
[Newtonsoft.Json.JsonProperty("out_trade_no")]
21+
[System.Text.Json.Serialization.JsonPropertyName("out_trade_no")]
22+
public string OutTradeNumber { get; set; } = string.Empty;
23+
24+
/// <summary>
25+
/// 获取或设置最终风险结论。
26+
/// </summary>
27+
[Newtonsoft.Json.JsonProperty("final_risk_result")]
28+
[System.Text.Json.Serialization.JsonPropertyName("final_risk_result")]
29+
public int? FinalRiskResult { get; set; }
30+
31+
/// <summary>
32+
/// 获取或设置最终风险类型。
33+
/// </summary>
34+
[Newtonsoft.Json.JsonProperty("final_risk_type")]
35+
[System.Text.Json.Serialization.JsonPropertyName("final_risk_type")]
36+
public int? FinalRiskType { get; set; }
37+
38+
/// <summary>
39+
/// 获取或设置处置结论列表。
40+
/// </summary>
41+
[Newtonsoft.Json.JsonProperty("disp_conclusion")]
42+
[System.Text.Json.Serialization.JsonPropertyName("disp_conclusion")]
43+
public IList<int>? DisposeConclusionList { get; set; }
44+
45+
/// <summary>
46+
/// 获取或设置处置补充。
47+
/// </summary>
48+
[Newtonsoft.Json.JsonProperty("disp_addition")]
49+
[System.Text.Json.Serialization.JsonPropertyName("disp_addition")]
50+
public string? DisposeAdditional { get; set; }
51+
52+
/// <summary>
53+
/// 获取或设置是否有投诉。
54+
/// </summary>
55+
[Newtonsoft.Json.JsonProperty("exist_complaint")]
56+
[System.Text.Json.Serialization.JsonPropertyName("exist_complaint")]
57+
public bool? IsComplaintExist { get; set; }
58+
59+
/// <summary>
60+
/// 获取或设置退款金额(单位:分)。
61+
/// </summary>
62+
[Newtonsoft.Json.JsonProperty("refund_amount")]
63+
[System.Text.Json.Serialization.JsonPropertyName("refund_amount")]
64+
public int? RefundAmount { get; set; }
65+
}
66+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
2+
{
3+
/// <summary>
4+
/// <para>表示 [POST] /merchant-risk-manage/ec-trade-risk/recv-dispose-result 接口的响应。</para>
5+
/// </summary>
6+
public class CreateMerchantRiskManageECTradeRiskResultResponse : WechatTenpayResponse
7+
{
8+
/// <summary>
9+
/// 获取或设置返回描述。
10+
/// </summary>
11+
[Newtonsoft.Json.JsonProperty("rsp_msg")]
12+
[System.Text.Json.Serialization.JsonPropertyName("rsp_msg")]
13+
public string? ResponseMessage { get; set; }
14+
}
15+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
using System;
2+
3+
namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
4+
{
5+
/// <summary>
6+
/// <para>表示 [POST] /merchant-risk-manage/ec-trade-risk/query-risk-trades 接口的请求。</para>
7+
/// </summary>
8+
public class QueryMerchantRiskManageECTradeRiskTradesRequest : WechatTenpayRequest
9+
{
10+
/// <summary>
11+
/// 获取或设置微信商户号。
12+
/// </summary>
13+
[Newtonsoft.Json.JsonProperty("mchid")]
14+
[System.Text.Json.Serialization.JsonPropertyName("mchid")]
15+
public string? MerchantId { get; set; }
16+
17+
/// <summary>
18+
/// 获取或设置开始时间。
19+
/// </summary>
20+
[Newtonsoft.Json.JsonProperty("start_time")]
21+
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.Rfc3339DateTimeOffsetConverter))]
22+
[System.Text.Json.Serialization.JsonPropertyName("start_time")]
23+
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.Rfc3339DateTimeOffsetConverter))]
24+
public DateTimeOffset? StartTime { get; set; }
25+
26+
/// <summary>
27+
/// 获取或设置结束时间。
28+
/// </summary>
29+
[Newtonsoft.Json.JsonProperty("end_time")]
30+
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.Rfc3339DateTimeOffsetConverter))]
31+
[System.Text.Json.Serialization.JsonPropertyName("end_time")]
32+
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.Rfc3339DateTimeOffsetConverter))]
33+
public DateTimeOffset? EndTime { get; set; }
34+
35+
/// <summary>
36+
/// 获取或设置分页页数。
37+
/// </summary>
38+
[Newtonsoft.Json.JsonProperty("page_index")]
39+
[System.Text.Json.Serialization.JsonPropertyName("page_index")]
40+
public int? Page { get; set; }
41+
42+
/// <summary>
43+
/// 获取或设置分页大小。
44+
/// </summary>
45+
[Newtonsoft.Json.JsonProperty("page_size")]
46+
[System.Text.Json.Serialization.JsonPropertyName("page_size")]
47+
public int? Limit { get; set; }
48+
}
49+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
using System;
2+
3+
namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
4+
{
5+
/// <summary>
6+
/// <para>表示 [POST] /merchant-risk-manage/ec-trade-risk/query-risk-trades 接口的响应。</para>
7+
/// </summary>
8+
public class QueryMerchantRiskManageECTradeRiskTradesResponse : WechatTenpayResponse
9+
{
10+
public static class Types
11+
{
12+
public class RiskTrade
13+
{
14+
/// <summary>
15+
/// 获取或设置微信商户号。
16+
/// </summary>
17+
[Newtonsoft.Json.JsonProperty("mchid")]
18+
[System.Text.Json.Serialization.JsonPropertyName("mchid")]
19+
public string MerchantId { get; set; } = default!;
20+
21+
/// <summary>
22+
/// 获取或设置商户订单号。
23+
/// </summary>
24+
[Newtonsoft.Json.JsonProperty("out_trade_no")]
25+
[System.Text.Json.Serialization.JsonPropertyName("out_trade_no")]
26+
public string OutTradeNumber { get; set; } = default!;
27+
28+
/// <summary>
29+
/// 获取或设置风险类型。
30+
/// </summary>
31+
[Newtonsoft.Json.JsonProperty("risk_type")]
32+
[System.Text.Json.Serialization.JsonPropertyName("risk_type")]
33+
public int RiskType { get; set; }
34+
35+
/// <summary>
36+
/// 获取或设置风险等级。
37+
/// </summary>
38+
[Newtonsoft.Json.JsonProperty("risk_level")]
39+
[System.Text.Json.Serialization.JsonPropertyName("risk_level")]
40+
public int RiskLevel { get; set; }
41+
42+
/// <summary>
43+
/// 获取或设置风险发现时间。
44+
/// </summary>
45+
[Newtonsoft.Json.JsonProperty("risk_discove_time")]
46+
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.Rfc3339DateTimeOffsetConverter))]
47+
[System.Text.Json.Serialization.JsonPropertyName("risk_discove_time")]
48+
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.Rfc3339DateTimeOffsetConverter))]
49+
public DateTimeOffset RiskDiscoveTime { get; set; }
50+
}
51+
}
52+
53+
/// <summary>
54+
/// 获取或设置总数量。
55+
/// </summary>
56+
[Newtonsoft.Json.JsonProperty("total_num")]
57+
[System.Text.Json.Serialization.JsonPropertyName("total_num")]
58+
public int TotalCount { get; set; }
59+
60+
/// <summary>
61+
/// 获取或设置风险订单列表。
62+
/// </summary>
63+
[Newtonsoft.Json.JsonProperty("risk_trade_list")]
64+
[System.Text.Json.Serialization.JsonPropertyName("risk_trade_list")]
65+
public Types.RiskTrade[] RiskTradeList { get; set; } = default!;
66+
}
67+
}

0 commit comments

Comments
 (0)