diff --git a/docs/WechatTenpayV3/Basic_ModelDefinition.md b/docs/WechatTenpayV3/Basic_ModelDefinition.md
index f84313dd..9f919d93 100644
--- a/docs/WechatTenpayV3/Basic_ModelDefinition.md
+++ b/docs/WechatTenpayV3/Basic_ModelDefinition.md
@@ -998,6 +998,10 @@
- 获取购付汇账单文件下载链接:`GetFundsToOverseaBillDownloadUrl`
+ - 申请资金出境退回:`CreateFundsToOverseaReturnOrder`
+
+ - 查询出境退回结果:`GetFundsToOverseaReturnOrderByOutReturnNumber`
+
- 平台收付通(下载账单)
- 申请交易账单:`GetBillTradeBill`
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecuteFundsToOverseaExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecuteFundsToOverseaExtensions.cs
index ad467a63..086f5920 100644
--- a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecuteFundsToOverseaExtensions.cs
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecuteFundsToOverseaExtensions.cs
@@ -13,7 +13,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3
/// 异步调用 [GET] /funds-to-oversea/transactions/{transaction_id}/available_abroad_amounts 接口。
///
/// REF:
- ///
+ ///
///
///
///
@@ -36,7 +36,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3
/// 异步调用 [POST] /funds-to-oversea/orders 接口。
///
/// REF:
- ///
+ ///
///
///
///
@@ -58,7 +58,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3
/// 异步调用 [GET] /funds-to-oversea/orders/{out_order_id} 接口。
///
/// REF:
- ///
+ ///
///
///
///
@@ -82,7 +82,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3
/// 异步调用 [GET] /funds-to-oversea/bill-download-url 接口。
///
/// REF:
- ///
+ ///
///
///
///
@@ -101,5 +101,51 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3
return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
}
+
+ ///
+ /// 异步调用 [POST] /funds-to-oversea/return/return-orders 接口。
+ ///
+ /// REF:
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteCreateFundsToOverseaReturnOrderAsync(this WechatTenpayClient client, Models.CreateFundsToOverseaReturnOrderRequest 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, "funds-to-oversea", "return", "return-orders");
+
+ return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
+ }
+
+ ///
+ /// 异步调用 [GET] /funds-to-oversea/return/return-orders/out-return-no/{out_return_no} 接口。
+ ///
+ /// REF:
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteGetFundsToOverseaReturnOrderByOutReturnNumberAsync(this WechatTenpayClient client, Models.GetFundsToOverseaReturnOrderByOutReturnNumberRequest 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.Get, "funds-to-oversea", "return", "return-orders", "out-return-no", request.OutReturnNumber)
+ .SetQueryParam("sub_mchid", request.SubMerchantId);
+
+ return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
+ }
+
}
}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/FundsToOversea/CreateFundsToOverseaReturnOrderRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/FundsToOversea/CreateFundsToOverseaReturnOrderRequest.cs
new file mode 100644
index 00000000..6636b8a1
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/FundsToOversea/CreateFundsToOverseaReturnOrderRequest.cs
@@ -0,0 +1,50 @@
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [POST] /funds-to-oversea/return/return-orders 接口的请求。
+ ///
+ public class CreateFundsToOverseaReturnOrderRequest : WechatTenpayRequest
+ {
+ ///
+ /// 获取或设置微信二级商户号。
+ ///
+ [Newtonsoft.Json.JsonProperty("sub_mchid")]
+ [System.Text.Json.Serialization.JsonPropertyName("sub_mchid")]
+ public string SubMerchantId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置商户出境退回单号。
+ ///
+ [Newtonsoft.Json.JsonProperty("out_return_no")]
+ [System.Text.Json.Serialization.JsonPropertyName("out_return_no")]
+ public string OutReturnNumber { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置商户出境单号。
+ ///
+ [Newtonsoft.Json.JsonProperty("out_order_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("out_order_id")]
+ public string OutOrderId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置微信订单号。
+ ///
+ [Newtonsoft.Json.JsonProperty("transaction_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("transaction_id")]
+ public string TransactionId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置微信退款单号。
+ ///
+ [Newtonsoft.Json.JsonProperty("refund_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("refund_id")]
+ public string RefundId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置退回金额(单位:分)。
+ ///
+ [Newtonsoft.Json.JsonProperty("amount")]
+ [System.Text.Json.Serialization.JsonPropertyName("amount")]
+ public int Amount { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/FundsToOversea/CreateFundsToOverseaReturnOrderResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/FundsToOversea/CreateFundsToOverseaReturnOrderResponse.cs
new file mode 100644
index 00000000..de4f02ff
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/FundsToOversea/CreateFundsToOverseaReturnOrderResponse.cs
@@ -0,0 +1,9 @@
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [POST] /funds-to-oversea/return/return-orders 接口的响应。
+ ///
+ public class CreateFundsToOverseaReturnOrderResponse : GetFundsToOverseaReturnOrderByOutReturnNumberResponse
+ {
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/FundsToOversea/GetFundsToOverseaReturnOrderByOutReturnNumberRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/FundsToOversea/GetFundsToOverseaReturnOrderByOutReturnNumberRequest.cs
new file mode 100644
index 00000000..ad8e618b
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/FundsToOversea/GetFundsToOverseaReturnOrderByOutReturnNumberRequest.cs
@@ -0,0 +1,22 @@
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [GET] /funds-to-oversea/return/return-orders/out-return-no/{out_return_no} 接口的请求。
+ ///
+ public class GetFundsToOverseaReturnOrderByOutReturnNumberRequest : WechatTenpayRequest
+ {
+ ///
+ /// 获取或设置微信二级商户号。
+ ///
+ [Newtonsoft.Json.JsonIgnore]
+ [System.Text.Json.Serialization.JsonIgnore]
+ public string SubMerchantId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置商户出境退回单号。
+ ///
+ [Newtonsoft.Json.JsonIgnore]
+ [System.Text.Json.Serialization.JsonIgnore]
+ public string OutReturnNumber { get; set; } = string.Empty;
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/FundsToOversea/GetFundsToOverseaReturnOrderByOutReturnNumberResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/FundsToOversea/GetFundsToOverseaReturnOrderByOutReturnNumberResponse.cs
new file mode 100644
index 00000000..0129ea39
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/FundsToOversea/GetFundsToOverseaReturnOrderByOutReturnNumberResponse.cs
@@ -0,0 +1,91 @@
+using System;
+
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [GET] /funds-to-oversea/return/return-orders/out-return-no/{out_return_no} 接口的响应。
+ ///
+ public class GetFundsToOverseaReturnOrderByOutReturnNumberResponse : WechatTenpayResponse
+ {
+ ///
+ /// 获取或设置微信二级商户号。
+ ///
+ [Newtonsoft.Json.JsonProperty("sub_mchid")]
+ [System.Text.Json.Serialization.JsonPropertyName("sub_mchid")]
+ public string SubMerchantId { get; set; } = default!;
+
+ ///
+ /// 获取或设置商户出境退回单号。
+ ///
+ [Newtonsoft.Json.JsonProperty("out_return_no")]
+ [System.Text.Json.Serialization.JsonPropertyName("out_return_no")]
+ public string OutReturnNumber { get; set; } = default!;
+
+ ///
+ /// 获取或设置微信出境退回单号。
+ ///
+ [Newtonsoft.Json.JsonProperty("return_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("return_id")]
+ public string ReturnId { get; set; } = default!;
+
+ ///
+ /// 获取或设置商户出境单号。
+ ///
+ [Newtonsoft.Json.JsonProperty("out_order_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("out_order_id")]
+ public string OutOrderId { get; set; } = default!;
+
+ ///
+ /// 获取或设置微信订单号。
+ ///
+ [Newtonsoft.Json.JsonProperty("transaction_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("transaction_id")]
+ public string TransactionId { get; set; } = default!;
+
+ ///
+ /// 获取或设置微信退款单号。
+ ///
+ [Newtonsoft.Json.JsonProperty("refund_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("refund_id")]
+ public string RefundId { get; set; } = default!;
+
+ ///
+ /// 获取或设置退回金额(单位:分)。
+ ///
+ [Newtonsoft.Json.JsonProperty("amount")]
+ [System.Text.Json.Serialization.JsonPropertyName("amount")]
+ public int Amount { get; set; }
+
+ ///
+ /// 获取或设置出境退回状态。
+ ///
+ [Newtonsoft.Json.JsonProperty("state")]
+ [System.Text.Json.Serialization.JsonPropertyName("state")]
+ public string State { get; set; } = default!;
+
+ ///
+ /// 获取或设置出境失败原因。
+ ///
+ [Newtonsoft.Json.JsonProperty("fail_reason")]
+ [System.Text.Json.Serialization.JsonPropertyName("fail_reason")]
+ public string? FailReason { get; set; }
+
+ ///
+ /// 获取或设置创建时间。
+ ///
+ [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("success_time")]
+ [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.Rfc3339DateTimeOffsetConverter))]
+ [System.Text.Json.Serialization.JsonPropertyName("success_time")]
+ [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.Rfc3339DateTimeOffsetConverter))]
+ public DateTimeOffset? SuccessTime { get; set; }
+ }
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/FundsToOversea/CreateFundsToOverseaReturnOrderRequest.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/FundsToOversea/CreateFundsToOverseaReturnOrderRequest.json
new file mode 100644
index 00000000..98d05abb
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/FundsToOversea/CreateFundsToOverseaReturnOrderRequest.json
@@ -0,0 +1,8 @@
+{
+ "out_return_no": "R20250220103930",
+ "sub_mchid": "1900000109",
+ "out_order_id": "merchant_1123123",
+ "transaction_id": "420000000000000010",
+ "refund_id": "5017752501201407033233368018",
+ "amount": 100
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/FundsToOversea/CreateFundsToOverseaReturnOrderResponse.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/FundsToOversea/CreateFundsToOverseaReturnOrderResponse.json
new file mode 100644
index 00000000..161a1a6c
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/FundsToOversea/CreateFundsToOverseaReturnOrderResponse.json
@@ -0,0 +1,13 @@
+{
+ "out_return_no": "R20250220103930",
+ "sub_mchid": "1900000109",
+ "return_id": "2375897293812",
+ "out_order_id": "merchant_1123123",
+ "transaction_id": "420000000000000010",
+ "refund_id": "5017752501201407033233368018",
+ "amount": 100,
+ "state": "PROCESSING",
+ "create_time": "2025-02-20T10:29:35+08:00",
+ "success_time": "2025-02-22T10:29:35+08:00",
+ "fail_reason": "RETURN_AMOUNT_NOT_ENOUGH"
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/FundsToOversea/GetFundsToOverseaReturnOrderByOutReturnNumberResponse.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/FundsToOversea/GetFundsToOverseaReturnOrderByOutReturnNumberResponse.json
new file mode 100644
index 00000000..161a1a6c
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/FundsToOversea/GetFundsToOverseaReturnOrderByOutReturnNumberResponse.json
@@ -0,0 +1,13 @@
+{
+ "out_return_no": "R20250220103930",
+ "sub_mchid": "1900000109",
+ "return_id": "2375897293812",
+ "out_order_id": "merchant_1123123",
+ "transaction_id": "420000000000000010",
+ "refund_id": "5017752501201407033233368018",
+ "amount": 100,
+ "state": "PROCESSING",
+ "create_time": "2025-02-20T10:29:35+08:00",
+ "success_time": "2025-02-22T10:29:35+08:00",
+ "fail_reason": "RETURN_AMOUNT_NOT_ENOUGH"
+}