diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Events/XPay/XPayRefundNotifyEvent.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Events/XPay/XPayRefundNotifyEvent.cs
new file mode 100644
index 00000000..8c0fed44
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Events/XPay/XPayRefundNotifyEvent.cs
@@ -0,0 +1,105 @@
+namespace SKIT.FlurlHttpClient.Wechat.Api.Events
+{
+ ///
+ /// 表示 EVENT.xpay_refund_notify 事件的数据。
+ /// https://developers.weixin.qq.com/miniprogram/dev/platform-capabilities/industry/virtual-payment.html
+ ///
+ public class XPayRefundNotifyEvent : WechatApiEvent, WechatApiEvent.Serialization.IJsonSerializable, WechatApiEvent.Serialization.IXmlSerializable
+ {
+ ///
+ /// 获取或设置用户 OpenId。
+ ///
+ [Newtonsoft.Json.JsonProperty("OpenId")]
+ [System.Text.Json.Serialization.JsonPropertyName("OpenId")]
+ [System.Xml.Serialization.XmlElement("OpenId")]
+ public string OpenId { get; set; } = default!;
+
+ ///
+ /// 获取或设置商户退款单号。
+ ///
+ [Newtonsoft.Json.JsonProperty("MchRefundId")]
+ [System.Text.Json.Serialization.JsonPropertyName("MchRefundId")]
+ [System.Xml.Serialization.XmlElement("MchRefundId")]
+ public string MerchantRefundId { get; set; } = default!;
+
+ ///
+ /// 获取或设置微信支付退款单号。
+ ///
+ [Newtonsoft.Json.JsonProperty("WxRefundId")]
+ [System.Text.Json.Serialization.JsonPropertyName("WxRefundId")]
+ [System.Xml.Serialization.XmlElement("WxRefundId")]
+ public string WechatpayRefundId { get; set; } = default!;
+
+ ///
+ /// 获取或设置商户订单号。
+ ///
+ [Newtonsoft.Json.JsonProperty("MchOrderId")]
+ [System.Text.Json.Serialization.JsonPropertyName("MchOrderId")]
+ [System.Xml.Serialization.XmlElement("MchOrderId")]
+ public string MerchantOrderId { get; set; } = default!;
+
+ ///
+ /// 获取或设置微信支付订单号。
+ ///
+ [Newtonsoft.Json.JsonProperty("WxOrderId")]
+ [System.Text.Json.Serialization.JsonPropertyName("WxOrderId")]
+ [System.Xml.Serialization.XmlElement("WxOrderId")]
+ public string WechatpayOrderId { get; set; } = default!;
+
+ ///
+ /// 获取或设置退款单的微信支付单号。
+ ///
+ [Newtonsoft.Json.JsonProperty("WxpayRefundTransactionId")]
+ [System.Text.Json.Serialization.JsonPropertyName("WxpayRefundTransactionId")]
+ [System.Xml.Serialization.XmlElement("WxpayRefundTransactionId", IsNullable = true)]
+ public string? WechatpayRefundTransactionId { get; set; }
+
+ ///
+ /// 获取或设置退款金额(单位:分)。
+ ///
+ [Newtonsoft.Json.JsonProperty("RefundFee")]
+ [System.Text.Json.Serialization.JsonPropertyName("RefundFee")]
+ [System.Xml.Serialization.XmlElement("RefundFee")]
+ public int RefundFee { get; set; }
+
+ ///
+ /// 获取或设置退款结果。
+ ///
+ [Newtonsoft.Json.JsonProperty("RetCode")]
+ [System.Text.Json.Serialization.JsonPropertyName("RetCode")]
+ [System.Xml.Serialization.XmlElement("RetCode")]
+ public int ReturnCode { get; set; }
+
+ ///
+ /// 获取或设置退款结果详情。
+ ///
+ [Newtonsoft.Json.JsonProperty("RetMsg")]
+ [System.Text.Json.Serialization.JsonPropertyName("RetMsg")]
+ [System.Xml.Serialization.XmlElement("RetMsg", IsNullable = true)]
+ public string? ReturnMessage { get; set; }
+
+ ///
+ /// 获取或设置开始退款时间戳。
+ ///
+ [Newtonsoft.Json.JsonProperty("RefundStartTimestamp")]
+ [System.Text.Json.Serialization.JsonPropertyName("RefundStartTimestamp")]
+ [System.Xml.Serialization.XmlElement("RefundStartTimestamp")]
+ public long StartTimestamp { get; set; }
+
+ ///
+ /// 获取或设置结束退款时间戳。
+ ///
+ [Newtonsoft.Json.JsonProperty("RefundSuccTimestamp")]
+ [System.Text.Json.Serialization.JsonPropertyName("RefundSuccTimestamp")]
+ [System.Xml.Serialization.XmlElement("RefundSuccTimestamp")]
+ public long? SuccessTimestamp { get; set; }
+
+ ///
+ /// 获取或设置重试次数。
+ ///
+ [Newtonsoft.Json.JsonProperty("RetryTimes")]
+ [System.Text.Json.Serialization.JsonPropertyName("RetryTimes")]
+ [System.Xml.Serialization.XmlElement("RetryTimes")]
+ public int RetryTimes { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Extensions/WechatApiClientExecuteXPayExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Extensions/WechatApiClientExecuteXPayExtensions.cs
index 85821e26..2ac642ec 100644
--- a/src/SKIT.FlurlHttpClient.Wechat.Api/Extensions/WechatApiClientExecuteXPayExtensions.cs
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Extensions/WechatApiClientExecuteXPayExtensions.cs
@@ -360,5 +360,166 @@ namespace SKIT.FlurlHttpClient.Wechat.Api
return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken);
}
+
+ ///
+ /// 异步调用 [POST] /xpay/query_biz_balance 接口。
+ /// REF: https://developers.weixin.qq.com/miniprogram/dev/platform-capabilities/industry/virtual-payment.html#_2-3-%E6%9C%8D%E5%8A%A1%E5%99%A8API
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteXPayQueryBusinessBalanceAsync(this WechatApiClient client, Models.XPayQueryBusinessBalanceRequest request, CancellationToken cancellationToken = default)
+ {
+ if (client is null) throw new ArgumentNullException(nameof(client));
+ if (request is null) throw new ArgumentNullException(nameof(request));
+
+ PreprocessRequest(client, ref request);
+
+ IFlurlRequest flurlReq = client
+ .CreateRequest(request, HttpMethod.Post, "xpay", "query_biz_balance")
+ .SetQueryParam("access_token", request.AccessToken)
+ .SetQueryParam("pay_sig", request.PaySign);
+
+ return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken);
+ }
+
+ ///
+ /// 异步调用 [POST] /xpay/query_transfer_account 接口。
+ /// REF: https://developers.weixin.qq.com/miniprogram/dev/platform-capabilities/industry/virtual-payment.html#_2-3-%E6%9C%8D%E5%8A%A1%E5%99%A8API
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteXPayQueryTransferAccountAsync(this WechatApiClient client, Models.XPayQueryTransferAccountRequest request, CancellationToken cancellationToken = default)
+ {
+ if (client is null) throw new ArgumentNullException(nameof(client));
+ if (request is null) throw new ArgumentNullException(nameof(request));
+
+ PreprocessRequest(client, ref request);
+
+ IFlurlRequest flurlReq = client
+ .CreateRequest(request, HttpMethod.Post, "xpay", "query_transfer_account")
+ .SetQueryParam("access_token", request.AccessToken)
+ .SetQueryParam("pay_sig", request.PaySign);
+
+ return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken);
+ }
+
+ ///
+ /// 异步调用 [POST] /xpay/query_adver_funds 接口。
+ /// REF: https://developers.weixin.qq.com/miniprogram/dev/platform-capabilities/industry/virtual-payment.html#_2-3-%E6%9C%8D%E5%8A%A1%E5%99%A8API
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteXPayQueryAdverFundsAsync(this WechatApiClient client, Models.XPayQueryAdverFundsRequest request, CancellationToken cancellationToken = default)
+ {
+ if (client is null) throw new ArgumentNullException(nameof(client));
+ if (request is null) throw new ArgumentNullException(nameof(request));
+
+ PreprocessRequest(client, ref request);
+
+ IFlurlRequest flurlReq = client
+ .CreateRequest(request, HttpMethod.Post, "xpay", "query_adver_funds")
+ .SetQueryParam("access_token", request.AccessToken)
+ .SetQueryParam("pay_sig", request.PaySign);
+
+ return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken);
+ }
+
+ ///
+ /// 异步调用 [POST] /xpay/create_funds_bill 接口。
+ /// REF: https://developers.weixin.qq.com/miniprogram/dev/platform-capabilities/industry/virtual-payment.html#_2-3-%E6%9C%8D%E5%8A%A1%E5%99%A8API
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteXPayCreateFundsBillAsync(this WechatApiClient client, Models.XPayCreateFundsBillRequest request, CancellationToken cancellationToken = default)
+ {
+ if (client is null) throw new ArgumentNullException(nameof(client));
+ if (request is null) throw new ArgumentNullException(nameof(request));
+
+ PreprocessRequest(client, ref request);
+
+ IFlurlRequest flurlReq = client
+ .CreateRequest(request, HttpMethod.Post, "xpay", "create_funds_bill")
+ .SetQueryParam("access_token", request.AccessToken)
+ .SetQueryParam("pay_sig", request.PaySign);
+
+ return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken);
+ }
+
+ ///
+ /// 异步调用 [POST] /xpay/bind_transfer_accout 接口。
+ /// REF: https://developers.weixin.qq.com/miniprogram/dev/platform-capabilities/industry/virtual-payment.html#_2-3-%E6%9C%8D%E5%8A%A1%E5%99%A8API
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteXPayBindTransferAccountAsync(this WechatApiClient client, Models.XPayBindTransferAccountRequest request, CancellationToken cancellationToken = default)
+ {
+ if (client is null) throw new ArgumentNullException(nameof(client));
+ if (request is null) throw new ArgumentNullException(nameof(request));
+
+ PreprocessRequest(client, ref request);
+
+ IFlurlRequest flurlReq = client
+ .CreateRequest(request, HttpMethod.Post, "xpay", "bind_transfer_accout")
+ .SetQueryParam("access_token", request.AccessToken)
+ .SetQueryParam("pay_sig", request.PaySign);
+
+ return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken);
+ }
+
+ ///
+ /// 异步调用 [POST] /xpay/query_funds_bill 接口。
+ /// REF: https://developers.weixin.qq.com/miniprogram/dev/platform-capabilities/industry/virtual-payment.html#_2-3-%E6%9C%8D%E5%8A%A1%E5%99%A8API
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteXPayQueryFundsListAsync(this WechatApiClient client, Models.XPayQueryFundsListRequest request, CancellationToken cancellationToken = default)
+ {
+ if (client is null) throw new ArgumentNullException(nameof(client));
+ if (request is null) throw new ArgumentNullException(nameof(request));
+
+ PreprocessRequest(client, ref request);
+
+ IFlurlRequest flurlReq = client
+ .CreateRequest(request, HttpMethod.Post, "xpay", "query_funds_bill")
+ .SetQueryParam("access_token", request.AccessToken)
+ .SetQueryParam("pay_sig", request.PaySign);
+
+ return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken);
+ }
+
+ ///
+ /// 异步调用 [POST] /xpay/query_recover_bill 接口。
+ /// REF: https://developers.weixin.qq.com/miniprogram/dev/platform-capabilities/industry/virtual-payment.html#_2-3-%E6%9C%8D%E5%8A%A1%E5%99%A8API
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteXPayQueryRecoverListAsync(this WechatApiClient client, Models.XPayQueryRecoverListRequest request, CancellationToken cancellationToken = default)
+ {
+ if (client is null) throw new ArgumentNullException(nameof(client));
+ if (request is null) throw new ArgumentNullException(nameof(request));
+
+ PreprocessRequest(client, ref request);
+
+ IFlurlRequest flurlReq = client
+ .CreateRequest(request, HttpMethod.Post, "xpay", "query_recover_bill")
+ .SetQueryParam("access_token", request.AccessToken)
+ .SetQueryParam("pay_sig", request.PaySign);
+
+ return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken);
+ }
}
}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/XPay/XPayBindTransferAccountRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/XPay/XPayBindTransferAccountRequest.cs
new file mode 100644
index 00000000..1f6552db
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/XPay/XPayBindTransferAccountRequest.cs
@@ -0,0 +1,27 @@
+namespace SKIT.FlurlHttpClient.Wechat.Api.Models
+{
+ ///
+ /// 表示 [POST] /xpay/bind_transfer_accout 接口的请求。
+ ///
+ public class XPayBindTransferAccountRequest : XPayRequestBase, IInferable
+ {
+ ///
+ /// 获取或设置充值账户 UID。
+ ///
+ [Newtonsoft.Json.JsonProperty("transfer_account_uid")]
+ [System.Text.Json.Serialization.JsonPropertyName("transfer_account_uid")]
+ public int TransferAccountUID { get; set; }
+
+ ///
+ /// 获取或设置充值账户主体名称。
+ ///
+ [Newtonsoft.Json.JsonProperty("transfer_account_org_name")]
+ [System.Text.Json.Serialization.JsonPropertyName("transfer_account_org_name")]
+ public string TransferAccountOrganizationName { get; set; } = string.Empty;
+
+ protected internal override string GetRequestPath()
+ {
+ return "/xpay/bind_transfer_accout";
+ }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/XPay/XPayBindTransferAccountResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/XPay/XPayBindTransferAccountResponse.cs
new file mode 100644
index 00000000..dd9abe87
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/XPay/XPayBindTransferAccountResponse.cs
@@ -0,0 +1,9 @@
+namespace SKIT.FlurlHttpClient.Wechat.Api.Models
+{
+ ///
+ /// 表示 [POST] /xpay/bind_transfer_accout 接口的响应。
+ ///
+ public class XPayBindTransferAccountResponse : WechatApiResponse
+ {
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/XPay/XPayCreateFundsBillRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/XPay/XPayCreateFundsBillRequest.cs
new file mode 100644
index 00000000..f3b3e0eb
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/XPay/XPayCreateFundsBillRequest.cs
@@ -0,0 +1,78 @@
+namespace SKIT.FlurlHttpClient.Wechat.Api.Models
+{
+ ///
+ /// 表示 [POST] /xpay/create_funds_bill 接口的请求。
+ ///
+ public class XPayCreateFundsBillRequest : XPayRequestBase, IInferable
+ {
+ ///
+ /// 获取或设置充值账户 UID。
+ ///
+ [Newtonsoft.Json.JsonProperty("transfer_account_uid")]
+ [System.Text.Json.Serialization.JsonPropertyName("transfer_account_uid")]
+ public int TransferAccountUID { get; set; }
+
+ ///
+ /// 获取或设置充值账户名称。
+ ///
+ [Newtonsoft.Json.JsonProperty("transfer_account_name")]
+ [System.Text.Json.Serialization.JsonPropertyName("transfer_account_name")]
+ public string TransferAccountName { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置充值账户服务商账号 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("transfer_account_agency_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("transfer_account_agency_id")]
+ public int? TransferAccountAgencyId { get; set; }
+
+ ///
+ /// 获取或设置充值金额(单位:分)。
+ ///
+ [Newtonsoft.Json.JsonProperty("transfer_amount")]
+ [System.Text.Json.Serialization.JsonPropertyName("transfer_amount")]
+ public int TransferAmount { get; set; }
+
+ ///
+ /// 获取或设置请求唯一 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("request_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("request_id")]
+ public string RequestId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置结算周期开始时间戳。
+ ///
+ [Newtonsoft.Json.JsonProperty("settle_begin")]
+ [System.Text.Json.Serialization.JsonPropertyName("settle_begin")]
+ public long SettleBeginTimestamp { get; set; }
+
+ ///
+ /// 获取或设置结算周期结束时间戳。
+ ///
+ [Newtonsoft.Json.JsonProperty("settle_end")]
+ [System.Text.Json.Serialization.JsonPropertyName("settle_end")]
+ public long SettleEndTimestamp { get; set; }
+
+ ///
+ /// 获取或设置广告金类型。
+ ///
+ [Newtonsoft.Json.JsonProperty("fund_type")]
+ [System.Text.Json.Serialization.JsonPropertyName("fund_type")]
+ public int FundsType { get; set; }
+
+ ///
+ /// 获取或设置是否授权广告数据。
+ ///
+ [Newtonsoft.Json.JsonProperty("authorize_advertise")]
+ [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.NumericalBooleanConverter))]
+ [System.Text.Json.Serialization.JsonPropertyName("authorize_advertise")]
+ [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.NumericalBooleanConverter))]
+ public bool IsAdvertiseAuthorized { get; set; }
+
+ protected internal override string GetRequestPath()
+ {
+ return "/xpay/create_funds_bill";
+ }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/XPay/XPayCreateFundsBillResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/XPay/XPayCreateFundsBillResponse.cs
new file mode 100644
index 00000000..61deeb38
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/XPay/XPayCreateFundsBillResponse.cs
@@ -0,0 +1,15 @@
+namespace SKIT.FlurlHttpClient.Wechat.Api.Models
+{
+ ///
+ /// 表示 [POST] /xpay/create_funds_bill 接口的响应。
+ ///
+ public class XPayCreateFundsBillResponse : WechatApiResponse
+ {
+ ///
+ /// 获取或设置充值单 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("bill_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("bill_id")]
+ public string BillId { get; set; } = default!;
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/XPay/XPayQueryAdverFundsRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/XPay/XPayQueryAdverFundsRequest.cs
new file mode 100644
index 00000000..5552fb05
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/XPay/XPayQueryAdverFundsRequest.cs
@@ -0,0 +1,63 @@
+namespace SKIT.FlurlHttpClient.Wechat.Api.Models
+{
+ ///
+ /// 表示 [POST] /xpay/query_adver_funds 接口的请求。
+ ///
+ public class XPayQueryAdverFundsRequest : XPayRequestBase, IInferable
+ {
+ public static class Types
+ {
+ public class Filter
+ {
+ ///
+ /// 获取或设置结算周期开始时间戳。
+ ///
+ [Newtonsoft.Json.JsonProperty("settle_begin")]
+ [System.Text.Json.Serialization.JsonPropertyName("settle_begin")]
+ public long SettleBeginTimestamp { get; set; }
+
+ ///
+ /// 获取或设置结算周期结束时间戳。
+ ///
+ [Newtonsoft.Json.JsonProperty("settle_end")]
+ [System.Text.Json.Serialization.JsonPropertyName("settle_end")]
+ public long SettleEndTimestamp { get; set; }
+
+ ///
+ /// 获取或设置广告金类型。
+ ///
+ [Newtonsoft.Json.JsonProperty("fund_type")]
+ [System.Text.Json.Serialization.JsonPropertyName("fund_type")]
+ public int? FundsType { get; set; }
+ }
+ }
+
+ ///
+ /// 获取或设置分页页数。
+ /// 默认值:1
+ ///
+ [Newtonsoft.Json.JsonProperty("page")]
+ [System.Text.Json.Serialization.JsonPropertyName("page")]
+ public int Page { get; set; } = 1;
+
+ ///
+ /// 获取或设置分页每页数量。
+ /// 默认值:10
+ ///
+ [Newtonsoft.Json.JsonProperty("page_size")]
+ [System.Text.Json.Serialization.JsonPropertyName("page_size")]
+ public int Limit { get; set; } = 10;
+
+ ///
+ /// 获取或设置查询过滤条件。
+ ///
+ [Newtonsoft.Json.JsonProperty("filter")]
+ [System.Text.Json.Serialization.JsonPropertyName("filter")]
+ public Types.Filter? Filter { get; set; }
+
+ protected internal override string GetRequestPath()
+ {
+ return "/xpay/query_adver_funds";
+ }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/XPay/XPayQueryAdverFundsResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/XPay/XPayQueryAdverFundsResponse.cs
new file mode 100644
index 00000000..41e5fc47
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/XPay/XPayQueryAdverFundsResponse.cs
@@ -0,0 +1,77 @@
+namespace SKIT.FlurlHttpClient.Wechat.Api.Models
+{
+ ///
+ /// 表示 [POST] /xpay/query_adver_funds 接口的响应。
+ ///
+ public class XPayQueryAdverFundsResponse : WechatApiResponse
+ {
+ public static class Types
+ {
+ public class AdverFund
+ {
+ ///
+ /// 获取或设置广告金发放 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("fund_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("fund_id")]
+ public string FundId { get; set; } = default!;
+
+ ///
+ /// 获取或设置广告金发放类型。
+ ///
+ [Newtonsoft.Json.JsonProperty("fund_type")]
+ [System.Text.Json.Serialization.JsonPropertyName("fund_type")]
+ public int FundType { get; set; }
+
+ ///
+ /// 获取或设置结算周期开始时间戳。
+ ///
+ [Newtonsoft.Json.JsonProperty("settle_begin")]
+ [System.Text.Json.Serialization.JsonPropertyName("settle_begin")]
+ public long SettleBeginTimestamp { get; set; }
+
+ ///
+ /// 获取或设置结算周期结束时间戳。
+ ///
+ [Newtonsoft.Json.JsonProperty("settle_end")]
+ [System.Text.Json.Serialization.JsonPropertyName("settle_end")]
+ public long SettleEndTimestamp { get; set; }
+
+ ///
+ /// 获取或设置发放广告金金额(单位:分)。
+ ///
+ [Newtonsoft.Json.JsonProperty("total_amount")]
+ [System.Text.Json.Serialization.JsonPropertyName("total_amount")]
+ public int TotalAmount { get; set; }
+
+ ///
+ /// 获取或设置剩余可用金金额(单位:分)。
+ ///
+ [Newtonsoft.Json.JsonProperty("remain_amount")]
+ [System.Text.Json.Serialization.JsonPropertyName("remain_amount")]
+ public int RemainAmount { get; set; }
+
+ ///
+ /// 获取或设置过期时间戳。
+ ///
+ [Newtonsoft.Json.JsonProperty("expire_time")]
+ [System.Text.Json.Serialization.JsonPropertyName("expire_time")]
+ public long? ExpireTimestamp { get; set; }
+ }
+ }
+
+ ///
+ /// 获取或设置广告金发放记录列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("adver_funds_list")]
+ [System.Text.Json.Serialization.JsonPropertyName("adver_funds_list")]
+ public Types.AdverFund[] AdverFundList { get; set; } = default!;
+
+ ///
+ /// 获取或设置总页数。
+ ///
+ [Newtonsoft.Json.JsonProperty("total_page")]
+ [System.Text.Json.Serialization.JsonPropertyName("total_page")]
+ public int TotalPage { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/XPay/XPayQueryBusinessBalanceRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/XPay/XPayQueryBusinessBalanceRequest.cs
new file mode 100644
index 00000000..c29d2b06
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/XPay/XPayQueryBusinessBalanceRequest.cs
@@ -0,0 +1,13 @@
+namespace SKIT.FlurlHttpClient.Wechat.Api.Models
+{
+ ///
+ /// 表示 [POST] /xpay/query_biz_balance 接口的请求。
+ ///
+ public class XPayQueryBusinessBalanceRequest : XPayRequestBase, IInferable
+ {
+ protected internal override string GetRequestPath()
+ {
+ return "/xpay/query_biz_balance";
+ }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/XPay/XPayQueryBusinessBalanceResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/XPay/XPayQueryBusinessBalanceResponse.cs
new file mode 100644
index 00000000..5cfe1285
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/XPay/XPayQueryBusinessBalanceResponse.cs
@@ -0,0 +1,36 @@
+namespace SKIT.FlurlHttpClient.Wechat.Api.Models
+{
+ ///
+ /// 表示 [POST] /xpay/query_biz_balance 接口的响应。
+ ///
+ public class XPayQueryBusinessBalanceResponse : WechatApiResponse
+ {
+ public static class Types
+ {
+ public class Balance
+ {
+ ///
+ /// 获取或设置余额(单位:元)。
+ ///
+ [Newtonsoft.Json.JsonProperty("amount")]
+ [System.Text.Json.Serialization.JsonPropertyName("amount")]
+ [System.Text.Json.Serialization.JsonNumberHandling(System.Text.Json.Serialization.JsonNumberHandling.AllowReadingFromString)]
+ public decimal Amount { get; set; }
+
+ ///
+ /// 获取或设置币种。
+ ///
+ [Newtonsoft.Json.JsonProperty("currency_code")]
+ [System.Text.Json.Serialization.JsonPropertyName("currency_code")]
+ public string Currency { get; set; } = default!;
+ }
+ }
+
+ ///
+ /// 获取或设置可提现余额信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("balance_available")]
+ [System.Text.Json.Serialization.JsonPropertyName("balance_available")]
+ public Types.Balance AvailableBalance { get; set; } = default!;
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/XPay/XPayQueryFundsListRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/XPay/XPayQueryFundsListRequest.cs
new file mode 100644
index 00000000..eb3d5ad4
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/XPay/XPayQueryFundsListRequest.cs
@@ -0,0 +1,63 @@
+namespace SKIT.FlurlHttpClient.Wechat.Api.Models
+{
+ ///
+ /// 表示 [POST] /xpay/query_funds_bill 接口的请求。
+ ///
+ public class XPayQueryFundsListRequest : XPayRequestBase, IInferable
+ {
+ public static class Types
+ {
+ public class Filter
+ {
+ ///
+ /// 获取或设置充值开始时间戳。
+ ///
+ [Newtonsoft.Json.JsonProperty("oper_time_begin")]
+ [System.Text.Json.Serialization.JsonPropertyName("oper_time_begin")]
+ public long? OperateBeginTimestamp { get; set; }
+
+ ///
+ /// 获取或设置充值结束时间戳。
+ ///
+ [Newtonsoft.Json.JsonProperty("oper_time_end")]
+ [System.Text.Json.Serialization.JsonPropertyName("oper_time_end")]
+ public long? OperateEndTimestamp { get; set; }
+
+ ///
+ /// 获取或设置广告金充值单 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("bill_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("bill_id")]
+ public string? BillId { get; set; }
+ }
+ }
+
+ ///
+ /// 获取或设置分页页数。
+ /// 默认值:1
+ ///
+ [Newtonsoft.Json.JsonProperty("page")]
+ [System.Text.Json.Serialization.JsonPropertyName("page")]
+ public int Page { get; set; } = 1;
+
+ ///
+ /// 获取或设置分页每页数量。
+ /// 默认值:10
+ ///
+ [Newtonsoft.Json.JsonProperty("page_size")]
+ [System.Text.Json.Serialization.JsonPropertyName("page_size")]
+ public int Limit { get; set; } = 10;
+
+ ///
+ /// 获取或设置查询过滤条件。
+ ///
+ [Newtonsoft.Json.JsonProperty("filter")]
+ [System.Text.Json.Serialization.JsonPropertyName("filter")]
+ public Types.Filter? Filter { get; set; }
+
+ protected internal override string GetRequestPath()
+ {
+ return "/xpay/query_funds_bill";
+ }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/XPay/XPayQueryFundsListResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/XPay/XPayQueryFundsListResponse.cs
new file mode 100644
index 00000000..dbdfb792
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/XPay/XPayQueryFundsListResponse.cs
@@ -0,0 +1,91 @@
+namespace SKIT.FlurlHttpClient.Wechat.Api.Models
+{
+ ///
+ /// 表示 [POST] /xpay/query_funds_bill 接口的响应。
+ ///
+ public class XPayQueryFundsListResponse : WechatApiResponse
+ {
+ public static class Types
+ {
+ public class Bill
+ {
+ ///
+ /// 获取或设置充值单 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("bill_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("bill_id")]
+ public string BillId { get; set; } = default!;
+
+ ///
+ /// 获取或设置充值时间。
+ ///
+ [Newtonsoft.Json.JsonProperty("oper_time")]
+ [System.Text.Json.Serialization.JsonPropertyName("oper_time")]
+ public long OperateTimestamp { get; set; }
+
+ ///
+ /// 获取或设置对应广告金 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("fund_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("fund_id")]
+ public string FundId { get; set; } = default!;
+
+ ///
+ /// 获取或设置结算周期开始时间戳。
+ ///
+ [Newtonsoft.Json.JsonProperty("settle_begin")]
+ [System.Text.Json.Serialization.JsonPropertyName("settle_begin")]
+ public long SettleBeginTimestamp { get; set; }
+
+ ///
+ /// 获取或设置结算周期结束时间戳。
+ ///
+ [Newtonsoft.Json.JsonProperty("settle_end")]
+ [System.Text.Json.Serialization.JsonPropertyName("settle_end")]
+ public long SettleEndTimestamp { get; set; }
+
+ ///
+ /// 获取或设置充值账户 UID。
+ ///
+ [Newtonsoft.Json.JsonProperty("transfer_account_uid")]
+ [System.Text.Json.Serialization.JsonPropertyName("transfer_account_uid")]
+ public int TransferAccountUID { get; set; }
+
+ ///
+ /// 获取或设置充值账户名称。
+ ///
+ [Newtonsoft.Json.JsonProperty("transfer_account_name")]
+ [System.Text.Json.Serialization.JsonPropertyName("transfer_account_name")]
+ public string TransferAccountName { get; set; } = default!;
+
+ ///
+ /// 获取或设置充值金额(单位:分)。
+ ///
+ [Newtonsoft.Json.JsonProperty("transfer_amount")]
+ [System.Text.Json.Serialization.JsonPropertyName("transfer_amount")]
+ public int RransferAmount { get; set; }
+
+ ///
+ /// 获取或设置充值状态。
+ ///
+ [Newtonsoft.Json.JsonProperty("status")]
+ [System.Text.Json.Serialization.JsonPropertyName("status")]
+ public int Status { get; set; }
+ }
+ }
+
+ ///
+ /// 获取或设置广告金充值记录列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("bill_list")]
+ [System.Text.Json.Serialization.JsonPropertyName("bill_list")]
+ public Types.Bill[] BillList { get; set; } = default!;
+
+ ///
+ /// 获取或设置总页数。
+ ///
+ [Newtonsoft.Json.JsonProperty("total_page")]
+ [System.Text.Json.Serialization.JsonPropertyName("total_page")]
+ public int TotalPage { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/XPay/XPayQueryOrderResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/XPay/XPayQueryOrderResponse.cs
index 795af64f..179488af 100644
--- a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/XPay/XPayQueryOrderResponse.cs
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/XPay/XPayQueryOrderResponse.cs
@@ -141,6 +141,20 @@ namespace SKIT.FlurlHttpClient.Wechat.Api.Models
[Newtonsoft.Json.JsonProperty("wxpay_order_id")]
[System.Text.Json.Serialization.JsonPropertyName("wxpay_order_id")]
public string? TransactionId { get; set; }
+
+ ///
+ /// 获取或设置结算状态。
+ ///
+ [Newtonsoft.Json.JsonProperty("sett_state")]
+ [System.Text.Json.Serialization.JsonPropertyName("sett_state")]
+ public long SettleState { get; set; }
+
+ ///
+ /// 获取或设置结算时间戳。
+ ///
+ [Newtonsoft.Json.JsonProperty("sett_time")]
+ [System.Text.Json.Serialization.JsonPropertyName("sett_time")]
+ public long SettleTimestamp { get; set; }
}
}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/XPay/XPayQueryRecoverListRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/XPay/XPayQueryRecoverListRequest.cs
new file mode 100644
index 00000000..daad756e
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/XPay/XPayQueryRecoverListRequest.cs
@@ -0,0 +1,63 @@
+namespace SKIT.FlurlHttpClient.Wechat.Api.Models
+{
+ ///
+ /// 表示 [POST] /xpay/query_recover_bill 接口的请求。
+ ///
+ public class XPayQueryRecoverListRequest : XPayRequestBase, IInferable
+ {
+ public static class Types
+ {
+ public class Filter
+ {
+ ///
+ /// 获取或设置回收开始时间戳。
+ ///
+ [Newtonsoft.Json.JsonProperty("recover_time_begin")]
+ [System.Text.Json.Serialization.JsonPropertyName("recover_time_begin")]
+ public long? RecoverBeginTimestamp { get; set; }
+
+ ///
+ /// 获取或设置回收结束时间戳。
+ ///
+ [Newtonsoft.Json.JsonProperty("recover_time_end")]
+ [System.Text.Json.Serialization.JsonPropertyName("recover_time_end")]
+ public long? RecoverEndTimestamp { get; set; }
+
+ ///
+ /// 获取或设置广告金充值单 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("bill_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("bill_id")]
+ public string? BillId { get; set; }
+ }
+ }
+
+ ///
+ /// 获取或设置分页页数。
+ /// 默认值:1
+ ///
+ [Newtonsoft.Json.JsonProperty("page")]
+ [System.Text.Json.Serialization.JsonPropertyName("page")]
+ public int Page { get; set; } = 1;
+
+ ///
+ /// 获取或设置分页每页数量。
+ /// 默认值:10
+ ///
+ [Newtonsoft.Json.JsonProperty("page_size")]
+ [System.Text.Json.Serialization.JsonPropertyName("page_size")]
+ public int Limit { get; set; } = 10;
+
+ ///
+ /// 获取或设置查询过滤条件。
+ ///
+ [Newtonsoft.Json.JsonProperty("filter")]
+ [System.Text.Json.Serialization.JsonPropertyName("filter")]
+ public Types.Filter? Filter { get; set; }
+
+ protected internal override string GetRequestPath()
+ {
+ return "/xpay/query_recover_bill";
+ }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/XPay/XPayQueryRecoverListResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/XPay/XPayQueryRecoverListResponse.cs
new file mode 100644
index 00000000..68c08a4f
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/XPay/XPayQueryRecoverListResponse.cs
@@ -0,0 +1,84 @@
+namespace SKIT.FlurlHttpClient.Wechat.Api.Models
+{
+ ///
+ /// 表示 [POST] /xpay/query_recover_bill 接口的响应。
+ ///
+ public class XPayQueryRecoverListResponse : WechatApiResponse
+ {
+ public static class Types
+ {
+ public class Bill
+ {
+ ///
+ /// 获取或设置回收单 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("bill_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("bill_id")]
+ public string BillId { get; set; } = default!;
+
+ ///
+ /// 获取或设置回收时间。
+ ///
+ [Newtonsoft.Json.JsonProperty("recover_time")]
+ [System.Text.Json.Serialization.JsonPropertyName("recover_time")]
+ public long RecoverTimestamp { get; set; }
+
+ ///
+ /// 获取或设置对应广告金 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("fund_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("fund_id")]
+ public string FundId { get; set; } = default!;
+
+ ///
+ /// 获取或设置结算周期开始时间戳。
+ ///
+ [Newtonsoft.Json.JsonProperty("settle_begin")]
+ [System.Text.Json.Serialization.JsonPropertyName("settle_begin")]
+ public long SettleBeginTimestamp { get; set; }
+
+ ///
+ /// 获取或设置结算周期结束时间戳。
+ ///
+ [Newtonsoft.Json.JsonProperty("settle_end")]
+ [System.Text.Json.Serialization.JsonPropertyName("settle_end")]
+ public long SettleEndTimestamp { get; set; }
+
+ ///
+ /// 获取或设置回收账户名称。
+ ///
+ [Newtonsoft.Json.JsonProperty("recover_account_name")]
+ [System.Text.Json.Serialization.JsonPropertyName("recover_account_name")]
+ public string TransferAccountName { get; set; } = default!;
+
+ ///
+ /// 获取或设置回收金额(单位:分)。
+ ///
+ [Newtonsoft.Json.JsonProperty("recover_amount")]
+ [System.Text.Json.Serialization.JsonPropertyName("recover_amount")]
+ public int RecoverAmount { get; set; }
+
+ ///
+ /// 获取或设置对应的退款订单 ID 列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("refund_order_list")]
+ [System.Text.Json.Serialization.JsonPropertyName("refund_order_list")]
+ public string[]? RefundOrderIdList { get; set; }
+ }
+ }
+
+ ///
+ /// 获取或设置广告金回收记录列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("bill_list")]
+ [System.Text.Json.Serialization.JsonPropertyName("bill_list")]
+ public Types.Bill[] BillList { get; set; } = default!;
+
+ ///
+ /// 获取或设置总页数。
+ ///
+ [Newtonsoft.Json.JsonProperty("total_page")]
+ [System.Text.Json.Serialization.JsonPropertyName("total_page")]
+ public int TotalPage { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/XPay/XPayQueryTransferAccountRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/XPay/XPayQueryTransferAccountRequest.cs
new file mode 100644
index 00000000..2d96fa32
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/XPay/XPayQueryTransferAccountRequest.cs
@@ -0,0 +1,13 @@
+namespace SKIT.FlurlHttpClient.Wechat.Api.Models
+{
+ ///
+ /// 表示 [POST] /xpay/query_transfer_account 接口的请求。
+ ///
+ public class XPayQueryTransferAccountRequest : XPayRequestBase, IInferable
+ {
+ protected internal override string GetRequestPath()
+ {
+ return "/xpay/query_transfer_account";
+ }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/XPay/XPayQueryTransferAccountResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/XPay/XPayQueryTransferAccountResponse.cs
new file mode 100644
index 00000000..b0bdd178
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/XPay/XPayQueryTransferAccountResponse.cs
@@ -0,0 +1,49 @@
+namespace SKIT.FlurlHttpClient.Wechat.Api.Models
+{
+ ///
+ /// 表示 [POST] /xpay/query_transfer_account 接口的响应。
+ ///
+ public class XPayQueryTransferAccountResponse : WechatApiResponse
+ {
+ public static class Types
+ {
+ public class Account
+ {
+ ///
+ /// 获取或设置充值账户 UID。
+ ///
+ [Newtonsoft.Json.JsonProperty("transfer_account_uid")]
+ [System.Text.Json.Serialization.JsonPropertyName("transfer_account_uid")]
+ public int TransferAccountUID { get; set; }
+
+ ///
+ /// 获取或设置充值账户名称。
+ ///
+ [Newtonsoft.Json.JsonProperty("transfer_account_name")]
+ [System.Text.Json.Serialization.JsonPropertyName("transfer_account_name")]
+ public string TransferAccountName { get; set; } = default!;
+
+ ///
+ /// 获取或设置充值账户服务商账号 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("transfer_account_agency_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("transfer_account_agency_id")]
+ public int? TransferAccountAgencyId { get; set; }
+
+ ///
+ /// 获取或设置充值账户服务商账号名称。
+ ///
+ [Newtonsoft.Json.JsonProperty("transfer_account_agency_name")]
+ [System.Text.Json.Serialization.JsonPropertyName("transfer_account_agency_name")]
+ public string? TransferAccountAgencyName { get; set; }
+ }
+ }
+
+ ///
+ /// 获取或设置广告金充值账户列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("acct_list")]
+ [System.Text.Json.Serialization.JsonPropertyName("acct_list")]
+ public Types.Account[] AccountList { get; set; } = default!;
+ }
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/XPay/XPayBindTransferAccountRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/XPay/XPayBindTransferAccountRequest.json
new file mode 100644
index 00000000..287fe600
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/XPay/XPayBindTransferAccountRequest.json
@@ -0,0 +1,5 @@
+{
+ "transfer_account_uid": 0,
+ "transfer_account_org_name": "",
+ "env": 1
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/XPay/XPayCreateFundsBillRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/XPay/XPayCreateFundsBillRequest.json
new file mode 100644
index 00000000..22d37367
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/XPay/XPayCreateFundsBillRequest.json
@@ -0,0 +1,12 @@
+{
+ "transfer_amount": 0,
+ "transfer_account_uid": 0,
+ "transfer_account_name": "",
+ "transfer_account_agency_id": 0,
+ "request_id": "",
+ "settle_begin": 0,
+ "settle_end": 0,
+ "env": 1,
+ "authorize_advertise": 0,
+ "fund_type": 0
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/XPay/XPayCreateFundsBillResponse.json b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/XPay/XPayCreateFundsBillResponse.json
new file mode 100644
index 00000000..63928b57
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/XPay/XPayCreateFundsBillResponse.json
@@ -0,0 +1,5 @@
+{
+ "errcode": 0,
+ "errmsg": "ok",
+ "bill_id": ""
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/XPay/XPayQueryAdverFundsRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/XPay/XPayQueryAdverFundsRequest.json
new file mode 100644
index 00000000..ab5e4335
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/XPay/XPayQueryAdverFundsRequest.json
@@ -0,0 +1,10 @@
+{
+ "page": 0,
+ "page_size": 0,
+ "filter": {
+ "settle_begin": 0,
+ "settle_end": 0,
+ "fund_type": 0
+ },
+ "env": 1
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/XPay/XPayQueryAdverFundsResponse.json b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/XPay/XPayQueryAdverFundsResponse.json
new file mode 100644
index 00000000..50c9f0ff
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/XPay/XPayQueryAdverFundsResponse.json
@@ -0,0 +1,16 @@
+{
+ "errcode": 0,
+ "errmsg": "ok",
+ "adver_funds_list": [
+ {
+ "settle_begin": 0,
+ "settle_end": 0,
+ "total_amount": 0,
+ "remain_amount": 0,
+ "expire_time": 0,
+ "fund_type": 0,
+ "fund_id": ""
+ }
+ ],
+ "total_page": 0
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/XPay/XPayQueryBusinessBalanceRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/XPay/XPayQueryBusinessBalanceRequest.json
new file mode 100644
index 00000000..7848df61
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/XPay/XPayQueryBusinessBalanceRequest.json
@@ -0,0 +1,3 @@
+{
+ "env": 1
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/XPay/XPayQueryBusinessBalanceResponse.json b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/XPay/XPayQueryBusinessBalanceResponse.json
new file mode 100644
index 00000000..cee4e889
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/XPay/XPayQueryBusinessBalanceResponse.json
@@ -0,0 +1,8 @@
+{
+ "errcode": 0,
+ "errmsg": "ok",
+ "balance_available": {
+ "amount": 1,
+ "currency_code": "CNY"
+ }
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/XPay/XPayQueryFundsListRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/XPay/XPayQueryFundsListRequest.json
new file mode 100644
index 00000000..feb2bfa2
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/XPay/XPayQueryFundsListRequest.json
@@ -0,0 +1,10 @@
+{
+ "page": 0,
+ "page_size": 0,
+ "filter": {
+ "oper_time_begin": 0,
+ "oper_time_end": 0,
+ "bill_id": ""
+ },
+ "env": 1
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/XPay/XPayQueryFundsListResponse.json b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/XPay/XPayQueryFundsListResponse.json
new file mode 100644
index 00000000..526c14e4
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/XPay/XPayQueryFundsListResponse.json
@@ -0,0 +1,18 @@
+{
+ "errcode": 0,
+ "errmsg": "ok",
+ "total_page": 0,
+ "bill_list": [
+ {
+ "bill_id": "",
+ "oper_time": 0,
+ "settle_begin": 0,
+ "settle_end": 0,
+ "fund_id": "",
+ "transfer_account_name": "",
+ "transfer_account_uid": 0,
+ "transfer_amount": 0,
+ "status": 0
+ }
+ ]
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/XPay/XPayQueryRecoverListRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/XPay/XPayQueryRecoverListRequest.json
new file mode 100644
index 00000000..b6e0f2ae
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/XPay/XPayQueryRecoverListRequest.json
@@ -0,0 +1,10 @@
+{
+ "page": 0,
+ "page_size": 0,
+ "filter": {
+ "recover_time_begin": 0,
+ "recover_time_end": 0,
+ "bill_id": ""
+ },
+ "env": 1
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/XPay/XPayQueryRecoverListResponse.json b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/XPay/XPayQueryRecoverListResponse.json
new file mode 100644
index 00000000..7e4ea113
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/XPay/XPayQueryRecoverListResponse.json
@@ -0,0 +1,17 @@
+{
+ "errcode": 0,
+ "errmsg": "ok",
+ "total_page": 0,
+ "bill_list": [
+ {
+ "bill_id": "",
+ "recover_time": 0,
+ "settle_begin": 0,
+ "settle_end": 0,
+ "fund_id": "",
+ "recover_account_name": "",
+ "recover_amount": 0,
+ "refund_order_list": [""]
+ }
+ ]
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/XPay/XPayQueryTransferAccountRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/XPay/XPayQueryTransferAccountRequest.json
new file mode 100644
index 00000000..7848df61
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/XPay/XPayQueryTransferAccountRequest.json
@@ -0,0 +1,3 @@
+{
+ "env": 1
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/XPay/XPayQueryTransferAccountResponse.json b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/XPay/XPayQueryTransferAccountResponse.json
new file mode 100644
index 00000000..0bb08383
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/XPay/XPayQueryTransferAccountResponse.json
@@ -0,0 +1,12 @@
+{
+ "errcode": 0,
+ "errmsg": "ok",
+ "acct_list": [
+ {
+ "transfer_account_name": "",
+ "transfer_account_uid": 0,
+ "transfer_account_agency_id": 0,
+ "transfer_account_agency_name": ""
+ }
+ ]
+}