diff --git a/docs/WechatWork/Basic_ModelDefinition.md b/docs/WechatWork/Basic_ModelDefinition.md
index d31d142e..1de60c48 100644
--- a/docs/WechatWork/Basic_ModelDefinition.md
+++ b/docs/WechatWork/Basic_ModelDefinition.md
@@ -26,43 +26,44 @@
[展开查看]
-| | 微信 API | 开发模式 | 备注 |
-| :-: | :-------------------------------: | :-------------------------------: | :----------------------------: |
-| √ | 开发接入 | 企业 & 第三方 & 服务商 & 智慧硬件 | |
-| √ | 基础:通讯录管理 | 企业 & 第三方 & 服务商 | |
-| √ | 基础:身份验证 | 企业 & 第三方 & 服务商 | |
-| √ | 基础:企业互联 | 企业 & 第三方 & 服务商 | |
-| √ | 基础:上下游 | 企业 & 第三方 & 服务商 | |
-| √ | 基础:消息推送 | 企业 & 第三方 & 服务商 | |
-| √ | 基础:应用管理 | 企业 & 第三方 & 服务商 | |
-| √ | 基础:素材管理 | 企业 & 第三方 & 服务商 | |
-| √ | 基础:电子发票 | 企业 & 第三方 & 服务商 | |
-| √ | 基础:应用授权 | 第三方 & 服务商 | |
-| √ | 基础:接口调用许可 | 第三方 & 服务商 | |
-| √ | 基础:收银台 | 第三方 & 服务商 | |
-| √ | 基础:推广二维码 | 第三方 & 服务商 | |
-| √ | 基础:账号 ID | 第三方 & 服务商 | |
-| √ | 连接微信:客户联系 | 企业 & 第三方 & 服务商 | |
-| √ | 连接微信:微信客服 | 企业 & 第三方 & 服务商 | |
-| × | 连接微信:企业支付 | 企业 & 第三方 & 服务商 | 异构协议,请使用 TenpayV2 模块 |
-| × | 连接微信:会话内容存档 | 企业 | 异构协议,需独立模块 |
-| √ | 连接微信:家校沟通 | 企业 & 第三方 & 服务商 | |
-| √ | 连接微信:家校应用 | 企业 & 第三方 & 服务商 | |
-| √ | 连接微信:政民沟通 | 企业 & 第三方 & 服务商 | |
-| √ | 办公:邮件 | 企业 & 第三方 & 服务商 | |
-| √ | 办公:文档 | 企业 & 第三方 & 服务商 | |
-| √ | 办公:日程 | 企业 & 第三方 & 服务商 | |
-| √ | 办公:会议 | 企业 & 第三方 & 服务商 | |
-| √ | 办公:微盘 | 企业 & 第三方 & 服务商 | |
-| √ | 办公:直播 | 企业 & 第三方 & 服务商 | |
-| √ | 办公:公费电话 | 企业 | |
-| √ | 办公:打卡 | 企业 & 第三方 & 服务商 | |
-| √ | 办公:审批 | 企业 & 第三方 & 服务商 | |
-| √ | 办公:汇报 | 企业 | |
-| √ | 办公:人事助手 | 企业 | |
-| √ | 办公:会议室 | 企业 | |
-| √ | 办公:紧急通知 | 企业 | |
-| √ | 智慧硬件 | 第三方 | |
-| √ | 硬件云端接入 | 智慧硬件 | |
+| | 微信 API | 开发模式 | 备注 |
+| :-: | :---------------------------: | :-------------------------------: | :----------------------------: |
+| √ | 开发接入 | 企业 & 第三方 & 服务商 & 智慧硬件 | |
+| √ | 基础:账号 ID | 企业 & 第三方 & 服务商 | |
+| √ | 基础:通讯录管理 | 企业 & 第三方 & 服务商 | |
+| √ | 基础:身份验证 | 企业 & 第三方 & 服务商 | |
+| √ | 基础:企业互联 | 企业 & 第三方 & 服务商 | |
+| √ | 基础:上下游 | 企业 & 第三方 & 服务商 | |
+| √ | 基础:消息推送 | 企业 & 第三方 & 服务商 | |
+| √ | 基础:应用管理 | 企业 & 第三方 & 服务商 | |
+| √ | 基础:素材管理 | 企业 & 第三方 & 服务商 | |
+| √ | 基础:电子发票 | 企业 & 第三方 & 服务商 | |
+| √ | 基础:应用授权 | 第三方 & 服务商 | |
+| √ | 基础:接口调用许可 | 第三方 & 服务商 | |
+| √ | 基础:收银台 | 第三方 & 服务商 | |
+| √ | 基础:推广二维码 | 第三方 & 服务商 | |
+| √ | 连接微信:客户联系 | 企业 & 第三方 & 服务商 | |
+| √ | 连接微信:微信客服 | 企业 & 第三方 & 服务商 | |
+| × | 连接微信:企业支付 | 企业 & 第三方 & 服务商 | 异构协议,请使用 TenpayV2 模块 |
+| √ | 连接微信:小程序接入对外收款 | 企业 | |
+| √ | 连接微信:会话内容存档 | 企业 | |
+| √ | 连接微信:家校沟通 | 企业 & 第三方 & 服务商 | |
+| √ | 连接微信:家校应用 | 企业 & 第三方 & 服务商 | |
+| √ | 连接微信:政民沟通 | 企业 & 第三方 & 服务商 | |
+| √ | 办公:邮件 | 企业 & 第三方 & 服务商 | |
+| √ | 办公:文档 | 企业 & 第三方 & 服务商 | |
+| √ | 办公:日程 | 企业 & 第三方 & 服务商 | |
+| √ | 办公:会议 | 企业 & 第三方 & 服务商 | |
+| √ | 办公:微盘 | 企业 & 第三方 & 服务商 | |
+| √ | 办公:直播 | 企业 & 第三方 & 服务商 | |
+| √ | 办公:公费电话 | 企业 | |
+| √ | 办公:打卡 | 企业 & 第三方 & 服务商 | |
+| √ | 办公:审批 | 企业 & 第三方 & 服务商 | |
+| √ | 办公:汇报 | 企业 | |
+| √ | 办公:人事助手 | 企业 | |
+| √ | 办公:会议室 | 企业 | |
+| √ | 办公:紧急通知 | 企业 | |
+| √ | 智慧硬件 | 第三方 | |
+| √ | 硬件云端接入 | 智慧硬件 | |
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/Refund/GetRefundDomesticRefundByOutRefundNumberResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/Refund/GetRefundDomesticRefundByOutRefundNumberResponse.cs
index bae27fd6..c65057e3 100644
--- a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/Refund/GetRefundDomesticRefundByOutRefundNumberResponse.cs
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/Refund/GetRefundDomesticRefundByOutRefundNumberResponse.cs
@@ -47,11 +47,10 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
///
/// 获取或设置退款币种。
- /// 默认值:CNY
///
[Newtonsoft.Json.JsonProperty("currency")]
[System.Text.Json.Serialization.JsonPropertyName("currency")]
- public string Currency { get; set; } = "CNY";
+ public string Currency { get; set; } = default!;
///
/// 获取或设置用户支付金额(单位:分)。
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Extensions/WechatWorkClientExecuteCgibinMiniAppPayExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Extensions/WechatWorkClientExecuteCgibinMiniAppPayExtensions.cs
index 29c39437..e6895135 100644
--- a/src/SKIT.FlurlHttpClient.Wechat.Work/Extensions/WechatWorkClientExecuteCgibinMiniAppPayExtensions.cs
+++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Extensions/WechatWorkClientExecuteCgibinMiniAppPayExtensions.cs
@@ -36,6 +36,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Work
return await client.SendRequestAsync(flurlReq, httpContent: httpContent, cancellationToken: cancellationToken);
}
+ #region Applyment
///
/// 异步调用 [POST] /cgi-bin/miniapppay/apply_mch 接口。
/// REF: https://developer.work.weixin.qq.com/document/path/98973
@@ -75,5 +76,162 @@ namespace SKIT.FlurlHttpClient.Wechat.Work
return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken);
}
+ #endregion
+
+ #region Bill
+ ///
+ /// 异步调用 [GET] /cgi-bin/miniapppay/get_bill 接口。
+ /// REF: https://developer.work.weixin.qq.com/document/path/98115
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteCgibinMiniAppPayGetBillAsync(this WechatWorkClient client, Models.CgibinMiniAppPayGetBillRequest 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
+ .CreateRequest(request, HttpMethod.Get, "cgi-bin", "miniapppay", "get_bill")
+ .SetQueryParam("access_token", request.AccessToken)
+ .SetQueryParam("mchid", request.MerchantId)
+ .SetQueryParam("bill_date", request.BillDateString)
+ .SetQueryParam("bill_type", request.BillType)
+ .SetQueryParam("tar_type", request.TarType);
+
+ return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken);
+ }
+ #endregion
+
+ #region Order
+ ///
+ /// 异步调用 [POST] /cgi-bin/miniapppay/create_order 接口。
+ /// REF: https://developer.work.weixin.qq.com/document/path/97322
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteCgibinMiniAppPayCreateOrderAsync(this WechatWorkClient client, Models.CgibinMiniAppPayCreateOrderRequest 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
+ .CreateRequest(request, HttpMethod.Post, "cgi-bin", "miniapppay", "create_order")
+ .SetQueryParam("access_token", request.AccessToken);
+
+ return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken);
+ }
+
+ ///
+ /// 异步调用 [POST] /cgi-bin/miniapppay/get_order 接口。
+ /// REF: https://developer.work.weixin.qq.com/document/path/97323
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteCgibinMiniAppPayGetOrderAsync(this WechatWorkClient client, Models.CgibinMiniAppPayGetOrderRequest 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
+ .CreateRequest(request, HttpMethod.Post, "cgi-bin", "miniapppay", "get_order")
+ .SetQueryParam("access_token", request.AccessToken);
+
+ return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken);
+ }
+
+ ///
+ /// 异步调用 [POST] /cgi-bin/miniapppay/close_order 接口。
+ /// REF: https://developer.work.weixin.qq.com/document/path/97324
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteCgibinMiniAppPayCloseOrderAsync(this WechatWorkClient client, Models.CgibinMiniAppPayCloseOrderRequest 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
+ .CreateRequest(request, HttpMethod.Post, "cgi-bin", "miniapppay", "close_order")
+ .SetQueryParam("access_token", request.AccessToken);
+
+ return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken);
+ }
+
+ ///
+ /// 异步调用 [POST] /cgi-bin/miniapppay/get_sign 接口。
+ /// REF: https://developer.work.weixin.qq.com/document/path/98130
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteCgibinMiniAppPayGetSignAsync(this WechatWorkClient client, Models.CgibinMiniAppPayGetSignRequest request, CancellationToken cancellationToken = default)
+ {
+ if (client is null) throw new ArgumentNullException(nameof(client));
+ if (request is null) throw new ArgumentNullException(nameof(request));
+
+ if (request.Nonce == null)
+ request.Nonce = Guid.NewGuid().ToString("N");
+
+ if (request.Timestamp == null)
+ request.Timestamp = DateTimeOffset.Now.ToLocalTime().ToUnixTimeSeconds();
+
+ IFlurlRequest flurlReq = client
+ .CreateRequest(request, HttpMethod.Post, "cgi-bin", "miniapppay", "get_sign")
+ .SetQueryParam("access_token", request.AccessToken);
+
+ return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken);
+ }
+ #endregion
+
+ #region Refund
+ ///
+ /// 异步调用 [POST] /cgi-bin/miniapppay/refund 接口。
+ /// REF: https://developer.work.weixin.qq.com/document/path/97333
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteCgibinMiniAppPayRefundAsync(this WechatWorkClient client, Models.CgibinMiniAppPayRefundRequest 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
+ .CreateRequest(request, HttpMethod.Post, "cgi-bin", "miniapppay", "refund")
+ .SetQueryParam("access_token", request.AccessToken);
+
+ return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken);
+ }
+
+ ///
+ /// 异步调用 [POST] /cgi-bin/miniapppay/get_refund_detail 接口。
+ /// REF: https://developer.work.weixin.qq.com/document/path/97352
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteCgibinMiniAppPayGetRefundDetailAsync(this WechatWorkClient client, Models.CgibinMiniAppPayGetRefundDetailRequest 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
+ .CreateRequest(request, HttpMethod.Post, "cgi-bin", "miniapppay", "get_refund_detail")
+ .SetQueryParam("access_token", request.AccessToken);
+
+ return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken);
+ }
+ #endregion
}
}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinMiniAppPay/CgibinMiniAppPayApplyMechantRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinMiniAppPay/Applyment/CgibinMiniAppPayApplyMechantRequest.cs
similarity index 100%
rename from src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinMiniAppPay/CgibinMiniAppPayApplyMechantRequest.cs
rename to src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinMiniAppPay/Applyment/CgibinMiniAppPayApplyMechantRequest.cs
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinMiniAppPay/CgibinMiniAppPayApplyMechantResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinMiniAppPay/Applyment/CgibinMiniAppPayApplyMechantResponse.cs
similarity index 100%
rename from src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinMiniAppPay/CgibinMiniAppPayApplyMechantResponse.cs
rename to src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinMiniAppPay/Applyment/CgibinMiniAppPayApplyMechantResponse.cs
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinMiniAppPay/CgibinMiniAppPayGetApplymentStatusRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinMiniAppPay/Applyment/CgibinMiniAppPayGetApplymentStatusRequest.cs
similarity index 100%
rename from src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinMiniAppPay/CgibinMiniAppPayGetApplymentStatusRequest.cs
rename to src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinMiniAppPay/Applyment/CgibinMiniAppPayGetApplymentStatusRequest.cs
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinMiniAppPay/CgibinMiniAppPayGetApplymentStatusResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinMiniAppPay/Applyment/CgibinMiniAppPayGetApplymentStatusResponse.cs
similarity index 100%
rename from src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinMiniAppPay/CgibinMiniAppPayGetApplymentStatusResponse.cs
rename to src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinMiniAppPay/Applyment/CgibinMiniAppPayGetApplymentStatusResponse.cs
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinMiniAppPay/Bill/CgibinMiniAppPayGetBillRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinMiniAppPay/Bill/CgibinMiniAppPayGetBillRequest.cs
new file mode 100644
index 00000000..079219c2
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinMiniAppPay/Bill/CgibinMiniAppPayGetBillRequest.cs
@@ -0,0 +1,36 @@
+namespace SKIT.FlurlHttpClient.Wechat.Work.Models
+{
+ ///
+ /// 表示 [GET] /cgi-bin/miniapppay/get_bill 接口的请求。
+ ///
+ public class CgibinMiniAppPayGetBillRequest : WechatWorkRequest
+ {
+ ///
+ /// 获取或设置微信商户号。
+ ///
+ [Newtonsoft.Json.JsonIgnore]
+ [System.Text.Json.Serialization.JsonIgnore]
+ public string MerchantId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置账单日期字符串(格式:yyyy-MM-dd)。
+ ///
+ [Newtonsoft.Json.JsonIgnore]
+ [System.Text.Json.Serialization.JsonIgnore]
+ public string BillDateString { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置账单类型。
+ ///
+ [Newtonsoft.Json.JsonIgnore]
+ [System.Text.Json.Serialization.JsonIgnore]
+ public string? BillType { get; set; }
+
+ ///
+ /// 获取或设置压缩类型。
+ ///
+ [Newtonsoft.Json.JsonIgnore]
+ [System.Text.Json.Serialization.JsonIgnore]
+ public string? TarType { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinMiniAppPay/Bill/CgibinMiniAppPayGetBillResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinMiniAppPay/Bill/CgibinMiniAppPayGetBillResponse.cs
new file mode 100644
index 00000000..362392a7
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinMiniAppPay/Bill/CgibinMiniAppPayGetBillResponse.cs
@@ -0,0 +1,36 @@
+namespace SKIT.FlurlHttpClient.Wechat.Work.Models
+{
+ ///
+ /// 表示 [GET] /cgi-bin/miniapppay/get_bill 接口的响应。
+ ///
+ public class CgibinMiniAppPayGetBillResponse : WechatWorkResponse
+ {
+ ///
+ /// 获取或设置哈希类型。
+ ///
+ [Newtonsoft.Json.JsonProperty("hash_type")]
+ [System.Text.Json.Serialization.JsonPropertyName("hash_type")]
+ public string HashType { get; set; } = default!;
+
+ ///
+ /// 获取或设置哈希值。
+ ///
+ [Newtonsoft.Json.JsonProperty("hash_value")]
+ [System.Text.Json.Serialization.JsonPropertyName("hash_value")]
+ public string HashValue { get; set; } = default!;
+
+ ///
+ /// 获取或设置账单下载地址。
+ ///
+ [Newtonsoft.Json.JsonProperty("download_url")]
+ [System.Text.Json.Serialization.JsonPropertyName("download_url")]
+ public string DownloadUrl { get; set; } = default!;
+
+ ///
+ /// 获取或设置校验头。
+ ///
+ [Newtonsoft.Json.JsonProperty("auth")]
+ [System.Text.Json.Serialization.JsonPropertyName("auth")]
+ public string Authorization { get; set; } = default!;
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinMiniAppPay/Order/CgibinMiniAppPayCloseOrderRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinMiniAppPay/Order/CgibinMiniAppPayCloseOrderRequest.cs
new file mode 100644
index 00000000..80b7af55
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinMiniAppPay/Order/CgibinMiniAppPayCloseOrderRequest.cs
@@ -0,0 +1,22 @@
+namespace SKIT.FlurlHttpClient.Wechat.Work.Models
+{
+ ///
+ /// 表示 [POST] /cgi-bin/miniapppay/close_order 接口的请求。
+ ///
+ public class CgibinMiniAppPayCloseOrderRequest : WechatWorkRequest
+ {
+ ///
+ /// 获取或设置微信商户号。
+ ///
+ [Newtonsoft.Json.JsonProperty("mchid")]
+ [System.Text.Json.Serialization.JsonPropertyName("mchid")]
+ public string MerchantId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置商户订单号。
+ ///
+ [Newtonsoft.Json.JsonProperty("out_trade_no")]
+ [System.Text.Json.Serialization.JsonPropertyName("out_trade_no")]
+ public string OutTradeNumber { get; set; } = string.Empty;
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinMiniAppPay/Order/CgibinMiniAppPayCloseOrderResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinMiniAppPay/Order/CgibinMiniAppPayCloseOrderResponse.cs
new file mode 100644
index 00000000..466a9b4e
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinMiniAppPay/Order/CgibinMiniAppPayCloseOrderResponse.cs
@@ -0,0 +1,9 @@
+namespace SKIT.FlurlHttpClient.Wechat.Work.Models
+{
+ ///
+ /// 表示 [POST] /cgi-bin/miniapppay/close_order 接口的响应。
+ ///
+ public class CgibinMiniAppPayCloseOrderResponse : WechatWorkResponse
+ {
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinMiniAppPay/Order/CgibinMiniAppPayCreateOrderRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinMiniAppPay/Order/CgibinMiniAppPayCreateOrderRequest.cs
new file mode 100644
index 00000000..983a85ed
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinMiniAppPay/Order/CgibinMiniAppPayCreateOrderRequest.cs
@@ -0,0 +1,251 @@
+using System;
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.Work.Models
+{
+ ///
+ /// 表示 [POST] /cgi-bin/miniapppay/create_order 接口的请求。
+ ///
+ public class CgibinMiniAppPayCreateOrderRequest : WechatWorkRequest
+ {
+ public static class Types
+ {
+ public class Amount
+ {
+ ///
+ /// 获取或设置订单总金额(单位:分)。
+ ///
+ [Newtonsoft.Json.JsonProperty("total")]
+ [System.Text.Json.Serialization.JsonPropertyName("total")]
+ public int Total { get; set; }
+
+ ///
+ /// 获取或设置币种。
+ /// 默认值:CNY
+ ///
+ [Newtonsoft.Json.JsonProperty("currency")]
+ [System.Text.Json.Serialization.JsonPropertyName("currency")]
+ public string Currency { get; set; } = "CNY";
+ }
+
+ public class Payer
+ {
+ ///
+ /// 获取或设置用户的 OpenId。
+ ///
+ [Newtonsoft.Json.JsonProperty("openid")]
+ [System.Text.Json.Serialization.JsonPropertyName("openid")]
+ public string OpenId { get; set; } = string.Empty;
+ }
+
+ public class Scene
+ {
+ public static class Types
+ {
+ public class Store
+ {
+ ///
+ /// 获取或设置门店编号。
+ ///
+ [Newtonsoft.Json.JsonProperty("id")]
+ [System.Text.Json.Serialization.JsonPropertyName("id")]
+ public string Id { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置门店名称。
+ ///
+ [Newtonsoft.Json.JsonProperty("name")]
+ [System.Text.Json.Serialization.JsonPropertyName("name")]
+ public string? Name { get; set; }
+
+ ///
+ /// 获取或设置地区编码。
+ ///
+ [Newtonsoft.Json.JsonProperty("area_code")]
+ [System.Text.Json.Serialization.JsonPropertyName("area_code")]
+ public string? AreaCode { get; set; }
+
+ ///
+ /// 获取或设置详细地址。
+ ///
+ [Newtonsoft.Json.JsonProperty("address")]
+ [System.Text.Json.Serialization.JsonPropertyName("address")]
+ public string? Address { get; set; }
+ }
+ }
+
+ ///
+ /// 获取或设置用户终端 IP。
+ ///
+ [Newtonsoft.Json.JsonProperty("payer_client_ip")]
+ [System.Text.Json.Serialization.JsonPropertyName("payer_client_ip")]
+ public string ClientIp { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置商户端设备号。
+ ///
+ [Newtonsoft.Json.JsonProperty("device_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("device_id")]
+ public string? DeviceId { get; set; }
+
+ ///
+ /// 获取或设置商户门店信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("store_info")]
+ [System.Text.Json.Serialization.JsonPropertyName("store_info")]
+ public Types.Store? Store { get; set; }
+ }
+
+ public class Detail
+ {
+ public static class Types
+ {
+ public class GoodsDetail
+ {
+ ///
+ /// 获取或设置商户侧商品编码。
+ ///
+ [Newtonsoft.Json.JsonProperty("merchant_goods_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("merchant_goods_id")]
+ public string MerchantGoodsId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置微信侧商品编码。
+ ///
+ [Newtonsoft.Json.JsonProperty("wechatpay_goods_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("wechatpay_goods_id")]
+ public string? WechatpayGoodsId { get; set; }
+
+ ///
+ /// 获取或设置商品名称。
+ ///
+ [Newtonsoft.Json.JsonProperty("goods_name")]
+ [System.Text.Json.Serialization.JsonPropertyName("goods_name")]
+ public string? GoodsName { get; set; }
+
+ ///
+ /// 获取或设置商品数量。
+ ///
+ [Newtonsoft.Json.JsonProperty("quantity")]
+ [System.Text.Json.Serialization.JsonPropertyName("quantity")]
+ public int Quantity { get; set; }
+
+ ///
+ /// 获取或设置商品单价(单位:分)。
+ ///
+ [Newtonsoft.Json.JsonProperty("unit_price")]
+ [System.Text.Json.Serialization.JsonPropertyName("unit_price")]
+ public int UnitPrice { get; set; }
+ }
+ }
+
+ ///
+ /// 获取或设置订单原价(单位:分)。
+ ///
+ [Newtonsoft.Json.JsonProperty("cost_price")]
+ [System.Text.Json.Serialization.JsonPropertyName("cost_price")]
+ public int? CostPrice { get; set; }
+
+ ///
+ /// 获取或设置商品小票 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("invoice_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("invoice_id")]
+ public string? InvoiceId { get; set; }
+
+ ///
+ /// 获取或设置单品列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("goods_detail")]
+ [System.Text.Json.Serialization.JsonPropertyName("goods_detail")]
+ public List? GoodsList { get; set; }
+ }
+ }
+
+ ///
+ /// 获取或设置微信 AppId。
+ ///
+ [Newtonsoft.Json.JsonProperty("appid")]
+ [System.Text.Json.Serialization.JsonPropertyName("appid")]
+ public string AppId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置微信商户号。
+ ///
+ [Newtonsoft.Json.JsonProperty("mchid")]
+ [System.Text.Json.Serialization.JsonPropertyName("mchid")]
+ public string MerchantId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置商户订单号。
+ ///
+ [Newtonsoft.Json.JsonProperty("out_trade_no")]
+ [System.Text.Json.Serialization.JsonPropertyName("out_trade_no")]
+ public string OutTradeNumber { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置商品描述。
+ ///
+ [Newtonsoft.Json.JsonProperty("description")]
+ [System.Text.Json.Serialization.JsonPropertyName("description")]
+ public string Description { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置下单场景 Key。
+ ///
+ [Newtonsoft.Json.JsonProperty("scenekey")]
+ [System.Text.Json.Serialization.JsonPropertyName("scenekey")]
+ public string? SceneKey { get; set; }
+
+ ///
+ /// 获取或设置订单金额信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("amount")]
+ [System.Text.Json.Serialization.JsonPropertyName("amount")]
+ public Types.Amount Amount { get; set; } = new Types.Amount();
+
+ ///
+ /// 获取或设置支付者信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("payer")]
+ [System.Text.Json.Serialization.JsonPropertyName("payer")]
+ public Types.Payer Payer { get; set; } = new Types.Payer();
+
+ ///
+ /// 获取或设置交易结束时间。
+ ///
+ [Newtonsoft.Json.JsonProperty("time_expire")]
+ [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.RFC3339NullableDateTimeOffsetConverter))]
+ [System.Text.Json.Serialization.JsonPropertyName("time_expire")]
+ [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.RFC3339NullableDateTimeOffsetConverter))]
+ public DateTimeOffset? ExpireTime { get; set; }
+
+ ///
+ /// 获取或设置附加数据。
+ ///
+ [Newtonsoft.Json.JsonProperty("attach")]
+ [System.Text.Json.Serialization.JsonPropertyName("attach")]
+ public string? Attachment { get; set; }
+
+ ///
+ /// 获取或设置订单优惠标记。
+ ///
+ [Newtonsoft.Json.JsonProperty("goods_tag")]
+ [System.Text.Json.Serialization.JsonPropertyName("goods_tag")]
+ public string? GoodsTag { get; set; }
+
+ ///
+ /// 获取或设置场景信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("scene_info")]
+ [System.Text.Json.Serialization.JsonPropertyName("scene_info")]
+ public Types.Scene Scene { get; set; } = new Types.Scene();
+
+ ///
+ /// 获取或设置商品信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("detail")]
+ [System.Text.Json.Serialization.JsonPropertyName("detail")]
+ public Types.Detail? Detail { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinMiniAppPay/Order/CgibinMiniAppPayCreateOrderResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinMiniAppPay/Order/CgibinMiniAppPayCreateOrderResponse.cs
new file mode 100644
index 00000000..ce2cf472
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinMiniAppPay/Order/CgibinMiniAppPayCreateOrderResponse.cs
@@ -0,0 +1,15 @@
+namespace SKIT.FlurlHttpClient.Wechat.Work.Models
+{
+ ///
+ /// 表示 [POST] /cgi-bin/miniapppay/create_order 接口的响应。
+ ///
+ public class CgibinMiniAppPayCreateOrderResponse : WechatWorkResponse
+ {
+ ///
+ /// 获取或设置预支付交易会话标识 。
+ ///
+ [Newtonsoft.Json.JsonProperty("prepay_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("prepay_id")]
+ public string PrepayId { get; set; } = default!;
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinMiniAppPay/Order/CgibinMiniAppPayGetOrderRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinMiniAppPay/Order/CgibinMiniAppPayGetOrderRequest.cs
new file mode 100644
index 00000000..08a48c2a
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinMiniAppPay/Order/CgibinMiniAppPayGetOrderRequest.cs
@@ -0,0 +1,22 @@
+namespace SKIT.FlurlHttpClient.Wechat.Work.Models
+{
+ ///
+ /// 表示 [POST] /cgi-bin/miniapppay/get_order 接口的请求。
+ ///
+ public class CgibinMiniAppPayGetOrderRequest : WechatWorkRequest
+ {
+ ///
+ /// 获取或设置微信商户号。
+ ///
+ [Newtonsoft.Json.JsonProperty("mchid")]
+ [System.Text.Json.Serialization.JsonPropertyName("mchid")]
+ public string MerchantId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置商户订单号。
+ ///
+ [Newtonsoft.Json.JsonProperty("out_trade_no")]
+ [System.Text.Json.Serialization.JsonPropertyName("out_trade_no")]
+ public string OutTradeNumber { get; set; } = string.Empty;
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinMiniAppPay/Order/CgibinMiniAppPayGetOrderResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinMiniAppPay/Order/CgibinMiniAppPayGetOrderResponse.cs
new file mode 100644
index 00000000..ade69297
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinMiniAppPay/Order/CgibinMiniAppPayGetOrderResponse.cs
@@ -0,0 +1,278 @@
+using System;
+
+namespace SKIT.FlurlHttpClient.Wechat.Work.Models
+{
+ ///
+ /// 表示 [POST] /cgi-bin/miniapppay/get_order 接口的响应。
+ ///
+ public class CgibinMiniAppPayGetOrderResponse : WechatWorkResponse
+ {
+ public static class Types
+ {
+ public class Payer
+ {
+ ///
+ /// 获取或设置用户唯一标识。
+ ///
+ [Newtonsoft.Json.JsonProperty("openid")]
+ [System.Text.Json.Serialization.JsonPropertyName("openid")]
+ public string OpenId { get; set; } = default!;
+ }
+
+ public class Amount
+ {
+ ///
+ /// 获取或设置总金额(单位:分)。
+ ///
+ [Newtonsoft.Json.JsonProperty("total")]
+ [System.Text.Json.Serialization.JsonPropertyName("total")]
+ public int Total { get; set; }
+
+ ///
+ /// 获取或设置币种。
+ ///
+ [Newtonsoft.Json.JsonProperty("currency")]
+ [System.Text.Json.Serialization.JsonPropertyName("currency")]
+ public string? Currency { get; set; }
+
+ ///
+ /// 获取或设置用户支付金额(单位:分)。
+ ///
+ [Newtonsoft.Json.JsonProperty("payer_total")]
+ [System.Text.Json.Serialization.JsonPropertyName("payer_total")]
+ public int? PayerTotal { get; set; }
+
+ ///
+ /// 获取或设置用户支付币种。
+ ///
+ [Newtonsoft.Json.JsonProperty("payer_currency")]
+ [System.Text.Json.Serialization.JsonPropertyName("payer_currency")]
+ public string? PayerCurrency { get; set; }
+ }
+
+ public class Scene
+ {
+ ///
+ /// 获取或设置商户端设备号。
+ ///
+ [Newtonsoft.Json.JsonProperty("device_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("device_id")]
+ public string? DeviceId { get; set; }
+ }
+
+ public class Promotion
+ {
+ public static class Types
+ {
+ public class GoodsDetail
+ {
+ ///
+ /// 获取或设置商品编码。
+ ///
+ [Newtonsoft.Json.JsonProperty("goods_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("goods_id")]
+ public string GoodsId { get; set; } = default!;
+
+ ///
+ /// 获取或设置商品数量。
+ ///
+ [Newtonsoft.Json.JsonProperty("quantity")]
+ [System.Text.Json.Serialization.JsonPropertyName("quantity")]
+ public int Quantity { get; set; }
+
+ ///
+ /// 获取或设置商品单价(单位:分)。
+ ///
+ [Newtonsoft.Json.JsonProperty("unit_price")]
+ [System.Text.Json.Serialization.JsonPropertyName("unit_price")]
+ public int UnitPrice { get; set; }
+
+ ///
+ /// 获取或设置商品优惠金额(单位:分)。
+ ///
+ [Newtonsoft.Json.JsonProperty("discount_amount")]
+ [System.Text.Json.Serialization.JsonPropertyName("discount_amount")]
+ public int DiscountAmount { get; set; }
+
+ ///
+ /// 获取或设置商品备注。
+ ///
+ [Newtonsoft.Json.JsonProperty("goods_remark")]
+ [System.Text.Json.Serialization.JsonPropertyName("goods_remark")]
+ public string? GoodsRemark { get; set; }
+ }
+ }
+
+ ///
+ /// 获取或设置券 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("coupon_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("coupon_id")]
+ public string CouponId { get; set; } = default!;
+
+ ///
+ /// 获取或设置优惠名称。
+ ///
+ [Newtonsoft.Json.JsonProperty("name")]
+ [System.Text.Json.Serialization.JsonPropertyName("name")]
+ public string? Name { get; set; }
+
+ ///
+ /// 获取或设置优惠范围。
+ ///
+ [Newtonsoft.Json.JsonProperty("scope")]
+ [System.Text.Json.Serialization.JsonPropertyName("scope")]
+ public string Scope { get; set; } = default!;
+
+ ///
+ /// 获取或设置优惠类型。
+ ///
+ [Newtonsoft.Json.JsonProperty("type")]
+ [System.Text.Json.Serialization.JsonPropertyName("type")]
+ public string Type { get; set; } = default!;
+
+ ///
+ /// 获取或设置优惠券面额(单位:分)。
+ ///
+ [Newtonsoft.Json.JsonProperty("amount")]
+ [System.Text.Json.Serialization.JsonPropertyName("amount")]
+ public int Amount { get; set; }
+
+ ///
+ /// 获取或设置活动 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("stock_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("stock_id")]
+ public string? StockId { get; set; }
+
+ ///
+ /// 获取或设置微信出资(单位:分)。
+ ///
+ [Newtonsoft.Json.JsonProperty("wechatpay_contribute")]
+ [System.Text.Json.Serialization.JsonPropertyName("wechatpay_contribute")]
+ public int? WechatpayContribute { get; set; }
+
+ ///
+ /// 获取或设置商户出资(单位:分)。
+ ///
+ [Newtonsoft.Json.JsonProperty("merchant_contribute")]
+ [System.Text.Json.Serialization.JsonPropertyName("merchant_contribute")]
+ public int? MerchantContribute { get; set; }
+
+ ///
+ /// 获取或设置其他出资(单位:分)。
+ ///
+ [Newtonsoft.Json.JsonProperty("other_contribute")]
+ [System.Text.Json.Serialization.JsonPropertyName("other_contribute")]
+ public int? OtherContribute { get; set; }
+
+ ///
+ /// 获取或设置优惠币种。
+ ///
+ [Newtonsoft.Json.JsonProperty("currency")]
+ [System.Text.Json.Serialization.JsonPropertyName("currency")]
+ public string? Currency { get; set; }
+
+ ///
+ /// 获取或设置单品列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("goods_detail")]
+ [System.Text.Json.Serialization.JsonPropertyName("goods_detail")]
+ public Types.GoodsDetail[]? GoodsList { get; set; }
+ }
+ }
+
+ ///
+ /// 获取或设置微信商户号。
+ ///
+ [Newtonsoft.Json.JsonProperty("mchid")]
+ [System.Text.Json.Serialization.JsonPropertyName("mchid")]
+ public string MerchantId { get; set; } = default!;
+
+ ///
+ /// 获取或设置商户订单号。
+ ///
+ [Newtonsoft.Json.JsonProperty("out_trade_no")]
+ [System.Text.Json.Serialization.JsonPropertyName("out_trade_no")]
+ public string OutTradeNumber { get; set; } = default!;
+
+ ///
+ /// 获取或设置微信支付订单号。
+ ///
+ [Newtonsoft.Json.JsonProperty("transaction_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("transaction_id")]
+ public string? TransactionId { get; set; }
+
+ ///
+ /// 获取或设置交易类型。
+ ///
+ [Newtonsoft.Json.JsonProperty("trade_type")]
+ [System.Text.Json.Serialization.JsonPropertyName("trade_type")]
+ public string TradeType { get; set; } = default!;
+
+ ///
+ /// 获取或设置交易状态。
+ ///
+ [Newtonsoft.Json.JsonProperty("trade_state")]
+ [System.Text.Json.Serialization.JsonPropertyName("trade_state")]
+ public string TradeState { get; set; } = default!;
+
+ ///
+ /// 获取或设置交易状态描述。
+ ///
+ [Newtonsoft.Json.JsonProperty("trade_state_desc")]
+ [System.Text.Json.Serialization.JsonPropertyName("trade_state_desc")]
+ public string TradeStateDescription { get; set; } = default!;
+
+ ///
+ /// 获取或设置付款银行类型。
+ ///
+ [Newtonsoft.Json.JsonProperty("bank_type")]
+ [System.Text.Json.Serialization.JsonPropertyName("bank_type")]
+ public string? BankType { get; set; }
+
+ ///
+ /// 获取或设置附加数据。
+ ///
+ [Newtonsoft.Json.JsonProperty("attach")]
+ [System.Text.Json.Serialization.JsonPropertyName("attach")]
+ public string? Attachment { get; set; }
+
+ ///
+ /// 获取或设置支付完成时间。
+ ///
+ [Newtonsoft.Json.JsonProperty("success_time")]
+ [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.RFC3339NullableDateTimeOffsetConverter))]
+ [System.Text.Json.Serialization.JsonPropertyName("success_time")]
+ [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.RFC3339NullableDateTimeOffsetConverter))]
+ public DateTimeOffset? SuccessTime { get; set; }
+
+ ///
+ /// 获取或设置支付者信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("payer")]
+ [System.Text.Json.Serialization.JsonPropertyName("payer")]
+ public Types.Payer? Payer { get; set; }
+
+ ///
+ /// 获取或设置金额信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("amount")]
+ [System.Text.Json.Serialization.JsonPropertyName("amount")]
+ public Types.Amount Amount { get; set; } = default!;
+
+ ///
+ /// 获取或设置场景信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("scene_info")]
+ [System.Text.Json.Serialization.JsonPropertyName("scene_info")]
+ public Types.Scene? Scene { get; set; }
+
+ ///
+ /// 获取或设置优惠信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("promotion_detail")]
+ [System.Text.Json.Serialization.JsonPropertyName("promotion_detail")]
+ public Types.Promotion[]? PromotionList { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinMiniAppPay/Order/CgibinMiniAppPayGetSignRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinMiniAppPay/Order/CgibinMiniAppPayGetSignRequest.cs
new file mode 100644
index 00000000..49966b11
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinMiniAppPay/Order/CgibinMiniAppPayGetSignRequest.cs
@@ -0,0 +1,44 @@
+namespace SKIT.FlurlHttpClient.Wechat.Work.Models
+{
+ ///
+ /// 表示 [POST] /cgi-bin/miniapppay/get_sign 接口的请求。
+ ///
+ public class CgibinMiniAppPayGetSignRequest : WechatWorkRequest
+ {
+ ///
+ /// 获取或设置微信 AppId。
+ ///
+ [Newtonsoft.Json.JsonProperty("appid")]
+ [System.Text.Json.Serialization.JsonPropertyName("appid")]
+ public string AppId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置预支付交易会话标识 。
+ ///
+ [Newtonsoft.Json.JsonProperty("prepay_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("prepay_id")]
+ public string PrepayId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置签名方式。
+ /// 默认值:RSA
+ ///
+ [Newtonsoft.Json.JsonProperty("sign_type")]
+ [System.Text.Json.Serialization.JsonPropertyName("sign_type")]
+ public string SignType { get; set; } = "RSA";
+
+ ///
+ /// 获取或设置随机字符串。如果不指定将由系统自动生成。
+ ///
+ [Newtonsoft.Json.JsonProperty("nonce")]
+ [System.Text.Json.Serialization.JsonPropertyName("nonce")]
+ public string? Nonce { get; set; }
+
+ ///
+ /// 获取或设置当前时间戳。如果不指定将由系统自动生成。
+ ///
+ [Newtonsoft.Json.JsonProperty("timestamp")]
+ [System.Text.Json.Serialization.JsonPropertyName("timestamp")]
+ public long? Timestamp { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinMiniAppPay/Order/CgibinMiniAppPayGetSignResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinMiniAppPay/Order/CgibinMiniAppPayGetSignResponse.cs
new file mode 100644
index 00000000..f946609a
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinMiniAppPay/Order/CgibinMiniAppPayGetSignResponse.cs
@@ -0,0 +1,15 @@
+namespace SKIT.FlurlHttpClient.Wechat.Work.Models
+{
+ ///
+ /// 表示 [POST] /cgi-bin/miniapppay/get_sign 接口的响应。
+ ///
+ public class CgibinMiniAppPayGetSignResponse : WechatWorkResponse
+ {
+ ///
+ /// 获取或设置签名值。
+ ///
+ [Newtonsoft.Json.JsonProperty("pay_sign")]
+ [System.Text.Json.Serialization.JsonPropertyName("pay_sign")]
+ public string PaySign { get; set; } = default!;
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinMiniAppPay/Refund/CgibinMiniAppPayGetRefundDetailRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinMiniAppPay/Refund/CgibinMiniAppPayGetRefundDetailRequest.cs
new file mode 100644
index 00000000..10f111f0
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinMiniAppPay/Refund/CgibinMiniAppPayGetRefundDetailRequest.cs
@@ -0,0 +1,22 @@
+namespace SKIT.FlurlHttpClient.Wechat.Work.Models
+{
+ ///
+ /// 表示 [POST] /cgi-bin/miniapppay/get_refund_detail 接口的请求。
+ ///
+ public class CgibinMiniAppPayGetRefundDetailRequest : WechatWorkRequest
+ {
+ ///
+ /// 获取或设置微信商户号。
+ ///
+ [Newtonsoft.Json.JsonProperty("mchid")]
+ [System.Text.Json.Serialization.JsonPropertyName("mchid")]
+ public string MerchantId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置商户退款单号。
+ ///
+ [Newtonsoft.Json.JsonProperty("out_refund_no")]
+ [System.Text.Json.Serialization.JsonPropertyName("out_refund_no")]
+ public string OutRefundNumber { get; set; } = string.Empty;
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinMiniAppPay/Refund/CgibinMiniAppPayGetRefundDetailResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinMiniAppPay/Refund/CgibinMiniAppPayGetRefundDetailResponse.cs
new file mode 100644
index 00000000..edd45a4d
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinMiniAppPay/Refund/CgibinMiniAppPayGetRefundDetailResponse.cs
@@ -0,0 +1,163 @@
+using System;
+
+namespace SKIT.FlurlHttpClient.Wechat.Work.Models
+{
+ ///
+ /// 表示 [POST] /cgi-bin/miniapppay/get_refund_detail 接口的响应。
+ ///
+ public class CgibinMiniAppPayGetRefundDetailResponse : WechatWorkResponse
+ {
+ public static class Types
+ {
+ public class Amount
+ {
+ ///
+ /// 获取或设置退款金额(单位:分)。
+ ///
+ [Newtonsoft.Json.JsonProperty("refund")]
+ [System.Text.Json.Serialization.JsonPropertyName("refund")]
+ public int Refund { get; set; }
+
+ ///
+ /// 获取或设置退款币种。
+ ///
+ [Newtonsoft.Json.JsonProperty("currency")]
+ [System.Text.Json.Serialization.JsonPropertyName("currency")]
+ public string Currency { get; set; } = default!;
+
+ ///
+ /// 获取或设置用户退款金额(单位:分)。
+ ///
+ [Newtonsoft.Json.JsonProperty("payer_refund")]
+ [System.Text.Json.Serialization.JsonPropertyName("payer_refund")]
+ public int? PayerRefund { get; set; }
+
+ ///
+ /// 获取或设置优惠退款金额(单位:分)。
+ ///
+ [Newtonsoft.Json.JsonProperty("discount_refund")]
+ [System.Text.Json.Serialization.JsonPropertyName("discount_refund")]
+ public int? DiscountRefund { get; set; }
+ }
+
+ public class Promotion
+ {
+ ///
+ /// 获取或设置券 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("promotion_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("promotion_id")]
+ public string PromotionId { get; set; } = default!;
+
+ ///
+ /// 获取或设置优惠范围。
+ ///
+ [Newtonsoft.Json.JsonProperty("scope")]
+ [System.Text.Json.Serialization.JsonPropertyName("scope")]
+ public string Scope { get; set; } = default!;
+
+ ///
+ /// 获取或设置优惠类型。
+ ///
+ [Newtonsoft.Json.JsonProperty("type")]
+ [System.Text.Json.Serialization.JsonPropertyName("type")]
+ public string Type { get; set; } = default!;
+
+ ///
+ /// 获取或设置优惠券面额(单位:分)。
+ ///
+ [Newtonsoft.Json.JsonProperty("amount")]
+ [System.Text.Json.Serialization.JsonPropertyName("amount")]
+ public int Amount { get; set; }
+
+ ///
+ /// 获取或设置优惠退款金额(单位:分)。
+ ///
+ [Newtonsoft.Json.JsonProperty("refund_amount")]
+ [System.Text.Json.Serialization.JsonPropertyName("refund_amount")]
+ public int RefundAmount { get; set; }
+ }
+ }
+
+ ///
+ /// 获取或设置微信支付退款号。
+ ///
+ [Newtonsoft.Json.JsonProperty("refund_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("refund_id")]
+ public string RefundId { get; set; } = default!;
+
+ ///
+ /// 获取或设置商户退款单号。
+ ///
+ [Newtonsoft.Json.JsonProperty("out_refund_no")]
+ [System.Text.Json.Serialization.JsonPropertyName("out_refund_no")]
+ public string OutRefundNumber { get; set; } = default!;
+
+ ///
+ /// 获取或设置微信支付订单号。
+ ///
+ [Newtonsoft.Json.JsonProperty("transaction_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("transaction_id")]
+ public string TransactionId { get; set; } = default!;
+
+ ///
+ /// 获取或设置商户订单号。
+ ///
+ [Newtonsoft.Json.JsonProperty("out_trade_no")]
+ [System.Text.Json.Serialization.JsonPropertyName("out_trade_no")]
+ public string OutTradeNumber { get; set; } = default!;
+
+ ///
+ /// 获取或设置退款渠道。
+ ///
+ [Newtonsoft.Json.JsonProperty("channel")]
+ [System.Text.Json.Serialization.JsonPropertyName("channel")]
+ public string Channel { get; set; } = default!;
+
+ ///
+ /// 获取或设置退款入账账户。
+ ///
+ [Newtonsoft.Json.JsonProperty("user_received_account")]
+ [System.Text.Json.Serialization.JsonPropertyName("user_received_account")]
+ public string UserReceivedAccount { get; set; } = default!;
+
+ ///
+ /// 获取或设置退款状态。
+ ///
+ [Newtonsoft.Json.JsonProperty("status")]
+ [System.Text.Json.Serialization.JsonPropertyName("status")]
+ public string Status { get; set; } = default!;
+
+ ///
+ /// 获取或设置退款成功时间。
+ ///
+ [Newtonsoft.Json.JsonProperty("success_time")]
+ [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.RFC3339NullableDateTimeOffsetConverter))]
+ [System.Text.Json.Serialization.JsonPropertyName("success_time")]
+ [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.RFC3339NullableDateTimeOffsetConverter))]
+ public DateTimeOffset? SuccessTime { get; set; }
+
+ ///
+ /// 获取或设置退款创建时间。
+ ///
+ [Newtonsoft.Json.JsonProperty("create_time")]
+ [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.RFC3339DateTimeOffsetConverter))]
+ [System.Text.Json.Serialization.JsonPropertyName("create_time")]
+ [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.RFC3339DateTimeOffsetConverter))]
+ public DateTimeOffset CreateTime { get; set; }
+
+ ///
+ /// 获取或设置退款金额信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("amount")]
+ [System.Text.Json.Serialization.JsonPropertyName("amount")]
+ public Types.Amount Amount { get; set; } = default!;
+
+ ///
+ /// 获取或设置优惠退款信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("promotion_detail")]
+ [System.Text.Json.Serialization.JsonPropertyName("promotion_detail")]
+ public Types.Promotion[]? PromotionList { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinMiniAppPay/Refund/CgibinMiniAppPayRefundRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinMiniAppPay/Refund/CgibinMiniAppPayRefundRequest.cs
new file mode 100644
index 00000000..bf8e61ee
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinMiniAppPay/Refund/CgibinMiniAppPayRefundRequest.cs
@@ -0,0 +1,85 @@
+namespace SKIT.FlurlHttpClient.Wechat.Work.Models
+{
+ ///
+ /// 表示 [POST] /cgi-bin/miniapppay/refund 接口的请求。
+ ///
+ public class CgibinMiniAppPayRefundRequest : WechatWorkRequest
+ {
+ public static class Types
+ {
+ public class Amount
+ {
+ ///
+ /// 获取或设置原订单金额(单位:分)。
+ ///
+ [Newtonsoft.Json.JsonProperty("total")]
+ [System.Text.Json.Serialization.JsonPropertyName("total")]
+ public int Total { get; set; }
+
+ ///
+ /// 获取或设置退款金额(单位:分)。
+ ///
+ [Newtonsoft.Json.JsonProperty("refund")]
+ [System.Text.Json.Serialization.JsonPropertyName("refund")]
+ public int Refund { get; set; }
+
+ ///
+ /// 获取或设置退款币种。
+ /// 默认值:CNY
+ ///
+ [Newtonsoft.Json.JsonProperty("currency")]
+ [System.Text.Json.Serialization.JsonPropertyName("currency")]
+ public string Currency { get; set; } = "CNY";
+ }
+ }
+
+ ///
+ /// 获取或设置微信 AppId。
+ ///
+ [Newtonsoft.Json.JsonProperty("appid")]
+ [System.Text.Json.Serialization.JsonPropertyName("appid")]
+ public string AppId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置微信商户号。
+ ///
+ [Newtonsoft.Json.JsonProperty("mchid")]
+ [System.Text.Json.Serialization.JsonPropertyName("mchid")]
+ public string MerchantId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置商户订单号。
+ ///
+ [Newtonsoft.Json.JsonProperty("out_trade_no")]
+ [System.Text.Json.Serialization.JsonPropertyName("out_trade_no")]
+ public string OutTradeNumber { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置商户退款单号。
+ ///
+ [Newtonsoft.Json.JsonProperty("out_refund_no")]
+ [System.Text.Json.Serialization.JsonPropertyName("out_refund_no")]
+ public string OutRefundNumber { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置退款原因。
+ ///
+ [Newtonsoft.Json.JsonProperty("reason")]
+ [System.Text.Json.Serialization.JsonPropertyName("reason")]
+ public string? Reason { get; set; }
+
+ ///
+ /// 获取或设置退款资金来源。
+ ///
+ [Newtonsoft.Json.JsonProperty("funds_account")]
+ [System.Text.Json.Serialization.JsonPropertyName("funds_account")]
+ public string? FundsAccount { get; set; }
+
+ ///
+ /// 获取或设置退款金额信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("amount")]
+ [System.Text.Json.Serialization.JsonPropertyName("amount")]
+ public Types.Amount Amount { get; set; } = new Types.Amount();
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinMiniAppPay/Refund/CgibinMiniAppPayRefundResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinMiniAppPay/Refund/CgibinMiniAppPayRefundResponse.cs
new file mode 100644
index 00000000..6940df20
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinMiniAppPay/Refund/CgibinMiniAppPayRefundResponse.cs
@@ -0,0 +1,40 @@
+namespace SKIT.FlurlHttpClient.Wechat.Work.Models
+{
+ ///
+ /// 表示 [POST] /cgi-bin/miniapppay/refund 接口的响应。
+ ///
+ public class CgibinMiniAppPayRefundResponse : WechatWorkResponse
+ {
+ public static class Types
+ {
+ public class Amount : CgibinMiniAppPayGetRefundDetailResponse.Types.Amount
+ {
+ }
+
+ public class Promotion : CgibinMiniAppPayGetRefundDetailResponse.Types.Promotion
+ {
+ }
+ }
+
+ ///
+ /// 获取或设置商户退款单号。
+ ///
+ [Newtonsoft.Json.JsonProperty("out_refund_no")]
+ [System.Text.Json.Serialization.JsonPropertyName("out_refund_no")]
+ public string OutRefundNumber { get; set; } = default!;
+
+ ///
+ /// 获取或设置退款金额信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("amount")]
+ [System.Text.Json.Serialization.JsonPropertyName("amount")]
+ public Types.Amount Amount { get; set; } = default!;
+
+ ///
+ /// 获取或设置优惠退款信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("promotion_detail")]
+ [System.Text.Json.Serialization.JsonPropertyName("promotion_detail")]
+ public Types.Promotion[]? PromotionList { get; set; }
+ }
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinMiniAppPay/CgibinMiniAppPayApplyMechantRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinMiniAppPay/Applyment/CgibinMiniAppPayApplyMechantRequest.json
similarity index 100%
rename from test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinMiniAppPay/CgibinMiniAppPayApplyMechantRequest.json
rename to test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinMiniAppPay/Applyment/CgibinMiniAppPayApplyMechantRequest.json
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinMiniAppPay/CgibinMiniAppPayApplyMechantResponse.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinMiniAppPay/Applyment/CgibinMiniAppPayApplyMechantResponse.json
similarity index 100%
rename from test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinMiniAppPay/CgibinMiniAppPayApplyMechantResponse.json
rename to test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinMiniAppPay/Applyment/CgibinMiniAppPayApplyMechantResponse.json
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinMiniAppPay/CgibinMiniAppPayGetApplymentStatusRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinMiniAppPay/Applyment/CgibinMiniAppPayGetApplymentStatusRequest.json
similarity index 100%
rename from test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinMiniAppPay/CgibinMiniAppPayGetApplymentStatusRequest.json
rename to test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinMiniAppPay/Applyment/CgibinMiniAppPayGetApplymentStatusRequest.json
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinMiniAppPay/CgibinMiniAppPayGetApplymentStatusResponse.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinMiniAppPay/Applyment/CgibinMiniAppPayGetApplymentStatusResponse.json
similarity index 100%
rename from test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinMiniAppPay/CgibinMiniAppPayGetApplymentStatusResponse.json
rename to test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinMiniAppPay/Applyment/CgibinMiniAppPayGetApplymentStatusResponse.json
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinMiniAppPay/Bill/CgibinMiniAppPayGetBillResponse.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinMiniAppPay/Bill/CgibinMiniAppPayGetBillResponse.json
new file mode 100644
index 00000000..d442a8a4
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinMiniAppPay/Bill/CgibinMiniAppPayGetBillResponse.json
@@ -0,0 +1,6 @@
+{
+ "download_url": "xxx",
+ "hash_type": "xxx",
+ "hash_value": "xxx",
+ "auth": "xxx"
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinMiniAppPay/Order/CgibinMiniAppPayCloseOrderRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinMiniAppPay/Order/CgibinMiniAppPayCloseOrderRequest.json
new file mode 100644
index 00000000..ec085283
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinMiniAppPay/Order/CgibinMiniAppPayCloseOrderRequest.json
@@ -0,0 +1,4 @@
+{
+ "mchid": "xxx",
+ "out_trade_no": "xxx"
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinMiniAppPay/Order/CgibinMiniAppPayCreateOrderRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinMiniAppPay/Order/CgibinMiniAppPayCreateOrderRequest.json
new file mode 100644
index 00000000..0cb8fbdf
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinMiniAppPay/Order/CgibinMiniAppPayCreateOrderRequest.json
@@ -0,0 +1,40 @@
+{
+ "appid": "xx",
+ "mchid": "xx",
+ "out_trade_no": "xxxx",
+ "description": "xxxxx",
+ "scenekey": "xxxx",
+ "amount": {
+ "total": 100,
+ "currency": "CNY"
+ },
+ "payer": {
+ "openid": "xxx"
+ },
+ "time_expire": "2015-05-20T13:29:35+08:00",
+ "attach": "xxxxx",
+ "goods_tag": "xxxxxxx",
+ "scene_info": {
+ "payer_client_ip": "127.0.0.1",
+ "device_id": "xxxxxxx",
+ "store_info": {
+ "id": "xxxx",
+ "name": "xxxx",
+ "area_code": "xxxx",
+ "address": "xxxxx"
+ }
+ },
+ "detail": {
+ "cost_price": 123,
+ "invoice_id": "asdfasdfasdf",
+ "goods_detail": [
+ {
+ "merchant_goods_id": "xxxx",
+ "wechatpay_goods_id": "xxxx",
+ "goods_name": "iPhoneX 256G",
+ "quantity": 1,
+ "unit_price": 828800
+ }
+ ]
+ }
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinMiniAppPay/Order/CgibinMiniAppPayCreateOrderResponse.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinMiniAppPay/Order/CgibinMiniAppPayCreateOrderResponse.json
new file mode 100644
index 00000000..651dee02
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinMiniAppPay/Order/CgibinMiniAppPayCreateOrderResponse.json
@@ -0,0 +1,5 @@
+{
+ "prepay_id": "xxxxxx",
+ "errcode": 0,
+ "errmsg": "ok"
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinMiniAppPay/Order/CgibinMiniAppPayGetOrderRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinMiniAppPay/Order/CgibinMiniAppPayGetOrderRequest.json
new file mode 100644
index 00000000..ec085283
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinMiniAppPay/Order/CgibinMiniAppPayGetOrderRequest.json
@@ -0,0 +1,4 @@
+{
+ "mchid": "xxx",
+ "out_trade_no": "xxx"
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinMiniAppPay/Order/CgibinMiniAppPayGetOrderResponse.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinMiniAppPay/Order/CgibinMiniAppPayGetOrderResponse.json
new file mode 100644
index 00000000..4105020f
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinMiniAppPay/Order/CgibinMiniAppPayGetOrderResponse.json
@@ -0,0 +1,10 @@
+{
+ "mchid": "xxx",
+ "out_trade_no": "xxxx",
+ "trade_state": "xxx",
+ "trade_state_desc": "xxx",
+ "payer": {
+ "openid": "xxxxxx"
+ },
+ "transaction_id": "xxxxxxxx"
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinMiniAppPay/Order/CgibinMiniAppPayGetSignRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinMiniAppPay/Order/CgibinMiniAppPayGetSignRequest.json
new file mode 100644
index 00000000..76cf2670
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinMiniAppPay/Order/CgibinMiniAppPayGetSignRequest.json
@@ -0,0 +1,7 @@
+{
+ "appid": "wx1cce664e7cdcf31a",
+ "prepay_id": "wx111925097328382762a266f5cefb640000",
+ "sign_type": "RSA",
+ "nonce": "fqDdjLywAmNDZleCWfPsfhlInxnwnOLK",
+ "timestamp": 1675219608
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinMiniAppPay/Order/CgibinMiniAppPayGetSignResponse.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinMiniAppPay/Order/CgibinMiniAppPayGetSignResponse.json
new file mode 100644
index 00000000..580053fd
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinMiniAppPay/Order/CgibinMiniAppPayGetSignResponse.json
@@ -0,0 +1,5 @@
+{
+ "pay_sign": "mHIpSqqf1EnBHAOZ5EE3CJRmgHeRcEsfHg0zhOWs+recA6LrHiHZwWT1M6/+ZvzztOkwjnnx8We4n/xX0mNWM5A6eUQYXE9CEgQKVKPIHVXmsheJqPUIiOXXoRaFY7byLzjkQXcGrNG9iDXdhzwCFeQSNXs072uN+2QRoA+mk0pBiY/uPdFXPBPx8nd5FJshrsnzEGmS+nLbyOfJjTH7SkJPCHuxaDPsf24LD5HRT8bjxMzt/92PZY07NQIQhgcCSqpm758xvEnw43iMNsR2ieUNjwkWyQo+SHvDxr2jn/zmT6JmWhtF+ull+jdptfoRPm/oZsPoqGZfHpc2VSrzMA==",
+ "errcode": 0,
+ "errmsg": "ok"
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinMiniAppPay/Refund/CgibinMiniAppPayGetRefundDetailRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinMiniAppPay/Refund/CgibinMiniAppPayGetRefundDetailRequest.json
new file mode 100644
index 00000000..40db9abd
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinMiniAppPay/Refund/CgibinMiniAppPayGetRefundDetailRequest.json
@@ -0,0 +1,4 @@
+{
+ "mchid": "xxx",
+ "out_refund_no": "xxx"
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinMiniAppPay/Refund/CgibinMiniAppPayGetRefundDetailResponse.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinMiniAppPay/Refund/CgibinMiniAppPayGetRefundDetailResponse.json
new file mode 100644
index 00000000..076008c1
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinMiniAppPay/Refund/CgibinMiniAppPayGetRefundDetailResponse.json
@@ -0,0 +1,17 @@
+{
+ "out_refund_no": "1217752501201407033233368018",
+ "out_trade_no": "1217752501201407033233368018",
+ "channel": "ORIGINAL",
+ "user_received_account": "招商银行信用卡0403",
+ "success_time": "2018-06-08T10:34:56+08:00",
+ "create_time": "2018-06-08T10:34:56+08:00",
+ "status": "SUCCESS",
+ "amount": {
+ "refund": 888,
+ "payer_refund": 888,
+ "discount_refund": 888,
+ "currency": "CNY"
+ },
+ "errcode": 0,
+ "errmsg": "ok"
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinMiniAppPay/Refund/CgibinMiniAppPayRefundRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinMiniAppPay/Refund/CgibinMiniAppPayRefundRequest.json
new file mode 100644
index 00000000..fb9a8108
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinMiniAppPay/Refund/CgibinMiniAppPayRefundRequest.json
@@ -0,0 +1,13 @@
+{
+ "mchid": "1900000109",
+ "appid": "wx8888888888888888",
+ "out_trade_no": "1217752501201407033233368018",
+ "out_refund_no": "1217752501201407033233368018",
+ "reason": "商品已售完",
+ "funds_account": "AVAILABLE",
+ "amount": {
+ "refund": 888,
+ "total": 888,
+ "currency": "CNY"
+ }
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinMiniAppPay/Refund/CgibinMiniAppPayRefundResponse.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinMiniAppPay/Refund/CgibinMiniAppPayRefundResponse.json
new file mode 100644
index 00000000..f6bae525
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinMiniAppPay/Refund/CgibinMiniAppPayRefundResponse.json
@@ -0,0 +1,9 @@
+{
+ "out_refund_no": "1217752501201407033233368018",
+ "amount": {
+ "refund": 888,
+ "currency": "CNY"
+ },
+ "errcode": 0,
+ "errmsg": "ok"
+}