diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecutePasswordExemptContractExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecutePasswordExemptContractExtensions.cs new file mode 100644 index 00000000..5f3d1aa3 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecutePasswordExemptContractExtensions.cs @@ -0,0 +1,143 @@ +using System; +using System.Net.Http; +using System.Threading; +using System.Threading.Tasks; +using Flurl.Http; + +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3 +{ + public static class WechatTenpayClientExecutePasswordExemptContractExtensions + { + /// + /// 异步调用 [POST] /password-exempt-contract/contracts/qs/pre-entrust-sign/mini-program 接口。 + /// + /// REF:
+ /// + ///
+ ///
+ /// + /// + /// + /// + public static async Task ExecutePresignPasswordExemptContractQsEntrustMiniProgramAsync(this WechatTenpayClient client, Models.PresignPasswordExemptContractQsEntrustMiniProgramRequest request, CancellationToken cancellationToken = default) + { + if (client is null) throw new ArgumentNullException(nameof(client)); + if (request is null) throw new ArgumentNullException(nameof(request)); + + IFlurlRequest flurlReq = client + .CreateFlurlRequest(request, HttpMethod.Post, "password-exempt-contract", "contracts", "qs", "pre-entrust-sign", "mini-program"); + + return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false); + } + + /// + /// 异步调用 [POST] /password-exempt-contract/contracts/qs/pre-entrust-sign/pay-redirect-sign 接口。 + /// + /// REF:
+ /// + ///
+ ///
+ /// + /// + /// + /// + public static async Task ExecutePresignPasswordExemptContractQsEntrustPayRedirectSignAsync(this WechatTenpayClient client, Models.PresignPasswordExemptContractQsEntrustPayRedirectSignRequest request, CancellationToken cancellationToken = default) + { + if (client is null) throw new ArgumentNullException(nameof(client)); + if (request is null) throw new ArgumentNullException(nameof(request)); + + IFlurlRequest flurlReq = client + .CreateFlurlRequest(request, HttpMethod.Post, "password-exempt-contract", "contracts", "qs", "pre-entrust-sign", "pay-redirect-sign"); + + return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false); + } + + /// + /// 异步调用 [POST] /password-exempt-contract/contracts/service-provider/pre-entrust-sign/mini-program 接口。 + /// + /// REF:
+ /// + ///
+ ///
+ /// + /// + /// + /// + public static async Task ExecutePresignPasswordExemptContractServiceProviderEntrustMiniProgramAsync(this WechatTenpayClient client, Models.PresignPasswordExemptContractServiceProviderEntrustMiniProgramRequest request, CancellationToken cancellationToken = default) + { + if (client is null) throw new ArgumentNullException(nameof(client)); + if (request is null) throw new ArgumentNullException(nameof(request)); + + IFlurlRequest flurlReq = client + .CreateFlurlRequest(request, HttpMethod.Post, "password-exempt-contract", "contracts", "service-provider", "pre-entrust-sign", "mini-program"); + + return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false); + } + + /// + /// 异步调用 [POST] /password-exempt-contract/contracts/service-provider/pre-entrust-sign/pay-redirect-sign 接口。 + /// + /// REF:
+ /// + ///
+ ///
+ /// + /// + /// + /// + public static async Task ExecutePresignPasswordExemptContractServiceProviderEntrustPayRedirectSignAsync(this WechatTenpayClient client, Models.PresignPasswordExemptContractServiceProviderEntrustPayRedirectSignRequest request, CancellationToken cancellationToken = default) + { + if (client is null) throw new ArgumentNullException(nameof(client)); + if (request is null) throw new ArgumentNullException(nameof(request)); + + IFlurlRequest flurlReq = client + .CreateFlurlRequest(request, HttpMethod.Post, "password-exempt-contract", "contracts", "service-provider", "pre-entrust-sign", "pay-redirect-sign"); + + return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false); + } + + /// + /// 异步调用 [GET] /password-exempt-contract/contracts/service-id/{service_id}/out-contract-code/{out_contract_code} 接口。 + /// + /// REF:
+ /// + ///
+ ///
+ /// + /// + /// + /// + public static async Task ExecuteGetPasswordExemptContractByOutContractCodeAsync(this WechatTenpayClient client, Models.GetPasswordExemptContractByOutContractCodeRequest request, CancellationToken cancellationToken = default) + { + if (client is null) throw new ArgumentNullException(nameof(client)); + if (request is null) throw new ArgumentNullException(nameof(request)); + + IFlurlRequest flurlReq = client + .CreateFlurlRequest(request, HttpMethod.Get, "password-exempt-contract", "contracts", "service-id", request.ServiceId, "out-contract-code", request.OutContractCode); + + return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false); + } + + /// + /// 异步调用 [POST] /password-exempt-contract/contracts/service-id/{service_id}/out-contract-code/{out_contract_code}/terminate 接口。 + /// + /// REF:
+ /// + ///
+ ///
+ /// + /// + /// + /// + public static async Task ExecuteTerminatePasswordExemptContractAsync(this WechatTenpayClient client, Models.TerminatePasswordExemptContractRequest request, CancellationToken cancellationToken = default) + { + if (client is null) throw new ArgumentNullException(nameof(client)); + if (request is null) throw new ArgumentNullException(nameof(request)); + + IFlurlRequest flurlReq = client + .CreateFlurlRequest(request, HttpMethod.Post, "password-exempt-contract", "contracts", "service-id", request.ServiceId, "out-contract-code", request.OutContractCode, "terminate"); + + return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false); + } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PasswordExemptContract/GetPasswordExemptContractByOutContractCodeRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PasswordExemptContract/GetPasswordExemptContractByOutContractCodeRequest.cs new file mode 100644 index 00000000..fe12c641 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PasswordExemptContract/GetPasswordExemptContractByOutContractCodeRequest.cs @@ -0,0 +1,22 @@ +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models +{ + /// + /// 表示 [GET] /password-exempt-contract/contracts/service-id/{service_id}/out-contract-code/{out_contract_code} 接口的请求。 + /// + public class GetPasswordExemptContractByOutContractCodeRequest : WechatTenpayRequest + { + /// + /// 获取或设置服务 ID。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public string ServiceId { get; set; } = string.Empty; + + /// + /// 获取或设置商户签约协议号。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public string OutContractCode { get; set; } = string.Empty; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PasswordExemptContract/GetPasswordExemptContractByOutContractCodeResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PasswordExemptContract/GetPasswordExemptContractByOutContractCodeResponse.cs new file mode 100644 index 00000000..95884f1a --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PasswordExemptContract/GetPasswordExemptContractByOutContractCodeResponse.cs @@ -0,0 +1,127 @@ +using System; + +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models +{ + /// + /// 表示 [GET] /password-exempt-contract/contracts/service-id/{service_id}/out-contract-code/{out_contract_code} 接口的响应。 + /// + public class GetPasswordExemptContractByOutContractCodeResponse : WechatTenpayResponse + { + public static class Types + { + public class Termination + { + /// + /// 获取或设置解约方式。 + /// + [Newtonsoft.Json.JsonProperty("contract_termination_mode")] + [System.Text.Json.Serialization.JsonPropertyName("contract_termination_mode")] + public string TerminationMode { get; set; } = default!; + + /// + /// 获取或设置解约时间。 + /// + [Newtonsoft.Json.JsonProperty("contract_terminated_time")] + [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.Rfc3339DateTimeOffsetConverter))] + [System.Text.Json.Serialization.JsonPropertyName("contract_terminated_time")] + [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.Rfc3339DateTimeOffsetConverter))] + public DateTimeOffset? TerminateTime { get; set; } + + /// + /// 获取或设置解约备注。 + /// + [Newtonsoft.Json.JsonProperty("contract_termination_remark")] + [System.Text.Json.Serialization.JsonPropertyName("contract_termination_remark")] + public string? TerminationRemark { get; set; } + } + } + + /// + /// 获取或设置微信商户号。 + /// + [Newtonsoft.Json.JsonProperty("mchid")] + [System.Text.Json.Serialization.JsonPropertyName("mchid")] + public string MerchantId { get; set; } = default!; + + /// + /// 获取或设置微信 AppId。 + /// + [Newtonsoft.Json.JsonProperty("appid")] + [System.Text.Json.Serialization.JsonPropertyName("appid")] + public string AppId { get; set; } = default!; + + /// + /// 获取或设置子商户 AppId。 + /// + [Newtonsoft.Json.JsonProperty("sub_appid")] + [System.Text.Json.Serialization.JsonPropertyName("sub_appid")] + public string? SubAppId { get; set; } + + /// + /// 获取或设置服务 ID。 + /// + [Newtonsoft.Json.JsonProperty("service_id")] + [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.NumericalStringConverter))] + [System.Text.Json.Serialization.JsonPropertyName("service_id")] + [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.NumericalStringConverter))] + public string ServiceId { get; set; } = default!; + + /// + /// 获取或设置商户签约协议号。 + /// + [Newtonsoft.Json.JsonProperty("out_contract_code")] + [System.Text.Json.Serialization.JsonPropertyName("out_contract_code")] + public string OutContractCode { get; set; } = default!; + + /// + /// 获取或设置免密支付协议 ID。 + /// + [Newtonsoft.Json.JsonProperty("contract_id")] + [System.Text.Json.Serialization.JsonPropertyName("contract_id")] + public string ContractId { get; set; } = default!; + + /// + /// 获取或设置协议状态。 + /// + [Newtonsoft.Json.JsonProperty("contract_state")] + [System.Text.Json.Serialization.JsonPropertyName("contract_state")] + public string ContractState { get; set; } = default!; + + /// + /// 获取或设置签署时间。 + /// + [Newtonsoft.Json.JsonProperty("contract_signed_time")] + [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.Rfc3339DateTimeOffsetConverter))] + [System.Text.Json.Serialization.JsonPropertyName("contract_signed_time")] + [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.Rfc3339DateTimeOffsetConverter))] + public DateTimeOffset? SignTime { get; set; } + + /// + /// 获取或设置用户唯一标识。 + /// + [Newtonsoft.Json.JsonProperty("openid")] + [System.Text.Json.Serialization.JsonPropertyName("openid")] + public string? OpenId { get; set; } + + /// + /// 获取或设置用户在子商户下的唯一标识。 + /// + [Newtonsoft.Json.JsonProperty("sub_openid")] + [System.Text.Json.Serialization.JsonPropertyName("sub_openid")] + public string? SubOpenId { get; set; } = default!; + + /// + /// 获取或设置用户账户展示名称。 + /// + [Newtonsoft.Json.JsonProperty("contract_display_account")] + [System.Text.Json.Serialization.JsonPropertyName("contract_display_account")] + public string ContractDisplayAccount { get; set; } = default!; + + /// + /// 获取或设置解约信息。 + /// + [Newtonsoft.Json.JsonProperty("contract_terminate_info")] + [System.Text.Json.Serialization.JsonPropertyName("contract_terminate_info")] + public Types.Termination? Termination { get; set; } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PasswordExemptContract/PresignPasswordExemptContractQsEntrustMiniProgramRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PasswordExemptContract/PresignPasswordExemptContractQsEntrustMiniProgramRequest.cs new file mode 100644 index 00000000..b23f52ed --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PasswordExemptContract/PresignPasswordExemptContractQsEntrustMiniProgramRequest.cs @@ -0,0 +1,73 @@ +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models +{ + /// + /// 表示 [POST] /password-exempt-contract/contracts/qs/pre-entrust-sign/mini-program 接口的请求。 + /// + public class PresignPasswordExemptContractQsEntrustMiniProgramRequest : WechatTenpayRequest + { + /// + /// 获取或设置子商户号。 + /// + [Newtonsoft.Json.JsonProperty("sub_mchid")] + [System.Text.Json.Serialization.JsonPropertyName("sub_mchid")] + public string? SubMerchantId { get; set; } + + /// + /// 获取或设置微信 AppId。 + /// + [Newtonsoft.Json.JsonProperty("appid")] + [System.Text.Json.Serialization.JsonPropertyName("appid")] + public string AppId { get; set; } = string.Empty; + + /// + /// 获取或设置子商户 AppId。 + /// + [Newtonsoft.Json.JsonProperty("sub_appid")] + [System.Text.Json.Serialization.JsonPropertyName("sub_appid")] + public string? SubAppId { get; set; } + + /// + /// 获取或设置服务 ID。 + /// + [Newtonsoft.Json.JsonProperty("service_id")] + [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.NumericalStringConverter))] + [System.Text.Json.Serialization.JsonPropertyName("service_id")] + [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.NumericalStringConverter))] + public string ServiceId { get; set; } = string.Empty; + + /// + /// 获取或设置商户签约协议号。 + /// + [Newtonsoft.Json.JsonProperty("out_contract_code")] + [System.Text.Json.Serialization.JsonPropertyName("out_contract_code")] + public string OutContractCode { get; set; } = string.Empty; + + /// + /// 获取或设置用户唯一标识。 + /// + [Newtonsoft.Json.JsonProperty("openid")] + [System.Text.Json.Serialization.JsonPropertyName("openid")] + public string? OpenId { get; set; } + + /// + /// 获取或设置用户在子商户下的唯一标识。 + /// + [Newtonsoft.Json.JsonProperty("sub_openid")] + [System.Text.Json.Serialization.JsonPropertyName("sub_openid")] + public string? SubOpenId { get; set; } + + /// + /// 获取或设置用户账户展示名称。 + /// + [Newtonsoft.Json.JsonProperty("contract_display_account")] + [System.Text.Json.Serialization.JsonPropertyName("contract_display_account")] + public string ContractDisplayAccount { get; set; } = string.Empty; + + /// + /// 获取或设置回调通知地址。 + /// + [Newtonsoft.Json.JsonProperty("notify_url")] + [System.Text.Json.Serialization.JsonPropertyName("notify_url")] + public string NotifyUrl { get; set; } = string.Empty; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PasswordExemptContract/PresignPasswordExemptContractQsEntrustMiniProgramResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PasswordExemptContract/PresignPasswordExemptContractQsEntrustMiniProgramResponse.cs new file mode 100644 index 00000000..580c137e --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PasswordExemptContract/PresignPasswordExemptContractQsEntrustMiniProgramResponse.cs @@ -0,0 +1,52 @@ +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models +{ + /// + /// 表示 [POST] /password-exempt-contract/contracts/qs/pre-entrust-sign/mini-program 接口的响应。 + /// + public class PresignPasswordExemptContractQsEntrustMiniProgramResponse : WechatTenpayResponse + { + /// + /// 获取或设置预签约会话 ID。 + /// + [Newtonsoft.Json.JsonProperty("pre_entrustweb_id")] + [System.Text.Json.Serialization.JsonPropertyName("pre_entrustweb_id")] + public string PresignSessionId { get; set; } = default!; + + /// + /// 获取或设置跳转小程序 AppId。 + /// + [Newtonsoft.Json.JsonProperty("sign_mp_appid")] + [System.Text.Json.Serialization.JsonPropertyName("sign_mp_appid")] + public string MiniProgramAppId { get; set; } = default!; + + /// + /// 获取或设置跳转小程序页面路径。 + /// + [Newtonsoft.Json.JsonProperty("sign_mp_path")] + [System.Text.Json.Serialization.JsonPropertyName("sign_mp_path")] + public string MiniProgramPagePath { get; set; } = default!; + + /// + /// 获取或设置微信商户号。 + /// + [Newtonsoft.Json.JsonProperty("mchid")] + [System.Text.Json.Serialization.JsonPropertyName("mchid")] + public string MerchantId { get; set; } = default!; + + /// + /// 获取或设置服务 ID。 + /// + [Newtonsoft.Json.JsonProperty("service_id")] + [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.NumericalStringConverter))] + [System.Text.Json.Serialization.JsonPropertyName("service_id")] + [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.NumericalStringConverter))] + public string ServiceId { get; set; } = default!; + + /// + /// 获取或设置商户签约协议号。 + /// + [Newtonsoft.Json.JsonProperty("out_contract_code")] + [System.Text.Json.Serialization.JsonPropertyName("out_contract_code")] + public string OutContractCode { get; set; } = default!; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PasswordExemptContract/PresignPasswordExemptContractQsEntrustPayRedirectSignRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PasswordExemptContract/PresignPasswordExemptContractQsEntrustPayRedirectSignRequest.cs new file mode 100644 index 00000000..f51fe4eb --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PasswordExemptContract/PresignPasswordExemptContractQsEntrustPayRedirectSignRequest.cs @@ -0,0 +1,15 @@ +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models +{ + /// + /// 表示 [POST] /password-exempt-contract/contracts/qs/pre-entrust-sign/pay-redirect-sign 接口的请求。 + /// + public class PresignPasswordExemptContractQsEntrustPayRedirectSignRequest : PresignPasswordExemptContractQsEntrustMiniProgramRequest + { + /// + /// 获取或设置预支付交易会话标识。 + /// + [Newtonsoft.Json.JsonProperty("prepay_id")] + [System.Text.Json.Serialization.JsonPropertyName("prepay_id")] + public string PrepayId { get; set; } = string.Empty; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PasswordExemptContract/PresignPasswordExemptContractQsEntrustPayRedirectSignResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PasswordExemptContract/PresignPasswordExemptContractQsEntrustPayRedirectSignResponse.cs new file mode 100644 index 00000000..fd4b9950 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PasswordExemptContract/PresignPasswordExemptContractQsEntrustPayRedirectSignResponse.cs @@ -0,0 +1,31 @@ +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models +{ + /// + /// 表示 [POST] /password-exempt-contract/contracts/qs/pre-entrust-sign/pay-redirect-sign 接口的响应。 + /// + public class PresignPasswordExemptContractQsEntrustPayRedirectSignResponse : WechatTenpayResponse + { + /// + /// 获取或设置微信商户号。 + /// + [Newtonsoft.Json.JsonProperty("mchid")] + [System.Text.Json.Serialization.JsonPropertyName("mchid")] + public string MerchantId { get; set; } = default!; + + /// + /// 获取或设置服务 ID。 + /// + [Newtonsoft.Json.JsonProperty("service_id")] + [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.NumericalStringConverter))] + [System.Text.Json.Serialization.JsonPropertyName("service_id")] + [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.NumericalStringConverter))] + public string ServiceId { get; set; } = default!; + + /// + /// 获取或设置商户签约协议号。 + /// + [Newtonsoft.Json.JsonProperty("out_contract_code")] + [System.Text.Json.Serialization.JsonPropertyName("out_contract_code")] + public string OutContractCode { get; set; } = default!; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PasswordExemptContract/PresignPasswordExemptContractServiceProviderEntrustMiniProgramRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PasswordExemptContract/PresignPasswordExemptContractServiceProviderEntrustMiniProgramRequest.cs new file mode 100644 index 00000000..4f993ad6 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PasswordExemptContract/PresignPasswordExemptContractServiceProviderEntrustMiniProgramRequest.cs @@ -0,0 +1,73 @@ +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models +{ + /// + /// 表示 [POST] /password-exempt-contract/contracts/service-provider/pre-entrust-sign/mini-program 接口的请求。 + /// + public class PresignPasswordExemptContractServiceProviderEntrustMiniProgramRequest : WechatTenpayRequest + { + /// + /// 获取或设置子商户号。 + /// + [Newtonsoft.Json.JsonProperty("sub_mchid")] + [System.Text.Json.Serialization.JsonPropertyName("sub_mchid")] + public string? SubMerchantId { get; set; } + + /// + /// 获取或设置微信 AppId。 + /// + [Newtonsoft.Json.JsonProperty("sp_appid")] + [System.Text.Json.Serialization.JsonPropertyName("sp_appid")] + public string AppId { get; set; } = string.Empty; + + /// + /// 获取或设置子商户 AppId。 + /// + [Newtonsoft.Json.JsonProperty("sub_appid")] + [System.Text.Json.Serialization.JsonPropertyName("sub_appid")] + public string? SubAppId { get; set; } + + /// + /// 获取或设置服务 ID。 + /// + [Newtonsoft.Json.JsonProperty("service_id")] + [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.NumericalStringConverter))] + [System.Text.Json.Serialization.JsonPropertyName("service_id")] + [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.NumericalStringConverter))] + public string ServiceId { get; set; } = string.Empty; + + /// + /// 获取或设置商户签约协议号。 + /// + [Newtonsoft.Json.JsonProperty("out_contract_code")] + [System.Text.Json.Serialization.JsonPropertyName("out_contract_code")] + public string OutContractCode { get; set; } = string.Empty; + + /// + /// 获取或设置用户唯一标识。 + /// + [Newtonsoft.Json.JsonProperty("sp_openid")] + [System.Text.Json.Serialization.JsonPropertyName("sp_openid")] + public string? OpenId { get; set; } + + /// + /// 获取或设置用户在子商户下的唯一标识。 + /// + [Newtonsoft.Json.JsonProperty("sub_openid")] + [System.Text.Json.Serialization.JsonPropertyName("sub_openid")] + public string? SubOpenId { get; set; } + + /// + /// 获取或设置用户账户展示名称。 + /// + [Newtonsoft.Json.JsonProperty("contract_display_account")] + [System.Text.Json.Serialization.JsonPropertyName("contract_display_account")] + public string ContractDisplayAccount { get; set; } = string.Empty; + + /// + /// 获取或设置回调通知地址。 + /// + [Newtonsoft.Json.JsonProperty("notify_url")] + [System.Text.Json.Serialization.JsonPropertyName("notify_url")] + public string NotifyUrl { get; set; } = string.Empty; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PasswordExemptContract/PresignPasswordExemptContractServiceProviderEntrustMiniProgramResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PasswordExemptContract/PresignPasswordExemptContractServiceProviderEntrustMiniProgramResponse.cs new file mode 100644 index 00000000..e0dfea4e --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PasswordExemptContract/PresignPasswordExemptContractServiceProviderEntrustMiniProgramResponse.cs @@ -0,0 +1,59 @@ +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models +{ + /// + /// 表示 [POST] /password-exempt-contract/contracts/service-provider/pre-entrust-sign/mini-program 接口的响应。 + /// + public class PresignPasswordExemptContractServiceProviderEntrustMiniProgramResponse : WechatTenpayResponse + { + /// + /// 获取或设置预签约会话 ID。 + /// + [Newtonsoft.Json.JsonProperty("pre_entrustweb_id")] + [System.Text.Json.Serialization.JsonPropertyName("pre_entrustweb_id")] + public string PresignSessionId { get; set; } = default!; + + /// + /// 获取或设置跳转小程序 AppId。 + /// + [Newtonsoft.Json.JsonProperty("sign_mp_appid")] + [System.Text.Json.Serialization.JsonPropertyName("sign_mp_appid")] + public string MiniProgramAppId { get; set; } = default!; + + /// + /// 获取或设置跳转小程序页面路径。 + /// + [Newtonsoft.Json.JsonProperty("sign_mp_path")] + [System.Text.Json.Serialization.JsonPropertyName("sign_mp_path")] + public string MiniProgramPagePath { get; set; } = default!; + + /// + /// 获取或设置微信商户号。 + /// + [Newtonsoft.Json.JsonProperty("mchid")] + [System.Text.Json.Serialization.JsonPropertyName("mchid")] + public string MerchantId { get; set; } = default!; + + /// + /// 获取或设置子商户号。 + /// + [Newtonsoft.Json.JsonProperty("sub_mchid")] + [System.Text.Json.Serialization.JsonPropertyName("sub_mchid")] + public string? SubMerchantId { get; set; } + + /// + /// 获取或设置服务 ID。 + /// + [Newtonsoft.Json.JsonProperty("service_id")] + [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.NumericalStringConverter))] + [System.Text.Json.Serialization.JsonPropertyName("service_id")] + [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.NumericalStringConverter))] + public string ServiceId { get; set; } = default!; + + /// + /// 获取或设置商户签约协议号。 + /// + [Newtonsoft.Json.JsonProperty("out_contract_code")] + [System.Text.Json.Serialization.JsonPropertyName("out_contract_code")] + public string OutContractCode { get; set; } = default!; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PasswordExemptContract/PresignPasswordExemptContractServiceProviderEntrustPayRedirectSignRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PasswordExemptContract/PresignPasswordExemptContractServiceProviderEntrustPayRedirectSignRequest.cs new file mode 100644 index 00000000..296039af --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PasswordExemptContract/PresignPasswordExemptContractServiceProviderEntrustPayRedirectSignRequest.cs @@ -0,0 +1,15 @@ +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models +{ + /// + /// 表示 [POST] /password-exempt-contract/contracts/service-provider/pre-entrust-sign/pay-redirect-sign 接口的请求。 + /// + public class PresignPasswordExemptContractServiceProviderEntrustPayRedirectSignRequest : PresignPasswordExemptContractServiceProviderEntrustMiniProgramRequest + { + /// + /// 获取或设置预支付交易会话标识。 + /// + [Newtonsoft.Json.JsonProperty("prepay_id")] + [System.Text.Json.Serialization.JsonPropertyName("prepay_id")] + public string PrepayId { get; set; } = string.Empty; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PasswordExemptContract/PresignPasswordExemptContractServiceProviderEntrustPayRedirectSignResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PasswordExemptContract/PresignPasswordExemptContractServiceProviderEntrustPayRedirectSignResponse.cs new file mode 100644 index 00000000..6b3f35d9 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PasswordExemptContract/PresignPasswordExemptContractServiceProviderEntrustPayRedirectSignResponse.cs @@ -0,0 +1,38 @@ +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models +{ + /// + /// 表示 [POST] /password-exempt-contract/contracts/service-provider/pre-entrust-sign/pay-redirect-sign 接口的响应。 + /// + public class PresignPasswordExemptContractServiceProviderEntrustPayRedirectSignResponse : WechatTenpayResponse + { + /// + /// 获取或设置微信商户号。 + /// + [Newtonsoft.Json.JsonProperty("mchid")] + [System.Text.Json.Serialization.JsonPropertyName("mchid")] + public string MerchantId { get; set; } = default!; + + /// + /// 获取或设置子商户号。 + /// + [Newtonsoft.Json.JsonProperty("sub_mchid")] + [System.Text.Json.Serialization.JsonPropertyName("sub_mchid")] + public string? SubMerchantId { get; set; } + + /// + /// 获取或设置服务 ID。 + /// + [Newtonsoft.Json.JsonProperty("service_id")] + [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.NumericalStringConverter))] + [System.Text.Json.Serialization.JsonPropertyName("service_id")] + [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.NumericalStringConverter))] + public string ServiceId { get; set; } = default!; + + /// + /// 获取或设置商户签约协议号。 + /// + [Newtonsoft.Json.JsonProperty("out_contract_code")] + [System.Text.Json.Serialization.JsonPropertyName("out_contract_code")] + public string OutContractCode { get; set; } = default!; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PasswordExemptContract/TerminatePasswordExemptContractRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PasswordExemptContract/TerminatePasswordExemptContractRequest.cs new file mode 100644 index 00000000..c151c407 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PasswordExemptContract/TerminatePasswordExemptContractRequest.cs @@ -0,0 +1,29 @@ +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models +{ + /// + /// 表示 [POST] /password-exempt-contract/contracts/service-id/{service_id}/out-contract-code/{out_contract_code}/terminate 接口的请求。 + /// + public class TerminatePasswordExemptContractRequest : WechatTenpayRequest + { + /// + /// 获取或设置服务 ID。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public string ServiceId { get; set; } = string.Empty; + + /// + /// 获取或设置商户签约协议号。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public string OutContractCode { get; set; } = string.Empty; + + /// + /// 获取或设置解约备注。 + /// + [Newtonsoft.Json.JsonProperty("contract_termination_remark")] + [System.Text.Json.Serialization.JsonPropertyName("contract_termination_remark")] + public string TerminationRemark { get; set; } = string.Empty; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PasswordExemptContract/TerminatePasswordExemptContractResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PasswordExemptContract/TerminatePasswordExemptContractResponse.cs new file mode 100644 index 00000000..5f2cbc2f --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PasswordExemptContract/TerminatePasswordExemptContractResponse.cs @@ -0,0 +1,31 @@ +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models +{ + /// + /// 表示 [POST] /password-exempt-contract/contracts/service-id/{service_id}/out-contract-code/{out_contract_code}/terminate 接口的响应。 + /// + public class TerminatePasswordExemptContractResponse : WechatTenpayResponse + { + /// + /// 获取或设置微信商户号。 + /// + [Newtonsoft.Json.JsonProperty("mchid")] + [System.Text.Json.Serialization.JsonPropertyName("mchid")] + public string MerchantId { get; set; } = default!; + + /// + /// 获取或设置服务 ID。 + /// + [Newtonsoft.Json.JsonProperty("service_id")] + [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.NumericalStringConverter))] + [System.Text.Json.Serialization.JsonPropertyName("service_id")] + [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.NumericalStringConverter))] + public string ServiceId { get; set; } = default!; + + /// + /// 获取或设置商户签约协议号。 + /// + [Newtonsoft.Json.JsonProperty("out_contract_code")] + [System.Text.Json.Serialization.JsonPropertyName("out_contract_code")] + public string OutContractCode { get; set; } = default!; + } +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/PasswordExemptContract/GetPasswordExemptContractByOutContractCodeResponse.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/PasswordExemptContract/GetPasswordExemptContractByOutContractCodeResponse.json new file mode 100644 index 00000000..1e7eb8d2 --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/PasswordExemptContract/GetPasswordExemptContractByOutContractCodeResponse.json @@ -0,0 +1,18 @@ +{ + "mchid": "1900000109", + "contract_id": "123124412412423431", + "appid": "wxd678efh567hg6787", + "openid": "wxd678efh567hg6787", + "sub_appid": "wxd678efh567hg6787", + "sub_openid": "wxd678efh567hg6787", + "service_id": 12535, + "out_contract_code": "wxwtdk20200910100000", + "contract_display_account": "微信代扣用户A", + "contract_state": "SIGNED", + "contract_signed_time": "2020-09-10T13:29:35+08:00", + "contract_terminate_info": { + "contract_termination_mode": "USER_TERMINATE", + "contract_terminated_time": "2020-10-10T13:29:35+08:00", + "contract_termination_remark": "用户解约" + } +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/PasswordExemptContract/PresignPasswordExemptContractQsEntrustMiniProgramRequest.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/PasswordExemptContract/PresignPasswordExemptContractQsEntrustMiniProgramRequest.json new file mode 100644 index 00000000..b779c165 --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/PasswordExemptContract/PresignPasswordExemptContractQsEntrustMiniProgramRequest.json @@ -0,0 +1,11 @@ +{ + "appid": "wxd678efh567hg6787", + "sub_appid": "wxd678efh567hg6787", + "sub_mchid": "1900000109", + "service_id": 12535, + "out_contract_code": "wxwtdk20200910100000", + "notify_url": "https://yourapp.com/notify", + "contract_display_account": "微信代扣用户A", + "openid": "oUpF8uMuAJO_M2pxb1Q9zNjWeS6o", + "sub_openid": "oUpF8uMuAJO_M2pxb1Q9zNjWeS6o" +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/PasswordExemptContract/PresignPasswordExemptContractQsEntrustMiniProgramResponse.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/PasswordExemptContract/PresignPasswordExemptContractQsEntrustMiniProgramResponse.json new file mode 100644 index 00000000..f2a0b0f4 --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/PasswordExemptContract/PresignPasswordExemptContractQsEntrustMiniProgramResponse.json @@ -0,0 +1,8 @@ +{ + "pre_entrustweb_id": "5778aadY9nltAsZzXixCkFIGYnV2V", + "mchid": "1900000109", + "service_id": 12535, + "out_contract_code": "wxwtdk20200910100000", + "sign_mp_appid": "wxbd687630cd02ce1d", + "sign_mp_path": "pages/PwdExemptContract/index" +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/PasswordExemptContract/PresignPasswordExemptContractQsEntrustPayRedirectSignRequest.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/PasswordExemptContract/PresignPasswordExemptContractQsEntrustPayRedirectSignRequest.json new file mode 100644 index 00000000..56684612 --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/PasswordExemptContract/PresignPasswordExemptContractQsEntrustPayRedirectSignRequest.json @@ -0,0 +1,12 @@ +{ + "appid": "wxd678efh567hg6787", + "sub_appid": "wxd678efh567hg6787", + "sub_mchid": "1900000109", + "service_id": 12535, + "out_contract_code": "wxwtdk20200910100000", + "notify_url": "https://yourapp.com/notify", + "contract_display_account": "微信代扣用户A", + "prepay_id": "wx201410272009395522657a690389285100", + "openid": "oUpF8uMuAJO_M2pxb1Q9zNjWeS6o", + "sub_openid": "oUpF8uMuAJO_M2pxb1Q9zNjWeS6o" +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/PasswordExemptContract/PresignPasswordExemptContractQsEntrustPayRedirectSignResponse.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/PasswordExemptContract/PresignPasswordExemptContractQsEntrustPayRedirectSignResponse.json new file mode 100644 index 00000000..a3629831 --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/PasswordExemptContract/PresignPasswordExemptContractQsEntrustPayRedirectSignResponse.json @@ -0,0 +1,5 @@ +{ + "mchid": "1900000109", + "service_id": 12535, + "out_contract_code": "wxwtdk20200910100000" +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/PasswordExemptContract/PresignPasswordExemptContractServiceProviderEntrustMiniProgramRequest.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/PasswordExemptContract/PresignPasswordExemptContractServiceProviderEntrustMiniProgramRequest.json new file mode 100644 index 00000000..c07300d8 --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/PasswordExemptContract/PresignPasswordExemptContractServiceProviderEntrustMiniProgramRequest.json @@ -0,0 +1,11 @@ +{ + "sp_appid": "wxd678efh567hg6787", + "sp_openid": "oYobu0MVnQfWpSMOYJz2AHPG_gQw", + "sub_mchid": "1900000109", + "sub_appid": "wxd678efh567hg6787", + "sub_openid": "wxd678efh567hg6787", + "service_id": 12535, + "out_contract_code": "wxwtdk20200910100000", + "notify_url": "https://yourapp.com/notify", + "contract_display_account": "微信代扣用户A" +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/PasswordExemptContract/PresignPasswordExemptContractServiceProviderEntrustMiniProgramResponse.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/PasswordExemptContract/PresignPasswordExemptContractServiceProviderEntrustMiniProgramResponse.json new file mode 100644 index 00000000..ede05c73 --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/PasswordExemptContract/PresignPasswordExemptContractServiceProviderEntrustMiniProgramResponse.json @@ -0,0 +1,9 @@ +{ + "pre_entrustweb_id": "5778aadY9nltAsZzXixCkFIGYnV2V", + "mchid": "1900000109", + "sub_mchid": "1900000109", + "service_id": 12535, + "out_contract_code": "wxwtdk20200910100000", + "sign_mp_appid": "wxbd687630cd02ce1d", + "sign_mp_path": "pages/PwdExemptContract/index" +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/PasswordExemptContract/PresignPasswordExemptContractServiceProviderEntrustPayRedirectSignRequest.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/PasswordExemptContract/PresignPasswordExemptContractServiceProviderEntrustPayRedirectSignRequest.json new file mode 100644 index 00000000..0df35065 --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/PasswordExemptContract/PresignPasswordExemptContractServiceProviderEntrustPayRedirectSignRequest.json @@ -0,0 +1,12 @@ +{ + "sp_appid": "wxd678efh567hg6787", + "sp_openid": "oYobu0MVnQfWpSMOYJz2AHPG_gQw", + "sub_mchid": "1900000109", + "sub_appid": "wxd678efh567hg6787", + "sub_openid": "wxd678efh567hg6787", + "service_id": 12535, + "out_contract_code": "wxwtdk20200910100000", + "notify_url": "https://yourapp.com/notify", + "contract_display_account": "微信代扣用户A", + "prepay_id": "wx201410272009395522657a690389285100" +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/PasswordExemptContract/PresignPasswordExemptContractServiceProviderEntrustPayRedirectSignResponse.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/PasswordExemptContract/PresignPasswordExemptContractServiceProviderEntrustPayRedirectSignResponse.json new file mode 100644 index 00000000..df28d7f9 --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/PasswordExemptContract/PresignPasswordExemptContractServiceProviderEntrustPayRedirectSignResponse.json @@ -0,0 +1,6 @@ +{ + "mchid": "1900000109", + "sub_mchid": "1900000109", + "service_id": 12535, + "out_contract_code": "wxwtdk20200910100000" +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/PasswordExemptContract/TerminatePasswordExemptContractRequest.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/PasswordExemptContract/TerminatePasswordExemptContractRequest.json new file mode 100644 index 00000000..4394aed8 --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/PasswordExemptContract/TerminatePasswordExemptContractRequest.json @@ -0,0 +1,3 @@ +{ + "contract_termination_remark": "用户解约" +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/PasswordExemptContract/TerminatePasswordExemptContractResponse.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/PasswordExemptContract/TerminatePasswordExemptContractResponse.json new file mode 100644 index 00000000..a3629831 --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/PasswordExemptContract/TerminatePasswordExemptContractResponse.json @@ -0,0 +1,5 @@ +{ + "mchid": "1900000109", + "service_id": 12535, + "out_contract_code": "wxwtdk20200910100000" +}