diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Extensions/WechatWorkClientExecuteCgibinMiniAppPayExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Extensions/WechatWorkClientExecuteCgibinMiniAppPayExtensions.cs new file mode 100644 index 00000000..29c39437 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Extensions/WechatWorkClientExecuteCgibinMiniAppPayExtensions.cs @@ -0,0 +1,79 @@ +using System; +using System.Net.Http; +using System.Threading; +using System.Threading.Tasks; +using Flurl; +using Flurl.Http; + +namespace SKIT.FlurlHttpClient.Wechat.Work +{ + public static class WechatWorkClientExecuteCgibinMiniAppPayExtensions + { + /// + /// 异步调用 [POST] /cgi-bin/miniapppay/upload_image 接口。 + /// REF: https://developer.work.weixin.qq.com/document/path/98972 + /// + /// + /// + /// + /// + public static async Task ExecuteCgibinMiniAppPayUploadImageAsync(this WechatWorkClient client, Models.CgibinMiniAppPayUploadImageRequest request, CancellationToken cancellationToken = default) + { + if (client is null) throw new ArgumentNullException(nameof(client)); + if (request is null) throw new ArgumentNullException(nameof(request)); + + if (request.FileName == null) + request.FileName = Guid.NewGuid().ToString("N").ToLower() + ".png"; + + if (request.FileContentType == null) + request.FileContentType = Utilities.FileNameToContentTypeMapper.GetContentTypeForImage(request.FileName!) ?? "image/png"; + + IFlurlRequest flurlReq = client + .CreateRequest(request, HttpMethod.Post, "cgi-bin", "miniapppay", "upload_image") + .SetQueryParam("access_token", request.AccessToken); + + using var httpContent = Utilities.FileHttpContentBuilder.Build(fileName: request.FileName, fileBytes: request.FileBytes, fileContentType: request.FileContentType, formDataName: "media"); + return await client.SendRequestAsync(flurlReq, httpContent: httpContent, cancellationToken: cancellationToken); + } + + /// + /// 异步调用 [POST] /cgi-bin/miniapppay/apply_mch 接口。 + /// REF: https://developer.work.weixin.qq.com/document/path/98973 + /// + /// + /// + /// + /// + public static async Task ExecuteCgibinMiniAppPayApplyMechantAsync(this WechatWorkClient client, Models.CgibinMiniAppPayApplyMechantRequest 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", "apply_mch") + .SetQueryParam("access_token", request.AccessToken); + + return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } + + /// + /// 异步调用 [POST] /cgi-bin/miniapppay/get_applyment_status 接口。 + /// REF: https://developer.work.weixin.qq.com/document/path/98974 + /// + /// + /// + /// + /// + public static async Task ExecuteCgibinMiniAppPayGetApplymentStatusAsync(this WechatWorkClient client, Models.CgibinMiniAppPayGetApplymentStatusRequest 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_applyment_status") + .SetQueryParam("access_token", request.AccessToken); + + return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinMiniAppPay/CgibinMiniAppPayApplyMechantRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinMiniAppPay/CgibinMiniAppPayApplyMechantRequest.cs new file mode 100644 index 00000000..8de7c9ee --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinMiniAppPay/CgibinMiniAppPayApplyMechantRequest.cs @@ -0,0 +1,388 @@ +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.Work.Models +{ + /// + /// 表示 [POST] /cgi-bin/miniapppay/apply_mch 接口的请求。 + /// + public class CgibinMiniAppPayApplyMechantRequest : WechatWorkRequest + { + public static class Types + { + public class BusinessLicense + { + /// + /// 获取或设置证书类型。 + /// + [Newtonsoft.Json.JsonProperty("cert_type")] + [System.Text.Json.Serialization.JsonPropertyName("cert_type")] + public int CertificateType { get; set; } + + /// + /// 获取或设置营业执照扫描件 MediaId。 + /// + [Newtonsoft.Json.JsonProperty("business_license_copy_open_wx_pay_media_id")] + [System.Text.Json.Serialization.JsonPropertyName("business_license_copy_open_wx_pay_media_id")] + public string BusinessLicensePictureMediaId { get; set; } = string.Empty; + + /// + /// 获取或设置营业执照编号。 + /// + [Newtonsoft.Json.JsonProperty("business_license_number")] + [System.Text.Json.Serialization.JsonPropertyName("business_license_number")] + public string BusinessLicenseNumber { get; set; } = string.Empty; + + /// + /// 获取或设置商户名称。 + /// + [Newtonsoft.Json.JsonProperty("merchant_name")] + [System.Text.Json.Serialization.JsonPropertyName("merchant_name")] + public string MerchantName { get; set; } = string.Empty; + + /// + /// 获取或设置法定代表人姓名。 + /// + [Newtonsoft.Json.JsonProperty("legal_person")] + [System.Text.Json.Serialization.JsonPropertyName("legal_person")] + public string LegalPerson { get; set; } = string.Empty; + + /// + /// 获取或设置注册地址。 + /// + [Newtonsoft.Json.JsonProperty("company_address")] + [System.Text.Json.Serialization.JsonPropertyName("company_address")] + public string? CompanyAddress { get; set; } + + /// + /// 获取或设置营业期限开始日期字符串(格式:yyyy-MM-dd)。 + /// + [Newtonsoft.Json.JsonProperty("business_time_begin_time")] + [System.Text.Json.Serialization.JsonPropertyName("business_time_begin_time")] + public string? BusinessTimeBeginDateString { get; set; } + + /// + /// 获取或设置营业期限截止日期字符串(格式:yyyy-MM-dd / "长期")。 + /// + [Newtonsoft.Json.JsonProperty("business_time_end_time")] + [System.Text.Json.Serialization.JsonPropertyName("business_time_end_time")] + public string? BusinessTimeEndDateString { get; set; } + } + + public class FinanceInstitution + { + /// + /// 获取或设置金融机构类型。 + /// + [Newtonsoft.Json.JsonProperty("finance_type")] + [System.Text.Json.Serialization.JsonPropertyName("finance_type")] + public string FinanceType { get; set; } = string.Empty; + + /// + /// 获取或设置金融机构许可证图片 MediaId 列表。 + /// + [Newtonsoft.Json.JsonProperty("finance_license_pics_open_wx_pay_media_id")] + [System.Text.Json.Serialization.JsonPropertyName("finance_license_pics_open_wx_pay_media_id")] + public IList FinanceLicensePictureMediaIdList { get; set; } = new List(); + } + + public class IdCard + { + /// + /// 获取或设置证件类型。 + /// + [Newtonsoft.Json.JsonProperty("id_doc_type")] + [System.Text.Json.Serialization.JsonPropertyName("id_doc_type")] + public int IdDocumentType { get; set; } + + /// + /// 获取或设置证件人像面图片 MediaId。 + /// + [Newtonsoft.Json.JsonProperty("id_card_copy_open_wx_pay_media_id")] + [System.Text.Json.Serialization.JsonPropertyName("id_card_copy_open_wx_pay_media_id")] + public string IdCardFrontPictureMediaId { get; set; } = string.Empty; + + /// + /// 获取或设置证件国徽面图片 MediaId。 + /// + [Newtonsoft.Json.JsonProperty("id_card_national_open_wx_pay_media_id")] + [System.Text.Json.Serialization.JsonPropertyName("id_card_national_open_wx_pay_media_id")] + public string IdCardBackPictureMediaId { get; set; } = string.Empty; + + /// + /// 获取或设置证件姓名。 + /// + [Newtonsoft.Json.JsonProperty("id_card_name")] + [System.Text.Json.Serialization.JsonPropertyName("id_card_name")] + public string IdCardName { get; set; } = string.Empty; + + /// + /// 获取或设置证件号码。 + /// + [Newtonsoft.Json.JsonProperty("id_card_number")] + [System.Text.Json.Serialization.JsonPropertyName("id_card_number")] + public string IdCardNumber { get; set; } = string.Empty; + + /// + /// 获取或设置证件地址。 + /// + [Newtonsoft.Json.JsonProperty("id_card_address")] + [System.Text.Json.Serialization.JsonPropertyName("id_card_address")] + public string? IdCardAddress { get; set; } = string.Empty; + + /// + /// 获取或设置证件有效期开始日期字符串(格式:yyyy-MM-dd)。 + /// + [Newtonsoft.Json.JsonProperty("id_card_valid_time_begin")] + [System.Text.Json.Serialization.JsonPropertyName("id_card_valid_time_begin")] + public string IdCardPeriodBeginDateString { get; set; } = string.Empty; + + /// + /// 获取或设置证件有效期截止日期字符串(格式:yyyy-MM-dd / "长期")。 + /// + [Newtonsoft.Json.JsonProperty("id_card_valid_time")] + [System.Text.Json.Serialization.JsonPropertyName("id_card_valid_time")] + public string IdCardPeriodEndDateString { get; set; } = string.Empty; + } + + public class UBO : IdCard + { + } + + public class Contact + { + public static class Types + { + public class IdCard : CgibinMiniAppPayApplyMechantRequest.Types.IdCard + { + } + } + + /// + /// 获取或设置超级管理员类型。 + /// + [Newtonsoft.Json.JsonProperty("contact_type")] + [System.Text.Json.Serialization.JsonPropertyName("contact_type")] + public string ContactType { get; set; } = string.Empty; + + /// + /// 获取或设置业务办理授权函图片 MediaId。 + /// + [Newtonsoft.Json.JsonProperty("business_authorization_letter_open_wx_pay_media_id")] + [System.Text.Json.Serialization.JsonPropertyName("business_authorization_letter_open_wx_pay_media_id")] + public string? BusinessAuthorizationLetterPictureMediaId { get; set; } + + /// + /// 获取或设置超级管理员证件信息。 + /// + [Newtonsoft.Json.JsonProperty("contact_info")] + [System.Text.Json.Serialization.JsonPropertyName("contact_info")] + public Types.IdCard IdCard { get; set; } = new Types.IdCard(); + + /// + /// 获取或设置超级管理员手机号码。 + /// + [Newtonsoft.Json.JsonProperty("mobile_phone")] + [System.Text.Json.Serialization.JsonPropertyName("mobile_phone")] + public string? MobileNumber { get; set; } + + /// + /// 获取或设置超级管理员邮箱。 + /// + [Newtonsoft.Json.JsonProperty("contact_email")] + [System.Text.Json.Serialization.JsonPropertyName("contact_email")] + public string? Email { get; set; } + } + + public class BankAccount + { + public static class Types + { + public class BankCardSupplement + { + /// + /// 获取或设置结算证明图片 MediaId。 + /// + [Newtonsoft.Json.JsonProperty("settlement_certificate_open_wx_pay_media_id")] + [System.Text.Json.Serialization.JsonPropertyName("settlement_certificate_open_wx_pay_media_id")] + public string? SettlementCertificatePictureMediaId { get; set; } + + /// + /// 获取或设置关系证明图片 MediaId。 + /// + [Newtonsoft.Json.JsonProperty("relationship_certificate_open_wx_pay_media_id")] + [System.Text.Json.Serialization.JsonPropertyName("relationship_certificate_open_wx_pay_media_id")] + public string? RelationshipCertificatePictureMediaId { get; set; } + + /// + /// 获取或设置其他证明图片 MediaId 列表。 + /// + [Newtonsoft.Json.JsonProperty("other_certificate_open_wx_pay_media_id")] + [System.Text.Json.Serialization.JsonPropertyName("other_certificate_open_wx_pay_media_id")] + public IList? OtherCertificatePictureMediaIdList { get; set; } + } + } + + /// + /// 获取或设置账户类型。 + /// + [Newtonsoft.Json.JsonProperty("bank_account_type")] + [System.Text.Json.Serialization.JsonPropertyName("bank_account_type")] + public int? BankAccountType { get; set; } + + /// + /// 获取或设置开户银行。 + /// + [Newtonsoft.Json.JsonProperty("account_bank")] + [System.Text.Json.Serialization.JsonPropertyName("account_bank")] + public string AccountBank { get; set; } = string.Empty; + + /// + /// 获取或设置开户名称。 + /// + [Newtonsoft.Json.JsonProperty("account_name")] + [System.Text.Json.Serialization.JsonPropertyName("account_name")] + public string AccountName { get; set; } = string.Empty; + + /// + /// 获取或设置银行账号。 + /// + [Newtonsoft.Json.JsonProperty("account_number")] + [System.Text.Json.Serialization.JsonPropertyName("account_number")] + public string AccountNumber { get; set; } = string.Empty; + + /// + /// 获取或设置开户银行省市编码。 + /// + [Newtonsoft.Json.JsonProperty("bank_address_code")] + [System.Text.Json.Serialization.JsonPropertyName("bank_address_code")] + public string BankAddressCode { get; set; } = string.Empty; + + /// + /// 获取或设置开户银行全称(含支行)。 + /// + [Newtonsoft.Json.JsonProperty("bank_name")] + [System.Text.Json.Serialization.JsonPropertyName("bank_name")] + public string? BankName { get; set; } + + /// + /// 获取或设置银行卡补充资料。 + /// + [Newtonsoft.Json.JsonProperty("bank_card_supplement")] + [System.Text.Json.Serialization.JsonPropertyName("bank_card_supplement")] + public Types.BankCardSupplement? BankCardSupplement { get; set; } + } + + public class Qualification + { + /// + /// 获取或设置图片 MediaId 列表。 + /// + [Newtonsoft.Json.JsonProperty("id")] + [System.Text.Json.Serialization.JsonPropertyName("id")] + public IList MediaId { get; set; } = new List(); + } + + public class AdditionalPicture : Qualification + { + } + } + + /// + /// 获取或设置业务申请编号。 + /// + [Newtonsoft.Json.JsonProperty("out_request_no")] + [System.Text.Json.Serialization.JsonPropertyName("out_request_no")] + public string OutRequestNumber { get; set; } = string.Empty; + + /// + /// 获取或设置主体类型。 + /// + [Newtonsoft.Json.JsonProperty("organization_type")] + [System.Text.Json.Serialization.JsonPropertyName("organization_type")] + public int OrganizationType { get; set; } + + /// + /// 获取或设置营业执照信息。 + /// + [Newtonsoft.Json.JsonProperty("business_license_info")] + [System.Text.Json.Serialization.JsonPropertyName("business_license_info")] + public Types.BusinessLicense BusinessLicense { get; set; } = new Types.BusinessLicense(); + + /// + /// 获取或设置金融机构信息。 + /// + [Newtonsoft.Json.JsonProperty("finance_institution_info")] + [System.Text.Json.Serialization.JsonPropertyName("finance_institution_info")] + public Types.FinanceInstitution? FinanceInstitution { get; set; } + + /// + /// 获取或设置商户简称。 + /// + [Newtonsoft.Json.JsonProperty("merchant_short_name")] + [System.Text.Json.Serialization.JsonPropertyName("merchant_short_name")] + public string MerchantShortName { get; set; } = string.Empty; + + /// + /// 获取或设置法人证件信息。 + /// + [Newtonsoft.Json.JsonProperty("id_card_info")] + [System.Text.Json.Serialization.JsonPropertyName("id_card_info")] + public Types.IdCard IdCard { get; set; } = new Types.IdCard(); + + /// + /// 获取或设置法人是否为受益人。 + /// + [Newtonsoft.Json.JsonProperty("owner")] + [System.Text.Json.Serialization.JsonPropertyName("owner")] + public bool? IsOwner { get; set; } + + /// + /// 获取或设置受益人证件信息。 + /// + [Newtonsoft.Json.JsonProperty("ubo_info")] + [System.Text.Json.Serialization.JsonPropertyName("ubo_info")] + public Types.UBO? UBO { get; set; } + + /// + /// 获取或设置超级管理员信息。 + /// + [Newtonsoft.Json.JsonProperty("contact_info")] + [System.Text.Json.Serialization.JsonPropertyName("contact_info")] + public Types.Contact Contact { get; set; } = new Types.Contact(); + + /// + /// 获取或设置结算账户信息。 + /// + [Newtonsoft.Json.JsonProperty("account_info")] + [System.Text.Json.Serialization.JsonPropertyName("account_info")] + public Types.BankAccount BankAccount { get; set; } = new Types.BankAccount(); + + /// + /// 获取或设置经营范围 ID。 + /// + [Newtonsoft.Json.JsonProperty("business_id")] + [System.Text.Json.Serialization.JsonPropertyName("business_id")] + public int BusinessId { get; set; } + + /// + /// 获取或设置特殊资质信息。 + /// + [Newtonsoft.Json.JsonProperty("qualifications")] + [System.Text.Json.Serialization.JsonPropertyName("qualifications")] + public Types.Qualification? Qualification { get; set; } + + /// + /// 获取或设置补充材料信息。 + /// + [Newtonsoft.Json.JsonProperty("business_addition_pics")] + [System.Text.Json.Serialization.JsonPropertyName("business_addition_pics")] + public Types.AdditionalPicture? AdditionalPicture { get; set; } + + /// + /// 获取或设置提现成员账号。 + /// + [Newtonsoft.Json.JsonProperty("userid")] + [System.Text.Json.Serialization.JsonPropertyName("userid")] + public string? UserId { get; set; } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinMiniAppPay/CgibinMiniAppPayApplyMechantResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinMiniAppPay/CgibinMiniAppPayApplyMechantResponse.cs new file mode 100644 index 00000000..130c98cc --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinMiniAppPay/CgibinMiniAppPayApplyMechantResponse.cs @@ -0,0 +1,15 @@ +namespace SKIT.FlurlHttpClient.Wechat.Work.Models +{ + /// + /// 表示 [POST] /cgi-bin/miniapppay/apply_mch 接口的响应。 + /// + public class CgibinMiniAppPayApplyMechantResponse : WechatWorkResponse + { + /// + /// 获取或设置错误描述。 + /// + [Newtonsoft.Json.JsonProperty("error_description")] + [System.Text.Json.Serialization.JsonPropertyName("error_description")] + public string? ErrorDescription { get; set; } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinMiniAppPay/CgibinMiniAppPayGetApplymentStatusRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinMiniAppPay/CgibinMiniAppPayGetApplymentStatusRequest.cs new file mode 100644 index 00000000..2c40c9b7 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinMiniAppPay/CgibinMiniAppPayGetApplymentStatusRequest.cs @@ -0,0 +1,15 @@ +namespace SKIT.FlurlHttpClient.Wechat.Work.Models +{ + /// + /// 表示 [POST] /cgi-bin/miniapppay/get_applyment_status 接口的请求。 + /// + public class CgibinMiniAppPayGetApplymentStatusRequest : WechatWorkRequest + { + /// + /// 获取或设置业务申请编号。 + /// + [Newtonsoft.Json.JsonProperty("out_request_no")] + [System.Text.Json.Serialization.JsonPropertyName("out_request_no")] + public string OutRequestNumber { get; set; } = string.Empty; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinMiniAppPay/CgibinMiniAppPayGetApplymentStatusResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinMiniAppPay/CgibinMiniAppPayGetApplymentStatusResponse.cs new file mode 100644 index 00000000..915a868e --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinMiniAppPay/CgibinMiniAppPayGetApplymentStatusResponse.cs @@ -0,0 +1,177 @@ +namespace SKIT.FlurlHttpClient.Wechat.Work.Models +{ + /// + /// 表示 [POST] /cgi-bin/miniapppay/get_applyment_status 接口的响应。 + /// + public class CgibinMiniAppPayGetApplymentStatusResponse : WechatWorkResponse + { + public static class Types + { + public class Applyment + { + public static class Types + { + public class AuditDetail + { + /// + /// 获取或设置参数名称。 + /// + [Newtonsoft.Json.JsonProperty("param_name")] + [System.Text.Json.Serialization.JsonPropertyName("param_name")] + public string ParameterName { get; set; } = default!; + + /// + /// 获取或设置驳回理由。 + /// + [Newtonsoft.Json.JsonProperty("reject_reason")] + [System.Text.Json.Serialization.JsonPropertyName("reject_reason")] + public string? RejectReason { get; set; } + } + + public class AccountValidation + { + /// + /// 获取或设置付款户名。 + /// + [Newtonsoft.Json.JsonProperty("account_name")] + [System.Text.Json.Serialization.JsonPropertyName("account_name")] + public string AccountName { get; set; } = default!; + + /// + /// 获取或设置付款卡号。 + /// + [Newtonsoft.Json.JsonProperty("account_no")] + [System.Text.Json.Serialization.JsonPropertyName("account_no")] + public string AccountNumber { get; set; } = default!; + + /// + /// 获取或设置收款开户银行。 + /// + [Newtonsoft.Json.JsonProperty("destination_account_bank")] + [System.Text.Json.Serialization.JsonPropertyName("destination_account_bank")] + public string DestinationAccountBank { get; set; } = default!; + + /// + /// 获取或设置收款户名。 + /// + [Newtonsoft.Json.JsonProperty("destination_account_name")] + [System.Text.Json.Serialization.JsonPropertyName("destination_account_name")] + public string DestinationAccountName { get; set; } = default!; + + /// + /// 获取或设置收款卡号。 + /// + [Newtonsoft.Json.JsonProperty("destination_account_number")] + [System.Text.Json.Serialization.JsonPropertyName("destination_account_number")] + public string DestinationAccountNumber { get; set; } = default!; + + /// + /// 获取或设置付款金额(单位:分)。 + /// + [Newtonsoft.Json.JsonProperty("pay_amount")] + [System.Text.Json.Serialization.JsonPropertyName("pay_amount")] + public int PayAmount { get; set; } + + /// + /// 获取或设置备注信息。 + /// + [Newtonsoft.Json.JsonProperty("remark")] + [System.Text.Json.Serialization.JsonPropertyName("remark")] + public string Remark { get; set; } = default!; + + /// + /// 获取或设置汇款截止时间字符串。 + /// + [Newtonsoft.Json.JsonProperty("deadline")] + [System.Text.Json.Serialization.JsonPropertyName("deadline")] + public string DeadlineString { get; set; } = default!; + } + } + + /// + /// 获取或设置申请状态。 + /// + [Newtonsoft.Json.JsonProperty("applyment_state")] + [System.Text.Json.Serialization.JsonPropertyName("applyment_state")] + public string ApplymentState { get; set; } = default!; + + /// + /// 获取或设置申请状态描述。 + /// + [Newtonsoft.Json.JsonProperty("applyment_state_desc")] + [System.Text.Json.Serialization.JsonPropertyName("applyment_state_desc")] + public string ApplymentStateDescription { get; set; } = default!; + + /// + /// 获取或设置签约状态。 + /// + [Newtonsoft.Json.JsonProperty("sign_state")] + [System.Text.Json.Serialization.JsonPropertyName("sign_state")] + public string SignState { get; set; } = default!; + + /// + /// 获取或设置签约链接。 + /// + [Newtonsoft.Json.JsonProperty("sign_url")] + [System.Text.Json.Serialization.JsonPropertyName("sign_url")] + public string? SignUrl { get; set; } + + /// + /// 获取或设置驳回原因详细信息列表。 + /// + [Newtonsoft.Json.JsonProperty("audit_detail")] + [System.Text.Json.Serialization.JsonPropertyName("audit_detail")] + public Types.AuditDetail[]? AuditDetailList { get; set; } + + /// + /// 获取或设置汇款账户验证信息。 + /// + [Newtonsoft.Json.JsonProperty("account_validation")] + [System.Text.Json.Serialization.JsonPropertyName("account_validation")] + public Types.AccountValidation? AccountValidation { get; set; } + + /// + /// 获取或设置电商平台二级商户号。 + /// + [Newtonsoft.Json.JsonProperty("sub_mchid")] + [System.Text.Json.Serialization.JsonPropertyName("sub_mchid")] + public string? SubMerchantId { get; set; } + + /// + /// 获取或设置法人验证链接。 + /// + [Newtonsoft.Json.JsonProperty("legal_validation_url")] + [System.Text.Json.Serialization.JsonPropertyName("legal_validation_url")] + public string? LegalPersonValidationUrl { get; set; } + } + } + + /// + /// 获取或设置申请单信息。 + /// + [Newtonsoft.Json.JsonProperty("status")] + [System.Text.Json.Serialization.JsonPropertyName("status")] + public Types.Applyment Applyment { get; set; } = default!; + + /// + /// 获取或设置申请单当前所处阶段。 + /// + [Newtonsoft.Json.JsonProperty("apply_state")] + [System.Text.Json.Serialization.JsonPropertyName("apply_state")] + public int ApplyState { get; set; } + + /// + /// 获取或设置当前签约阶段。 + /// + [Newtonsoft.Json.JsonProperty("real_sign_state")] + [System.Text.Json.Serialization.JsonPropertyName("real_sign_state")] + public int RealSignState { get; set; } + + /// + /// 获取或设置驳回理由。 + /// + [Newtonsoft.Json.JsonProperty("reject_reason")] + [System.Text.Json.Serialization.JsonPropertyName("reject_reason")] + public string? RejectReason { get; set; } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinMiniAppPay/CgibinMiniAppPayUploadImageRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinMiniAppPay/CgibinMiniAppPayUploadImageRequest.cs new file mode 100644 index 00000000..10f24222 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinMiniAppPay/CgibinMiniAppPayUploadImageRequest.cs @@ -0,0 +1,31 @@ +using System; + +namespace SKIT.FlurlHttpClient.Wechat.Work.Models +{ + /// + /// 表示 [POST] /cgi-bin/miniapppay/upload_image 接口的请求。 + /// + public class CgibinMiniAppPayUploadImageRequest : WechatWorkRequest + { + /// + /// 获取或设置图片文件字节数组。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public byte[] FileBytes { get; set; } = Array.Empty(); + + /// + /// 获取或设置图片文件名。如果不指定将由系统自动生成。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public string? FileName { get; set; } + + /// + /// 获取或设置图片文件 Conent-Type。如果不指定将由系统自动生成。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public string? FileContentType { get; set; } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinMiniAppPay/CgibinMiniAppPayUploadImageResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinMiniAppPay/CgibinMiniAppPayUploadImageResponse.cs new file mode 100644 index 00000000..a0803020 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinMiniAppPay/CgibinMiniAppPayUploadImageResponse.cs @@ -0,0 +1,15 @@ +namespace SKIT.FlurlHttpClient.Wechat.Work.Models +{ + /// + /// 表示 [POST] /cgi-bin/miniapppay/upload_image 接口的响应。 + /// + public class CgibinMiniAppPayUploadImageResponse : WechatWorkResponse + { + /// + /// 获取或设置图片 MediaId。 + /// + [Newtonsoft.Json.JsonProperty("open_wx_pay_media_id")] + [System.Text.Json.Serialization.JsonPropertyName("open_wx_pay_media_id")] + public string MediaId { get; set; } = default!; + } +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinMiniAppPay/CgibinMiniAppPayApplyMechantRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinMiniAppPay/CgibinMiniAppPayApplyMechantRequest.json new file mode 100644 index 00000000..13af2258 --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinMiniAppPay/CgibinMiniAppPayApplyMechantRequest.json @@ -0,0 +1,88 @@ +{ + "out_request_no": "xxxxx", + "organization_type": 0, + "business_license_info": { + "cert_type": 2389, + "business_license_copy_open_wx_pay_media_id": "xxxxx", + "business_license_number": "xxxxx", + "merchant_name": "xxxxx", + "legal_person": "xxxxx", + "company_address": "xxxxx", + "business_time_begin_time": "xxxx-xx-xx", + "business_time_end_time": "xxxx-xx-xx" + }, + "finance_institution_info": { + "finance_type": "xxxxx", + "finance_license_pics_open_wx_pay_media_id": [ + "xxxxx", + "xxxxx" + ] + }, + "merchant_short_name": "xxxxx", + "id_card_info": { + "id_card_copy_open_wx_pay_media_id": "xxxxx", + "id_card_national_open_wx_pay_media_id": "xxxxx", + "id_card_name": "xxxxx", + "id_card_number": "xxxxx", + "id_card_address": "xxxxx", + "id_card_valid_time_begin": "xxxx-xx-xx", + "id_card_valid_time": "xxxx-xx-xx", + "id_doc_type": 8 + }, + "owner": false, + "ubo_info": { + "id_card_copy_open_wx_pay_media_id": "xxxxx", + "id_card_national_open_wx_pay_media_id": "xxxxx", + "id_card_name": "xxxxx", + "id_card_number": "xxxxx", + "id_card_address": "xxxxx", + "id_card_valid_time_begin": "xxxx-xx-xx", + "id_card_valid_time": "xxxx-xx-xx", + "id_doc_type": 8 + }, + "contact_info": { + "contact_type": "66", + "contact_info": { + "id_card_copy_open_wx_pay_media_id": "xxxxx", + "id_card_national_open_wx_pay_media_id": "xxxxx", + "id_card_name": "xxxxx", + "id_card_number": "xxxxx", + "id_card_valid_time_begin": "xxxx-xx-xx", + "id_card_valid_time": "xxxx-xx-xx", + "id_doc_type": 8 + }, + "business_authorization_letter_open_wx_pay_media_id": "xxxxx", + "mobile_phone": "xxxxx", + "contact_email": "xxxxx" + }, + "account_info": { + "bank_account_type": 74, + "account_bank": "xxxxx", + "account_name": "xxxxx", + "bank_address_code": "xxxxx", + "bank_name": "xxxxx", + "account_number": "xxxxx", + "bank_card_supplement": { + "settlement_certificate_open_wx_pay_media_id": "xxxxx", + "relationship_certificate_open_wx_pay_media_id": "xxxxx", + "other_certificate_open_wx_pay_media_id": [ + "xxxxx", + "xxxxx" + ] + } + }, + "business_id": 1, + "qualifications": { + "id": [ + "xxxxx", + "xxxxx" + ] + }, + "business_addition_pics": { + "id": [ + "xxxxx", + "xxxxx" + ] + }, + "userid": "xxxxx" +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinMiniAppPay/CgibinMiniAppPayApplyMechantResponse.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinMiniAppPay/CgibinMiniAppPayApplyMechantResponse.json new file mode 100644 index 00000000..79cb8c9c --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinMiniAppPay/CgibinMiniAppPayApplyMechantResponse.json @@ -0,0 +1,5 @@ +{ + "errcode": 0, + "errmsg": "ok", + "error_description": "参数错误" +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinMiniAppPay/CgibinMiniAppPayGetApplymentStatusRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinMiniAppPay/CgibinMiniAppPayGetApplymentStatusRequest.json new file mode 100644 index 00000000..6b076f4b --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinMiniAppPay/CgibinMiniAppPayGetApplymentStatusRequest.json @@ -0,0 +1,3 @@ +{ + "out_request_no": "xxxxx" +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinMiniAppPay/CgibinMiniAppPayGetApplymentStatusResponse.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinMiniAppPay/CgibinMiniAppPayGetApplymentStatusResponse.json new file mode 100644 index 00000000..f02e4bbd --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinMiniAppPay/CgibinMiniAppPayGetApplymentStatusResponse.json @@ -0,0 +1,35 @@ +{ + "errcode": 0, + "errmsg": "ok", + "status": { + "applyment_state": "xxxxx", + "applyment_state_desc": "xxxxx", + "sign_state": "xxxxx", + "sign_url": "xxxxx", + "sub_mchid": "xxxxx", + "audit_detail": [ + { + "param_name": "xxxxx", + "reject_reason": "xxxxx" + }, + { + "param_name": "xxxxx", + "reject_reason": "xxxxx" + } + ], + "account_validation": { + "account_name": "xxxxx", + "account_no": "xxxxx", + "pay_amount": 0, + "destination_account_number": "xxxxx", + "destination_account_name": "xxxxx", + "destination_account_bank": "xxxxx", + "remark": "xxxxx", + "deadline": "xxxxx" + }, + "legal_validation_url": "xxxxx" + }, + "apply_state": 1, + "real_sign_state": 2, + "reject_reason": "xxxxx" +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinMiniAppPay/CgibinMiniAppPayUploadImageResponse.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinMiniAppPay/CgibinMiniAppPayUploadImageResponse.json new file mode 100644 index 00000000..b294c8da --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinMiniAppPay/CgibinMiniAppPayUploadImageResponse.json @@ -0,0 +1,5 @@ +{ + "errcode": 0, + "errmsg": "", + "open_wx_pay_media_id": "NF_LnvqOch94lvxMB5fUWw8fbKvYrF_EcH239fgIjIkG_q4Q5kyzEGpJtddhyfZY" +}