feat(tenpayv3): 新增出租车电子发票相关接口

This commit is contained in:
Fu Diwei
2023-03-31 11:26:58 +08:00
parent b55561aef1
commit 770ee8d590
42 changed files with 1789 additions and 7 deletions

View File

@@ -2,7 +2,6 @@ using System;
using System.Net.Http;
using System.Threading;
using System.Threading.Tasks;
using Flurl;
using Flurl.Http;
namespace SKIT.FlurlHttpClient.Wechat.TenpayV3

View File

@@ -0,0 +1,225 @@
using System;
using System.Net.Http;
using System.Threading;
using System.Threading.Tasks;
using Flurl.Http;
namespace SKIT.FlurlHttpClient.Wechat.TenpayV3
{
/// <summary>
/// 为 <see cref="WechatTenpayClient"/> 提供出租车电子发票相关的 API 扩展方法。
/// </summary>
public static class WechatTenpayClientExecuteTaxiInvoiceExtensions
{
#region TaxiCompany
/// <summary>
/// <para>异步调用 [POST] /taxi-invoice/taxi-company/create-taxi-company 接口。</para>
/// <para>REF: https://pay.weixin.qq.com/docs/partner/apis/taxi-fapiao/taxi-company/create-taxi-company.html </para>
/// </summary>
/// <param name="client"></param>
/// <param name="request"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public static async Task<Models.CreateTaxiInvoiceTaxiCompanyResponse> ExecuteCreateTaxiInvoiceTaxiCompanyAsync(this WechatTenpayClient client, Models.CreateTaxiInvoiceTaxiCompanyRequest 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, "taxi-invoice", "taxi-company", "create-taxi-company");
return await client.SendRequestWithJsonAsync<Models.CreateTaxiInvoiceTaxiCompanyResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
}
/// <summary>
/// <para>异步调用 [GET] /taxi-invoice/taxi-companies/{company_mchid} 接口。</para>
/// <para>REF: https://pay.weixin.qq.com/docs/partner/apis/taxi-fapiao/taxi-company/query-taxi-company.html </para>
/// </summary>
/// <param name="client"></param>
/// <param name="request"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public static async Task<Models.GetTaxiInvoiceTaxiCompanyResponse> ExecuteGetTaxiInvoiceTaxiCompanyAsync(this WechatTenpayClient client, Models.GetTaxiInvoiceTaxiCompanyRequest 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, "taxi-invoice", "taxi-companies", request.CompanyMerchantId)
.SetQueryParam("region_id", request.RegionId);
return await client.SendRequestWithJsonAsync<Models.GetTaxiInvoiceTaxiCompanyResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
}
#endregion
#region Taxi
/// <summary>
/// <para>异步调用 [POST] /taxi-invoice/taxi/update-taxi 接口。</para>
/// <para>REF: https://pay.weixin.qq.com/docs/partner/apis/taxi-fapiao/taxi/update-taxi.html </para>
/// </summary>
/// <param name="client"></param>
/// <param name="request"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public static async Task<Models.UpdateTaxiInvoiceTaxiResponse> ExecuteUpdateTaxiInvoiceTaxiAsync(this WechatTenpayClient client, Models.UpdateTaxiInvoiceTaxiRequest 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, "taxi-invoice", "taxi", "update-taxi");
return await client.SendRequestWithJsonAsync<Models.UpdateTaxiInvoiceTaxiResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
}
/// <summary>
/// <para>异步调用 [GET] /taxi-invoice/taxies/{plate_number} 接口。</para>
/// <para>REF: https://pay.weixin.qq.com/docs/partner/apis/taxi-fapiao/taxi/query-taxi.html </para>
/// </summary>
/// <param name="client"></param>
/// <param name="request"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public static async Task<Models.GetTaxiInvoiceTaxiResponse> ExecuteGetTaxiInvoiceTaxiAsync(this WechatTenpayClient client, Models.GetTaxiInvoiceTaxiRequest 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, "taxi-invoice", "taxies", request.PlateNumber)
.SetQueryParam("region_id", request.RegionId);
return await client.SendRequestWithJsonAsync<Models.GetTaxiInvoiceTaxiResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
}
#endregion
#region Driver
/// <summary>
/// <para>异步调用 [POST] /taxi-invoice/driver/update-driver 接口。</para>
/// <para>REF: https://pay.weixin.qq.com/docs/partner/apis/taxi-fapiao/driver/update-driver.html </para>
/// </summary>
/// <param name="client"></param>
/// <param name="request"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public static async Task<Models.UpdateTaxiInvoiceDriverResponse> ExecuteUpdateTaxiInvoiceDriverAsync(this WechatTenpayClient client, Models.UpdateTaxiInvoiceDriverRequest 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, "taxi-invoice", "driver", "update-driver");
return await client.SendRequestWithJsonAsync<Models.UpdateTaxiInvoiceDriverResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
}
/// <summary>
/// <para>异步调用 [GET] /taxi-invoice/drivers/{driver_license} 接口。</para>
/// <para>REF: https://pay.weixin.qq.com/docs/partner/apis/taxi-fapiao/driver/query-driver.html </para>
/// </summary>
/// <param name="client"></param>
/// <param name="request"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public static async Task<Models.GetTaxiInvoiceDriverResponse> ExecuteGetTaxiInvoiceDriverAsync(this WechatTenpayClient client, Models.GetTaxiInvoiceDriverRequest 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, "taxi-invoice", "drivers", request.DriverLicenseNumber)
.SetQueryParam("region_id", request.RegionId);
return await client.SendRequestWithJsonAsync<Models.GetTaxiInvoiceDriverResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
}
#endregion
#region Attendance
/// <summary>
/// <para>异步调用 [POST] /taxi-invoice/attendance/punch 接口。</para>
/// <para>REF: https://pay.weixin.qq.com/docs/partner/apis/taxi-fapiao/attendance/punch-attendance.html </para>
/// </summary>
/// <param name="client"></param>
/// <param name="request"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public static async Task<Models.PunchTaxiInvoiceAttendanceResponse> ExecutePunchTaxiInvoiceAttendanceAsync(this WechatTenpayClient client, Models.PunchTaxiInvoiceAttendanceRequest 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, "taxi-invoice", "attendance", "punch");
return await client.SendRequestWithJsonAsync<Models.PunchTaxiInvoiceAttendanceResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
}
#endregion
#region UserTaxiOrder
/// <summary>
/// <para>异步调用 [GET] /taxi-invoice/user-taxi-order/find-by-token 接口。</para>
/// <para>REF: https://pay.weixin.qq.com/docs/partner/apis/taxi-fapiao/user-taxi-order/query-user-taxi-order-by-token.html </para>
/// </summary>
/// <param name="client"></param>
/// <param name="request"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public static async Task<Models.GetTaxiInvoiceUserTaxiOrderByTokenResponse> ExecuteGetTaxiInvoiceUserTaxiOrderByTokenAsync(this WechatTenpayClient client, Models.GetTaxiInvoiceUserTaxiOrderByTokenRequest 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, "taxi-invoice", "user-taxi-order", "find-by-token")
.SetQueryParam("token", request.Token)
.SetQueryParam("appid", request.AppId)
.SetQueryParam("openid", request.OpenId)
.SetQueryParam("auth_mode", request.AuthMode)
.SetQueryParam("region_id", request.RegionId);
return await client.SendRequestWithJsonAsync<Models.GetTaxiInvoiceUserTaxiOrderByTokenResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
}
#endregion
#region Card
/// <summary>
/// <para>异步调用 [POST] /taxi-invoice/cards/upload-file 接口。</para>
/// <para>REF: https://pay.weixin.qq.com/docs/partner/apis/taxi-fapiao/taxi-invoice-card/upload-taxi-invoice-card-file.html </para>
/// </summary>
/// <param name="client"></param>
/// <param name="request"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public static async Task<Models.UploadTaxiInvoiceCardFileResponse> ExecuteUploadTaxiInvoiceCardFileAsync(this WechatTenpayClient client, Models.UploadTaxiInvoiceCardFileRequest 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, "taxi-invoice", "cards", "upload-file");
using var httpContent = Utilities.FileHttpContentBuilder.Build(fileName: "file.pdf", fileBytes: request.FileBytes, fileContentType: "application/pdf", fileMetaJson: client.JsonSerializer.Serialize(request));
return await client.SendRequestAsync<Models.UploadTaxiInvoiceCardFileResponse>(flurlReq, httpContent: httpContent, cancellationToken: cancellationToken);
}
/// <summary>
/// <para>异步调用 [POST] /taxi-invoice/cards 接口。</para>
/// <para>REF: https://pay.weixin.qq.com/docs/partner/apis/taxi-fapiao/taxi-invoice-card/create-taxi-invoice-card.html </para>
/// </summary>
/// <param name="client"></param>
/// <param name="request"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public static async Task<Models.CreateTaxiInvoiceCardResponse> ExecuteCreateTaxiInvoiceCardAsync(this WechatTenpayClient client, Models.CreateTaxiInvoiceCardRequest 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, "taxi-invoice", "cards");
return await client.SendRequestWithJsonAsync<Models.CreateTaxiInvoiceCardResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
}
#endregion
}
}

View File

@@ -52,7 +52,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
}
/// <summary>
/// 获取或设置品牌主商户号
/// 获取或设置品牌主商户号。
/// </summary>
[Newtonsoft.Json.JsonProperty("brand_mchid")]
[System.Text.Json.Serialization.JsonPropertyName("brand_mchid")]

View File

@@ -6,7 +6,7 @@
public class CreateBrandProfitSharingOrderResponse : GetBrandProfitSharingOrderByOutOrderNumberResponse
{
/// <summary>
/// 获取或设置品牌主商户号
/// 获取或设置品牌主商户号。
/// </summary>
[Newtonsoft.Json.JsonProperty("brand_mchid")]
[System.Text.Json.Serialization.JsonPropertyName("brand_mchid")]

View File

@@ -150,7 +150,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
}
/// <summary>
/// 获取或设置从业机构特约商户号
/// 获取或设置从业机构特约商户号。
/// </summary>
[Newtonsoft.Json.JsonProperty("sub_mchid")]
[System.Text.Json.Serialization.JsonPropertyName("sub_mchid")]

View File

@@ -86,7 +86,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
public string ChannelId { get; set; } = string.Empty;
/// <summary>
/// 获取或设置从业机构特约商户号
/// 获取或设置从业机构特约商户号。
/// </summary>
[Newtonsoft.Json.JsonProperty("sub_mchid")]
[System.Text.Json.Serialization.JsonPropertyName("sub_mchid")]

View File

@@ -15,7 +15,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
public string ApplicationState { get; set; } = default!;
/// <summary>
/// 获取或设置从业机构特约商户号
/// 获取或设置从业机构特约商户号。
/// </summary>
[Newtonsoft.Json.JsonProperty("sub_mchid")]
[System.Text.Json.Serialization.JsonPropertyName("sub_mchid")]

View File

@@ -0,0 +1,135 @@
using System;
using System.Globalization;
namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
{
/// <summary>
/// <para>表示 [POST] /taxi-invoice/attendance/punch 接口的请求。</para>
/// </summary>
public class PunchTaxiInvoiceAttendanceRequest : WechatTenpayRequest
{
internal static class Converters
{
internal class RequestPropertyEventTimeNewtonsoftJsonConverter : Newtonsoft.Json.JsonConverter<DateTimeOffset>
{
internal const string DATETIME_FORMAT = "yyyy-MM-dd'T'HH:mm:ss.fffzzz";
public override bool CanRead { get { return true; } }
public override bool CanWrite { get { return true; } }
public override DateTimeOffset ReadJson(Newtonsoft.Json.JsonReader reader, Type objectType, DateTimeOffset existingValue, bool hasExistingValue, Newtonsoft.Json.JsonSerializer serializer)
{
switch (reader.TokenType)
{
case Newtonsoft.Json.JsonToken.Null:
{
return existingValue;
}
case Newtonsoft.Json.JsonToken.String:
{
string? value = serializer.Deserialize<string>(reader);
if (string.IsNullOrEmpty(value))
return existingValue;
if (DateTimeOffset.TryParseExact(value, DATETIME_FORMAT, DateTimeFormatInfo.InvariantInfo, DateTimeStyles.None, out var result))
return result;
if (DateTimeOffset.TryParse(value, out result))
return result;
throw new Newtonsoft.Json.JsonSerializationException("Could not parse String '" + value + "' to DateTimeOffset.");
}
case Newtonsoft.Json.JsonToken.Date:
{
reader.DateFormatString = DATETIME_FORMAT;
return serializer.Deserialize<DateTimeOffset>(reader);
}
}
throw new Newtonsoft.Json.JsonSerializationException($"Unexpected token type '{reader.TokenType}' when deserializing. Path '{reader.Path}'.");
}
public override void WriteJson(Newtonsoft.Json.JsonWriter writer, DateTimeOffset value, Newtonsoft.Json.JsonSerializer serializer)
{
writer.WriteValue(value.ToString(DATETIME_FORMAT, DateTimeFormatInfo.InvariantInfo));
}
}
internal class RequestPropertyEventTimeSystemTextJsonConverter : System.Text.Json.Serialization.JsonConverter<DateTimeOffset>
{
internal const string DATETIME_FORMAT = "yyyy-MM-dd'T'HH:mm:ss.fffzzz";
public override DateTimeOffset Read(ref System.Text.Json.Utf8JsonReader reader, Type typeToConvert, System.Text.Json.JsonSerializerOptions options)
{
switch (reader.TokenType)
{
case System.Text.Json.JsonTokenType.Null:
{
return default!;
}
case System.Text.Json.JsonTokenType.String:
{
string? value = reader.GetString();
if (string.IsNullOrEmpty(value))
return default;
if (DateTimeOffset.TryParseExact(value, DATETIME_FORMAT, DateTimeFormatInfo.InvariantInfo, DateTimeStyles.None, out var result))
return result;
if (DateTimeOffset.TryParse(value, out result))
return result;
throw new System.Text.Json.JsonException("Could not parse String '" + value + "' to DateTimeOffset.");
}
}
throw new System.Text.Json.JsonException($"Unexpected JSON token type '{reader.TokenType}' when reading.");
}
public override void Write(System.Text.Json.Utf8JsonWriter writer, DateTimeOffset value, System.Text.Json.JsonSerializerOptions options)
{
writer.WriteStringValue(value.ToString(DATETIME_FORMAT, DateTimeFormatInfo.InvariantInfo));
}
}
}
/// <summary>
/// 获取或设置车牌号。
/// </summary>
[Newtonsoft.Json.JsonProperty("plate_number")]
[System.Text.Json.Serialization.JsonPropertyName("plate_number")]
public string PlateNumber { get; set; } = string.Empty;
/// <summary>
/// 获取或设置司机资格证号。
/// </summary>
[Newtonsoft.Json.JsonProperty("driver_license")]
[System.Text.Json.Serialization.JsonPropertyName("driver_license")]
public string DriverLicenseNumber { get; set; } = string.Empty;
/// <summary>
/// 获取或设置事件时间。
/// </summary>
[Newtonsoft.Json.JsonProperty("event_time")]
[Newtonsoft.Json.JsonConverter(typeof(Converters.RequestPropertyEventTimeNewtonsoftJsonConverter))]
[System.Text.Json.Serialization.JsonPropertyName("event_time")]
[System.Text.Json.Serialization.JsonConverter(typeof(Converters.RequestPropertyEventTimeSystemTextJsonConverter))]
public DateTimeOffset EventTime { get; set; }
/// <summary>
/// 获取或设置事件类型。
/// </summary>
[Newtonsoft.Json.JsonProperty("event_type")]
[System.Text.Json.Serialization.JsonPropertyName("event_type")]
public string EventType { get; set; } = string.Empty;
/// <summary>
/// 获取或设置行政区划代码。
/// </summary>
[Newtonsoft.Json.JsonProperty("region_id")]
[System.Text.Json.Serialization.JsonPropertyName("region_id")]
public int RegionId { get; set; }
}
}

View File

@@ -0,0 +1,9 @@
namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
{
/// <summary>
/// <para>表示 [POST] /taxi-invoice/attendance/punch 接口的响应。</para>
/// </summary>
public class PunchTaxiInvoiceAttendanceResponse : WechatTenpayResponse
{
}
}

View File

@@ -0,0 +1,371 @@
using System;
using System.Collections.Generic;
namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
{
/// <summary>
/// <para>表示 [POST] /taxi-invoice/cards 接口的请求。</para>
/// </summary>
public class CreateTaxiInvoiceCardRequest : WechatTenpayRequest
{
public static class Types
{
public class InvoiceCard
{
public static class Types
{
public class Buyer
{
/// <summary>
/// 获取或设置购买方类型。
/// </summary>
[Newtonsoft.Json.JsonProperty("type")]
[System.Text.Json.Serialization.JsonPropertyName("type")]
public string Type { get; set; } = string.Empty;
/// <summary>
/// 获取或设置购买方名称。
/// </summary>
[Newtonsoft.Json.JsonProperty("name")]
[System.Text.Json.Serialization.JsonPropertyName("name")]
public string Name { get; set; } = string.Empty;
/// <summary>
/// 获取或设置纳税人识别号。
/// </summary>
[Newtonsoft.Json.JsonProperty("taxpayer_id")]
[System.Text.Json.Serialization.JsonPropertyName("taxpayer_id")]
public string? TaxPayerId { get; set; }
/// <summary>
/// 获取或设置地址。
/// </summary>
[Newtonsoft.Json.JsonProperty("address")]
[System.Text.Json.Serialization.JsonPropertyName("address")]
public string? Address { get; set; }
/// <summary>
/// 获取或设置电话。
/// </summary>
[Newtonsoft.Json.JsonProperty("telephone")]
[System.Text.Json.Serialization.JsonPropertyName("telephone")]
public string? PhoneNumber { get; set; }
/// <summary>
/// 获取或设置开户银行。
/// </summary>
[Newtonsoft.Json.JsonProperty("bank_name")]
[System.Text.Json.Serialization.JsonPropertyName("bank_name")]
public string? BankName { get; set; }
/// <summary>
/// 获取或设置银行账号。
/// </summary>
[Newtonsoft.Json.JsonProperty("bank_account")]
[System.Text.Json.Serialization.JsonPropertyName("bank_account")]
public string? BankAccountNumber { get; set; }
}
public class Seller
{
/// <summary>
/// 获取或设置销售方名称。
/// </summary>
[Newtonsoft.Json.JsonProperty("name")]
[System.Text.Json.Serialization.JsonPropertyName("name")]
public string Name { get; set; } = string.Empty;
/// <summary>
/// 获取或设置纳税人识别号。
/// </summary>
[Newtonsoft.Json.JsonProperty("taxpayer_id")]
[System.Text.Json.Serialization.JsonPropertyName("taxpayer_id")]
public string TaxPayerId { get; set; } = string.Empty;
/// <summary>
/// 获取或设置地址。
/// </summary>
[Newtonsoft.Json.JsonProperty("address")]
[System.Text.Json.Serialization.JsonPropertyName("address")]
public string? Address { get; set; }
/// <summary>
/// 获取或设置电话。
/// </summary>
[Newtonsoft.Json.JsonProperty("telephone")]
[System.Text.Json.Serialization.JsonPropertyName("telephone")]
public string? PhoneNumber { get; set; }
/// <summary>
/// 获取或设置开户银行。
/// </summary>
[Newtonsoft.Json.JsonProperty("bank_name")]
[System.Text.Json.Serialization.JsonPropertyName("bank_name")]
public string? BankName { get; set; }
/// <summary>
/// 获取或设置银行账号。
/// </summary>
[Newtonsoft.Json.JsonProperty("bank_account")]
[System.Text.Json.Serialization.JsonPropertyName("bank_account")]
public string? BankAccountNumber { get; set; }
}
public class Extra
{
/// <summary>
/// 获取或设置收款人。
/// </summary>
[Newtonsoft.Json.JsonProperty("payee")]
[System.Text.Json.Serialization.JsonPropertyName("payee")]
public string? Payee { get; set; }
/// <summary>
/// 获取或设置复核人。
/// </summary>
[Newtonsoft.Json.JsonProperty("reviewer")]
[System.Text.Json.Serialization.JsonPropertyName("reviewer")]
public string? Reviewer { get; set; }
/// <summary>
/// 获取或设置开票人。
/// </summary>
[Newtonsoft.Json.JsonProperty("drawer")]
[System.Text.Json.Serialization.JsonPropertyName("drawer")]
public string Drawer { get; set; } = string.Empty;
}
public class LineItem
{
/// <summary>
/// 获取或设置货物或应税劳务或服务编码。
/// </summary>
[Newtonsoft.Json.JsonProperty("tax_code")]
[System.Text.Json.Serialization.JsonPropertyName("tax_code")]
public string TaxCode { get; set; } = string.Empty;
/// <summary>
/// 获取或设置货物或应税劳务或服务名称。
/// </summary>
[Newtonsoft.Json.JsonProperty("goods_name")]
[System.Text.Json.Serialization.JsonPropertyName("goods_name")]
public string GoodsName { get; set; } = string.Empty;
/// <summary>
/// 获取或设置规格型号。
/// </summary>
[Newtonsoft.Json.JsonProperty("specification")]
[System.Text.Json.Serialization.JsonPropertyName("specification")]
public string? Specification { get; set; }
/// <summary>
/// 获取或设置单位。
/// </summary>
[Newtonsoft.Json.JsonProperty("unit")]
[System.Text.Json.Serialization.JsonPropertyName("unit")]
public string? Unit { get; set; }
/// <summary>
/// 获取或设置数量。
/// </summary>
[Newtonsoft.Json.JsonProperty("quantity")]
[System.Text.Json.Serialization.JsonPropertyName("quantity")]
public int Quantity { get; set; }
/// <summary>
/// 获取或设置单价单位10^-6分
/// </summary>
[Newtonsoft.Json.JsonProperty("unit_price")]
[System.Text.Json.Serialization.JsonPropertyName("unit_price")]
public long UnitPrice { get; set; }
/// <summary>
/// 获取或设置单行金额(单位:分)。
/// </summary>
[Newtonsoft.Json.JsonProperty("amount")]
[System.Text.Json.Serialization.JsonPropertyName("amount")]
public int Amount { get; set; }
/// <summary>
/// 获取或设置单行税额(单位:分)。
/// </summary>
[Newtonsoft.Json.JsonProperty("tax_amount")]
[System.Text.Json.Serialization.JsonPropertyName("tax_amount")]
public int TaxAmount { get; set; }
/// <summary>
/// 获取或设置单行合计(单位:分)。
/// </summary>
[Newtonsoft.Json.JsonProperty("total_amount")]
[System.Text.Json.Serialization.JsonPropertyName("total_amount")]
public int TotalAmount { get; set; }
/// <summary>
/// 获取或设置税率(单位:万分数)。
/// </summary>
[Newtonsoft.Json.JsonProperty("tax_rate")]
[System.Text.Json.Serialization.JsonPropertyName("tax_rate")]
public int TaxRate { get; set; }
/// <summary>
/// 获取或设置税收优惠政策标识。
/// <para>默认值NO_FAVORABLE</para>
/// </summary>
[Newtonsoft.Json.JsonProperty("tax_prefer_mark")]
[System.Text.Json.Serialization.JsonPropertyName("tax_prefer_mark")]
public string TaxPreferMark { get; set; } = "NO_FAVORABLE";
/// <summary>
/// 获取或设置是否是折扣行。
/// </summary>
[Newtonsoft.Json.JsonProperty("discount")]
[System.Text.Json.Serialization.JsonPropertyName("discount")]
public bool IsDiscount { get; set; }
}
}
/// <summary>
/// 获取或设置发票文件 MediaId。
/// </summary>
[Newtonsoft.Json.JsonProperty("fapiao_media_id")]
[System.Text.Json.Serialization.JsonPropertyName("fapiao_media_id")]
public string InvoiceMediaId { get; set; } = string.Empty;
/// <summary>
/// 获取或设置发票号码。
/// </summary>
[Newtonsoft.Json.JsonProperty("fapiao_number")]
[System.Text.Json.Serialization.JsonPropertyName("fapiao_number")]
public string InvoiceNumber { get; set; } = string.Empty;
/// <summary>
/// 获取或设置发票代码。
/// </summary>
[Newtonsoft.Json.JsonProperty("fapiao_code")]
[System.Text.Json.Serialization.JsonPropertyName("fapiao_code")]
public string InvoiceCode { get; set; } = string.Empty;
/// <summary>
/// 获取或设置开票时间。
/// </summary>
[Newtonsoft.Json.JsonProperty("fapiao_time")]
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.RFC3339DateTimeOffsetConverter))]
[System.Text.Json.Serialization.JsonPropertyName("fapiao_time")]
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.RFC3339DateTimeOffsetConverter))]
public DateTimeOffset InvoiceTime { get; set; }
/// <summary>
/// 获取或设置校验码。
/// </summary>
[Newtonsoft.Json.JsonProperty("check_code")]
[System.Text.Json.Serialization.JsonPropertyName("check_code")]
public string CheckCode { get; set; } = string.Empty;
/// <summary>
/// 获取或设置密码。
/// </summary>
[Newtonsoft.Json.JsonProperty("password")]
[System.Text.Json.Serialization.JsonPropertyName("password")]
public string Password { get; set; } = string.Empty;
/// <summary>
/// 获取或设置总价税合计(单位:分)。
/// </summary>
[Newtonsoft.Json.JsonProperty("total_amount")]
[System.Text.Json.Serialization.JsonPropertyName("total_amount")]
public int TotalAmount { get; set; }
/// <summary>
/// 获取或设置总税额(单位:分)。
/// </summary>
[Newtonsoft.Json.JsonProperty("tax_amount")]
[System.Text.Json.Serialization.JsonPropertyName("tax_amount")]
public int TaxAmount { get; set; }
/// <summary>
/// 获取或设置总金额(单位:分)。
/// </summary>
[Newtonsoft.Json.JsonProperty("amount")]
[System.Text.Json.Serialization.JsonPropertyName("amount")]
public int Amount { get; set; }
/// <summary>
/// 获取或设置购买方信息。
/// </summary>
[Newtonsoft.Json.JsonProperty("buyer_information")]
[System.Text.Json.Serialization.JsonPropertyName("buyer_information")]
public Types.Buyer Buyer { get; set; } = new Types.Buyer();
/// <summary>
/// 获取或设置销售方信息。
/// </summary>
[Newtonsoft.Json.JsonProperty("seller_information")]
[System.Text.Json.Serialization.JsonPropertyName("seller_information")]
public Types.Seller Seller { get; set; } = new Types.Seller();
/// <summary>
/// 获取或设置额外信息。
/// </summary>
[Newtonsoft.Json.JsonProperty("extra_information")]
[System.Text.Json.Serialization.JsonPropertyName("extra_information")]
public Types.Extra Extra { get; set; } = new Types.Extra();
/// <summary>
/// 获取或设置发票行列表。
/// </summary>
[Newtonsoft.Json.JsonProperty("items")]
[System.Text.Json.Serialization.JsonPropertyName("items")]
public IList<Types.LineItem>? LineItemList { get; set; }
/// <summary>
/// 获取或设置备注信息。
/// </summary>
[Newtonsoft.Json.JsonProperty("remark")]
[System.Text.Json.Serialization.JsonPropertyName("remark")]
public string? Remark { get; set; }
}
}
/// <summary>
/// 获取或设置获取乘客行程单详情的凭证。
/// </summary>
[Newtonsoft.Json.JsonProperty("token")]
[System.Text.Json.Serialization.JsonPropertyName("token")]
public string Token { get; set; } = string.Empty;
/// <summary>
/// 获取或设置公司商户号。
/// </summary>
[Newtonsoft.Json.JsonProperty("company_mchid")]
[System.Text.Json.Serialization.JsonPropertyName("company_mchid")]
public string CompanyMerchantId { get; set; } = string.Empty;
/// <summary>
/// 获取或设置微信 AppId。
/// </summary>
[Newtonsoft.Json.JsonProperty("appid")]
[System.Text.Json.Serialization.JsonPropertyName("appid")]
public string AppId { get; set; } = string.Empty;
/// <summary>
/// 获取或设置用户的 OpenId。
/// </summary>
[Newtonsoft.Json.JsonProperty("openid")]
[System.Text.Json.Serialization.JsonPropertyName("openid")]
public string OpenId { get; set; } = string.Empty;
/// <summary>
/// 获取或设置行政区划代码。
/// </summary>
[Newtonsoft.Json.JsonProperty("region_id")]
[System.Text.Json.Serialization.JsonPropertyName("region_id")]
public int RegionId { get; set; }
/// <summary>
/// 获取或设置发票卡券信息。
/// </summary>
[Newtonsoft.Json.JsonProperty("fapiao_card_information")]
[System.Text.Json.Serialization.JsonPropertyName("fapiao_card_information")]
public Types.InvoiceCard InvoiceCard { get; set; } = new Types.InvoiceCard();
}
}

View File

@@ -0,0 +1,9 @@
namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
{
/// <summary>
/// <para>表示 [POST] /taxi-invoice/cards 接口的响应。</para>
/// </summary>
public class CreateTaxiInvoiceCardResponse : WechatTenpayResponse
{
}
}

View File

@@ -0,0 +1,45 @@
using System;
namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
{
/// <summary>
/// <para>表示 [POST] /taxi-invoice/cards/upload-file 接口的请求。</para>
/// </summary>
public class UploadTaxiInvoiceCardFileRequest : WechatTenpayRequest
{
/// <summary>
/// 获取或设置文件字节数组。
/// </summary>
[Newtonsoft.Json.JsonIgnore]
[System.Text.Json.Serialization.JsonIgnore]
public byte[] FileBytes { get; set; } = Array.Empty<byte>();
/// <summary>
/// 获取或设置文件内容哈希算法。
/// </summary>
[Newtonsoft.Json.JsonProperty("digest_algorithm")]
[System.Text.Json.Serialization.JsonPropertyName("digest_algorithm")]
public string FileHashAlgorithm { get; set; } = string.Empty;
/// <summary>
/// 获取或设置文件内容哈希值。
/// </summary>
[Newtonsoft.Json.JsonProperty("digest")]
[System.Text.Json.Serialization.JsonPropertyName("digest")]
public string FileHashValue { get; set; } = string.Empty;
/// <summary>
/// 获取或设置公司商户号。
/// </summary>
[Newtonsoft.Json.JsonProperty("company_mchid")]
[System.Text.Json.Serialization.JsonPropertyName("company_mchid")]
public string CompanyMerchantId { get; set; } = string.Empty;
/// <summary>
/// 获取或设置行政区划代码。
/// </summary>
[Newtonsoft.Json.JsonProperty("region_id")]
[System.Text.Json.Serialization.JsonPropertyName("region_id")]
public int RegionId { get; set; }
}
}

View File

@@ -0,0 +1,15 @@
namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
{
/// <summary>
/// <para>表示 [POST] /taxi-invoice/cards/upload-file 接口的响应。</para>
/// </summary>
public class UploadTaxiInvoiceCardFileResponse : WechatTenpayResponse
{
/// <summary>
/// 获取或设置发票文件 MediaId。
/// </summary>
[Newtonsoft.Json.JsonProperty("fapiao_media_id")]
[System.Text.Json.Serialization.JsonPropertyName("fapiao_media_id")]
public string InvoiceMediaId { get; set; } = default!;
}
}

View File

@@ -0,0 +1,22 @@
namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
{
/// <summary>
/// <para>表示 [GET] /taxi-invoice/drivers/{driver_license} 接口的请求。</para>
/// </summary>
public class GetTaxiInvoiceDriverRequest : WechatTenpayRequest
{
/// <summary>
/// 获取或设置司机资格证号。
/// </summary>
[Newtonsoft.Json.JsonIgnore]
[System.Text.Json.Serialization.JsonIgnore]
public string DriverLicenseNumber { get; set; } = string.Empty;
/// <summary>
/// 获取或设置行政区划代码。
/// </summary>
[Newtonsoft.Json.JsonIgnore]
[System.Text.Json.Serialization.JsonIgnore]
public int RegionId { get; set; }
}
}

View File

@@ -0,0 +1,118 @@
namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
{
/// <summary>
/// <para>表示 [GET] /taxi-invoice/drivers/{driver_license} 接口的响应。</para>
/// </summary>
public class GetTaxiInvoiceDriverResponse : WechatTenpayResponse
{
public static class Types
{
public class Photo
{
public static class Types
{
public class Digest
{
/// <summary>
/// 获取或设置哈希类型。
/// </summary>
[Newtonsoft.Json.JsonProperty("hash_type")]
[System.Text.Json.Serialization.JsonPropertyName("hash_type")]
public string HashType { get; set; } = default!;
/// <summary>
/// 获取或设置哈希值。
/// </summary>
[Newtonsoft.Json.JsonProperty("hash_value")]
[System.Text.Json.Serialization.JsonPropertyName("hash_value")]
public string HashValue { get; set; } = default!;
}
}
/// <summary>
/// 获取或设置照片类型。
/// </summary>
[Newtonsoft.Json.JsonProperty("photo_type")]
[System.Text.Json.Serialization.JsonPropertyName("photo_type")]
public string Type { get; set; } = default!;
/// <summary>
/// 获取或设置照片信息摘要信息。
/// </summary>
[Newtonsoft.Json.JsonProperty("photo_digest")]
[System.Text.Json.Serialization.JsonPropertyName("photo_digest")]
public Types.Digest? Digest { get; set; }
/// <summary>
/// 获取或设置照片 URL。
/// </summary>
[Newtonsoft.Json.JsonProperty("photo_url")]
[System.Text.Json.Serialization.JsonPropertyName("photo_url")]
public string? PhotoUrl { get; set; }
/// <summary>
/// 获取或设置经 Base64 编码的照片数据。
/// </summary>
[Newtonsoft.Json.JsonProperty("photo_data")]
[System.Text.Json.Serialization.JsonPropertyName("photo_data")]
public string? EncodingPhotoData { get; set; }
}
}
/// <summary>
/// 获取或设置公司商户号。
/// </summary>
[Newtonsoft.Json.JsonProperty("company_mchid")]
[System.Text.Json.Serialization.JsonPropertyName("company_mchid")]
public string CompanyMerchantId { get; set; } = default!;
/// <summary>
/// 获取或设置公司名称。
/// </summary>
[Newtonsoft.Json.JsonProperty("company_name")]
[System.Text.Json.Serialization.JsonPropertyName("company_name")]
public string CompanyName { get; set; } = default!;
/// <summary>
/// 获取或设置司机姓名。
/// </summary>
[Newtonsoft.Json.JsonProperty("driver_name")]
[System.Text.Json.Serialization.JsonPropertyName("driver_name")]
public string DriverName { get; set; } = default!;
/// <summary>
/// 获取或设置司机资格证号。
/// </summary>
[Newtonsoft.Json.JsonProperty("driver_license")]
[System.Text.Json.Serialization.JsonPropertyName("driver_license")]
public string DriverLicenseNumber { get; set; } = default!;
/// <summary>
/// 获取或设置司机类别。
/// </summary>
[Newtonsoft.Json.JsonProperty("driver_category")]
[System.Text.Json.Serialization.JsonPropertyName("driver_category")]
public string DriverCategory { get; set; } = default!;
/// <summary>
/// 获取或设置行政区划代码。
/// </summary>
[Newtonsoft.Json.JsonProperty("region_id")]
[System.Text.Json.Serialization.JsonPropertyName("region_id")]
public int RegionId { get; set; }
/// <summary>
/// 获取或设置岗位状态。
/// </summary>
[Newtonsoft.Json.JsonProperty("driver_state")]
[System.Text.Json.Serialization.JsonPropertyName("driver_state")]
public string? DriverState { get; set; }
/// <summary>
/// 获取或设置司机头像信息。
/// </summary>
[Newtonsoft.Json.JsonProperty("driver_photo")]
[System.Text.Json.Serialization.JsonPropertyName("driver_photo")]
public Types.Photo? DriverPhoto { get; set; }
}
}

View File

@@ -0,0 +1,130 @@
namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
{
/// <summary>
/// <para>表示 [POST] /taxi-invoice/driver/update-driver 接口的请求。</para>
/// </summary>
[WechatTenpaySensitive]
public class UpdateTaxiInvoiceDriverRequest : WechatTenpayRequest
{
public static class Types
{
public class Photo
{
public static class Types
{
public class Digest
{
/// <summary>
/// 获取或设置哈希类型。
/// </summary>
[Newtonsoft.Json.JsonProperty("hash_type")]
[System.Text.Json.Serialization.JsonPropertyName("hash_type")]
public string HashType { get; set; } = string.Empty;
/// <summary>
/// 获取或设置哈希值。
/// </summary>
[Newtonsoft.Json.JsonProperty("hash_value")]
[System.Text.Json.Serialization.JsonPropertyName("hash_value")]
public string HashValue { get; set; } = string.Empty;
}
}
/// <summary>
/// 获取或设置照片类型。
/// </summary>
[Newtonsoft.Json.JsonProperty("photo_type")]
[System.Text.Json.Serialization.JsonPropertyName("photo_type")]
public string Type { get; set; } = string.Empty;
/// <summary>
/// 获取或设置照片信息摘要信息。
/// </summary>
[Newtonsoft.Json.JsonProperty("photo_digest")]
[System.Text.Json.Serialization.JsonPropertyName("photo_digest")]
public Types.Digest? Digest { get; set; }
/// <summary>
/// 获取或设置照片 URL。
/// </summary>
[Newtonsoft.Json.JsonProperty("photo_url")]
[System.Text.Json.Serialization.JsonPropertyName("photo_url")]
public string? PhotoUrl { get; set; }
/// <summary>
/// 获取或设置经 Base64 编码的照片数据。
/// </summary>
[Newtonsoft.Json.JsonProperty("photo_icon")]
[System.Text.Json.Serialization.JsonPropertyName("photo_icon")]
public string? EncodingPhotoData { get; set; }
}
}
/// <summary>
/// 获取或设置公司商户号。
/// </summary>
[Newtonsoft.Json.JsonProperty("mchid")]
[System.Text.Json.Serialization.JsonPropertyName("mchid")]
public string CompanyMerchantId { get; set; } = string.Empty;
/// <summary>
/// 获取或设置公司名称。
/// </summary>
[Newtonsoft.Json.JsonProperty("company_name")]
[System.Text.Json.Serialization.JsonPropertyName("company_name")]
public string CompanyName { get; set; } = string.Empty;
/// <summary>
/// 获取或设置司机姓名(需使用平台公钥/证书加密)。
/// </summary>
[Newtonsoft.Json.JsonProperty("driver_name")]
[System.Text.Json.Serialization.JsonPropertyName("driver_name")]
[WechatTenpaySensitiveProperty(scheme: Constants.SignSchemes.WECHATPAY2_RSA_2048_WITH_SHA256, algorithm: Constants.EncryptionAlgorithms.RSA_2048_ECB_PKCS8_OAEP_WITH_SHA1_AND_MGF1)]
[WechatTenpaySensitiveProperty(scheme: Constants.SignSchemes.WECHATPAY2_SM2_WITH_SM3, algorithm: Constants.EncryptionAlgorithms.SM2_C1C3C2_ASN1)]
public string DriverName { get; set; } = string.Empty;
/// <summary>
/// 获取或设置司机身份证号(需使用平台公钥/证书加密)。
/// </summary>
[Newtonsoft.Json.JsonProperty("id_card_number")]
[System.Text.Json.Serialization.JsonPropertyName("id_card_number")]
[WechatTenpaySensitiveProperty(scheme: Constants.SignSchemes.WECHATPAY2_RSA_2048_WITH_SHA256, algorithm: Constants.EncryptionAlgorithms.RSA_2048_ECB_PKCS8_OAEP_WITH_SHA1_AND_MGF1)]
[WechatTenpaySensitiveProperty(scheme: Constants.SignSchemes.WECHATPAY2_SM2_WITH_SM3, algorithm: Constants.EncryptionAlgorithms.SM2_C1C3C2_ASN1)]
public string DriverIdCardNumber { get; set; } = string.Empty;
/// <summary>
/// 获取或设置司机资格证号。
/// </summary>
[Newtonsoft.Json.JsonProperty("driver_license")]
[System.Text.Json.Serialization.JsonPropertyName("driver_license")]
public string DriverLicenseNumber { get; set; } = string.Empty;
/// <summary>
/// 获取或设置司机类别。
/// </summary>
[Newtonsoft.Json.JsonProperty("driver_category")]
[System.Text.Json.Serialization.JsonPropertyName("driver_category")]
public string DriverCategory { get; set; } = string.Empty;
/// <summary>
/// 获取或设置行政区划代码。
/// </summary>
[Newtonsoft.Json.JsonProperty("region_id")]
[System.Text.Json.Serialization.JsonPropertyName("region_id")]
public int RegionId { get; set; }
/// <summary>
/// 获取或设置岗位状态。
/// </summary>
[Newtonsoft.Json.JsonProperty("driver_status")]
[System.Text.Json.Serialization.JsonPropertyName("driver_status")]
public string? DriverState { get; set; }
/// <summary>
/// 获取或设置司机头像信息。
/// </summary>
[Newtonsoft.Json.JsonProperty("driver_photo")]
[System.Text.Json.Serialization.JsonPropertyName("driver_photo")]
public Types.Photo? DriverPhoto { get; set; }
}
}

View File

@@ -0,0 +1,9 @@
namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
{
/// <summary>
/// <para>表示 [POST] /taxi-invoice/driver/update-driver 接口的响应。</para>
/// </summary>
public class UpdateTaxiInvoiceDriverResponse : WechatTenpayResponse
{
}
}

View File

@@ -0,0 +1,22 @@
namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
{
/// <summary>
/// <para>表示 [GET] /taxi-invoice/taxies/{plate_number} 接口的请求。</para>
/// </summary>
public class GetTaxiInvoiceTaxiRequest : WechatTenpayRequest
{
/// <summary>
/// 获取或设置车牌号。
/// </summary>
[Newtonsoft.Json.JsonIgnore]
[System.Text.Json.Serialization.JsonIgnore]
public string PlateNumber { get; set; } = string.Empty;
/// <summary>
/// 获取或设置行政区划代码。
/// </summary>
[Newtonsoft.Json.JsonIgnore]
[System.Text.Json.Serialization.JsonIgnore]
public int RegionId { get; set; }
}
}

View File

@@ -0,0 +1,64 @@
namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
{
/// <summary>
/// <para>表示 [GET] /taxi-invoice/taxies/{plate_number} 接口的响应。</para>
/// </summary>
public class GetTaxiInvoiceTaxiResponse : WechatTenpayResponse
{
/// <summary>
/// 获取或设置公司商户号。
/// </summary>
[Newtonsoft.Json.JsonProperty("company_mchid")]
[System.Text.Json.Serialization.JsonPropertyName("company_mchid")]
public string CompanyMerchantId { get; set; } = default!;
/// <summary>
/// 获取或设置公司名称。
/// </summary>
[Newtonsoft.Json.JsonProperty("company_name")]
[System.Text.Json.Serialization.JsonPropertyName("company_name")]
public string CompanyName { get; set; } = default!;
/// <summary>
/// 获取或设置车牌号。
/// </summary>
[Newtonsoft.Json.JsonProperty("plate_number")]
[System.Text.Json.Serialization.JsonPropertyName("plate_number")]
public string PlateNumber { get; set; } = default!;
/// <summary>
/// 获取或设置主班司机资格证号。
/// </summary>
[Newtonsoft.Json.JsonProperty("main_license")]
[System.Text.Json.Serialization.JsonPropertyName("main_license")]
public string? MainLicenseNumber { get; set; }
/// <summary>
/// 获取或设置副班司机资格证号。
/// </summary>
[Newtonsoft.Json.JsonProperty("deputy_license")]
[System.Text.Json.Serialization.JsonPropertyName("deputy_license")]
public string? DeputyLicenseNumber { get; set; }
/// <summary>
/// 获取或设置行政区划代码。
/// </summary>
[Newtonsoft.Json.JsonProperty("region_id")]
[System.Text.Json.Serialization.JsonPropertyName("region_id")]
public int RegionId { get; set; }
/// <summary>
/// 获取或设置出租车状态。
/// </summary>
[Newtonsoft.Json.JsonProperty("taxi_state")]
[System.Text.Json.Serialization.JsonPropertyName("taxi_state")]
public string? TaxiState { get; set; }
/// <summary>
/// 获取或设置是否支持开票。
/// </summary>
[Newtonsoft.Json.JsonProperty("support_invoice")]
[System.Text.Json.Serialization.JsonPropertyName("support_invoice")]
public bool IsSupportInvoice { get; set; }
}
}

View File

@@ -0,0 +1,64 @@
namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
{
/// <summary>
/// <para>表示 [POST] /taxi-invoice/taxi/update-taxi 接口的请求。</para>
/// </summary>
public class UpdateTaxiInvoiceTaxiRequest : WechatTenpayRequest
{
/// <summary>
/// 获取或设置公司商户号。
/// </summary>
[Newtonsoft.Json.JsonProperty("mchid")]
[System.Text.Json.Serialization.JsonPropertyName("mchid")]
public string CompanyMerchantId { get; set; } = string.Empty;
/// <summary>
/// 获取或设置公司名称。
/// </summary>
[Newtonsoft.Json.JsonProperty("company_name")]
[System.Text.Json.Serialization.JsonPropertyName("company_name")]
public string CompanyName { get; set; } = string.Empty;
/// <summary>
/// 获取或设置车牌号。
/// </summary>
[Newtonsoft.Json.JsonProperty("plate_number")]
[System.Text.Json.Serialization.JsonPropertyName("plate_number")]
public string PlateNumber { get; set; } = string.Empty;
/// <summary>
/// 获取或设置主班司机资格证号。
/// </summary>
[Newtonsoft.Json.JsonProperty("main_license")]
[System.Text.Json.Serialization.JsonPropertyName("main_license")]
public string? MainLicenseNumber { get; set; }
/// <summary>
/// 获取或设置副班司机资格证号。
/// </summary>
[Newtonsoft.Json.JsonProperty("deputy_license")]
[System.Text.Json.Serialization.JsonPropertyName("deputy_license")]
public string? DeputyLicenseNumber { get; set; }
/// <summary>
/// 获取或设置行政区划代码。
/// </summary>
[Newtonsoft.Json.JsonProperty("region_id")]
[System.Text.Json.Serialization.JsonPropertyName("region_id")]
public int RegionId { get; set; }
/// <summary>
/// 获取或设置出租车状态。
/// </summary>
[Newtonsoft.Json.JsonProperty("taxi_state")]
[System.Text.Json.Serialization.JsonPropertyName("taxi_state")]
public string? TaxiState { get; set; }
/// <summary>
/// 获取或设置开票标记。
/// </summary>
[Newtonsoft.Json.JsonProperty("invoice_flag")]
[System.Text.Json.Serialization.JsonPropertyName("invoice_flag")]
public string InvoiceFlag { get; set; } = string.Empty;
}
}

View File

@@ -0,0 +1,9 @@
namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
{
/// <summary>
/// <para>表示 [POST] /taxi-invoice/taxi/update-taxi 接口的响应。</para>
/// </summary>
public class UpdateTaxiInvoiceTaxiResponse : WechatTenpayResponse
{
}
}

View File

@@ -0,0 +1,85 @@
namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
{
/// <summary>
/// <para>表示 [POST] /taxi-invoice/taxi-company/create-taxi-company 接口的请求。</para>
/// </summary>
public class CreateTaxiInvoiceTaxiCompanyRequest : WechatTenpayRequest
{
/// <summary>
/// 获取或设置企业类型。
/// </summary>
[Newtonsoft.Json.JsonProperty("enterprise_type")]
[System.Text.Json.Serialization.JsonPropertyName("enterprise_type")]
public string EnterpriseType { get; set; } = string.Empty;
/// <summary>
/// 获取或设置公司名称。
/// </summary>
[Newtonsoft.Json.JsonProperty("company_name")]
[System.Text.Json.Serialization.JsonPropertyName("company_name")]
public string? CompanyName { get; set; }
/// <summary>
/// 获取或设置公司简称。
/// </summary>
[Newtonsoft.Json.JsonProperty("short_name")]
[System.Text.Json.Serialization.JsonPropertyName("short_name")]
public string? ShortName { get; set; }
/// <summary>
/// 获取或设置税号。
/// </summary>
[Newtonsoft.Json.JsonProperty("tax_id")]
[System.Text.Json.Serialization.JsonPropertyName("tax_id")]
public string TaxId { get; set; } = string.Empty;
/// <summary>
/// 获取或设置企业法人姓名。
/// </summary>
[Newtonsoft.Json.JsonProperty("legal_person")]
[System.Text.Json.Serialization.JsonPropertyName("legal_person")]
public string LegalPerson { get; set; } = string.Empty;
/// <summary>
/// 获取或设置行政区划代码。
/// </summary>
[Newtonsoft.Json.JsonProperty("region_id")]
[System.Text.Json.Serialization.JsonPropertyName("region_id")]
public int RegionId { get; set; }
/// <summary>
/// 获取或设置公司地址。
/// </summary>
[Newtonsoft.Json.JsonProperty("address")]
[System.Text.Json.Serialization.JsonPropertyName("address")]
public string Address { get; set; } = string.Empty;
/// <summary>
/// 获取或设置公司电话。
/// </summary>
[Newtonsoft.Json.JsonProperty("phone")]
[System.Text.Json.Serialization.JsonPropertyName("phone")]
public string? PhoneNumber { get; set; }
/// <summary>
/// 获取或设置开户银行。
/// </summary>
[Newtonsoft.Json.JsonProperty("bank_name")]
[System.Text.Json.Serialization.JsonPropertyName("bank_name")]
public string? BankName { get; set; }
/// <summary>
/// 获取或设置银行账号。
/// </summary>
[Newtonsoft.Json.JsonProperty("bank_account")]
[System.Text.Json.Serialization.JsonPropertyName("bank_account")]
public string? BankAccountNumber { get; set; }
/// <summary>
/// 获取或设置开票渠道。
/// </summary>
[Newtonsoft.Json.JsonProperty("invoice_mode")]
[System.Text.Json.Serialization.JsonPropertyName("invoice_mode")]
public string InvoiceMode { get; set; } = string.Empty;
}
}

View File

@@ -0,0 +1,22 @@
namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
{
/// <summary>
/// <para>表示 [POST] /taxi-invoice/taxi-company/create-taxi-company 接口的响应。</para>
/// </summary>
public class CreateTaxiInvoiceTaxiCompanyResponse : WechatTenpayResponse
{
/// <summary>
/// 获取或设置公司商户号。
/// </summary>
[Newtonsoft.Json.JsonProperty("mchid")]
[System.Text.Json.Serialization.JsonPropertyName("mchid")]
public string CompanyMerchantId { get; set; } = default!;
/// <summary>
/// 获取或设置公司名称。
/// </summary>
[Newtonsoft.Json.JsonProperty("company_name")]
[System.Text.Json.Serialization.JsonPropertyName("company_name")]
public string CompanyName { get; set; } = default!;
}
}

View File

@@ -0,0 +1,22 @@
namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
{
/// <summary>
/// <para>表示 [GET] /taxi-invoice/taxi-companies/{company_mchid} 接口的请求。</para>
/// </summary>
public class GetTaxiInvoiceTaxiCompanyRequest : WechatTenpayRequest
{
/// <summary>
/// 获取或设置公司商户号。
/// </summary>
[Newtonsoft.Json.JsonIgnore]
[System.Text.Json.Serialization.JsonIgnore]
public string CompanyMerchantId { get; set; } = string.Empty;
/// <summary>
/// 获取或设置行政区划代码。
/// </summary>
[Newtonsoft.Json.JsonIgnore]
[System.Text.Json.Serialization.JsonIgnore]
public int RegionId { get; set; }
}
}

View File

@@ -0,0 +1,92 @@
namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
{
/// <summary>
/// <para>表示 [GET] /taxi-invoice/taxi-companies/{company_mchid} 接口的响应。</para>
/// </summary>
public class GetTaxiInvoiceTaxiCompanyResponse : WechatTenpayResponse
{
/// <summary>
/// 获取或设置公司商户号。
/// </summary>
[Newtonsoft.Json.JsonProperty("company_mchid")]
[System.Text.Json.Serialization.JsonPropertyName("company_mchid")]
public string CompanyMerchantId { get; set; } = default!;
/// <summary>
/// 获取或设置企业类型。
/// </summary>
[Newtonsoft.Json.JsonProperty("enterprise_type")]
[System.Text.Json.Serialization.JsonPropertyName("enterprise_type")]
public string EnterpriseType { get; set; } = default!;
/// <summary>
/// 获取或设置公司名称。
/// </summary>
[Newtonsoft.Json.JsonProperty("company_name")]
[System.Text.Json.Serialization.JsonPropertyName("company_name")]
public string CompanyName { get; set; } = default!;
/// <summary>
/// 获取或设置公司简称。
/// </summary>
[Newtonsoft.Json.JsonProperty("short_name")]
[System.Text.Json.Serialization.JsonPropertyName("short_name")]
public string ShortName { get; set; } = default!;
/// <summary>
/// 获取或设置税号。
/// </summary>
[Newtonsoft.Json.JsonProperty("tax_id")]
[System.Text.Json.Serialization.JsonPropertyName("tax_id")]
public string TaxId { get; set; } = default!;
/// <summary>
/// 获取或设置企业法人姓名。
/// </summary>
[Newtonsoft.Json.JsonProperty("legal_person")]
[System.Text.Json.Serialization.JsonPropertyName("legal_person")]
public string LegalPerson { get; set; } = default!;
/// <summary>
/// 获取或设置行政区划代码。
/// </summary>
[Newtonsoft.Json.JsonProperty("region_id")]
[System.Text.Json.Serialization.JsonPropertyName("region_id")]
public int RegionId { get; set; }
/// <summary>
/// 获取或设置公司地址。
/// </summary>
[Newtonsoft.Json.JsonProperty("address")]
[System.Text.Json.Serialization.JsonPropertyName("address")]
public string Address { get; set; } = default!;
/// <summary>
/// 获取或设置公司电话。
/// </summary>
[Newtonsoft.Json.JsonProperty("phone")]
[System.Text.Json.Serialization.JsonPropertyName("phone")]
public string? PhoneNumber { get; set; }
/// <summary>
/// 获取或设置开户银行。
/// </summary>
[Newtonsoft.Json.JsonProperty("bank_name")]
[System.Text.Json.Serialization.JsonPropertyName("bank_name")]
public string? BankName { get; set; }
/// <summary>
/// 获取或设置银行账号。
/// </summary>
[Newtonsoft.Json.JsonProperty("bank_account")]
[System.Text.Json.Serialization.JsonPropertyName("bank_account")]
public string? BankAccountNumber { get; set; }
/// <summary>
/// 获取或设置开票渠道。
/// </summary>
[Newtonsoft.Json.JsonProperty("invoice_mode")]
[System.Text.Json.Serialization.JsonPropertyName("invoice_mode")]
public string InvoiceMode { get; set; } = default!;
}
}

View File

@@ -0,0 +1,43 @@
namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
{
/// <summary>
/// <para>表示 [GET] /taxi-invoice/user-taxi-order/find-by-token 接口的请求。</para>
/// </summary>
public class GetTaxiInvoiceUserTaxiOrderByTokenRequest : WechatTenpayRequest
{
/// <summary>
/// 获取或设置获取乘客行程单详情的凭证。
/// </summary>
[Newtonsoft.Json.JsonIgnore]
[System.Text.Json.Serialization.JsonIgnore]
public string Token { get; set; } = string.Empty;
/// <summary>
/// 获取或设置微信 AppId。
/// </summary>
[Newtonsoft.Json.JsonIgnore]
[System.Text.Json.Serialization.JsonIgnore]
public string AppId { get; set; } = string.Empty;
/// <summary>
/// 获取或设置用户的 OpenId。
/// </summary>
[Newtonsoft.Json.JsonIgnore]
[System.Text.Json.Serialization.JsonIgnore]
public string OpenId { get; set; } = string.Empty;
/// <summary>
/// 获取或设置授权模式。
/// </summary>
[Newtonsoft.Json.JsonIgnore]
[System.Text.Json.Serialization.JsonIgnore]
public string AuthMode { get; set; } = string.Empty;
/// <summary>
/// 获取或设置行政区划代码。
/// </summary>
[Newtonsoft.Json.JsonIgnore]
[System.Text.Json.Serialization.JsonIgnore]
public int? RegionId { get; set; }
}
}

View File

@@ -0,0 +1,63 @@
using System;
namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
{
/// <summary>
/// <para>表示 [GET] /taxi-invoice/user-taxi-order/find-by-token 接口的响应。</para>
/// </summary>
public class GetTaxiInvoiceUserTaxiOrderByTokenResponse : WechatTenpayResponse
{
/// <summary>
/// 获取或设置车牌号。
/// </summary>
[Newtonsoft.Json.JsonProperty("plate_number")]
[System.Text.Json.Serialization.JsonPropertyName("plate_number")]
public string PlateNumber { get; set; } = default!;
/// <summary>
/// 获取或设置司机资格证号。
/// </summary>
[Newtonsoft.Json.JsonProperty("driver_license")]
[System.Text.Json.Serialization.JsonPropertyName("driver_license")]
public string DriverLicenseNumber { get; set; } = default!;
/// <summary>
/// 获取或设置上车时间。
/// </summary>
[Newtonsoft.Json.JsonProperty("up_time")]
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.RFC3339DateTimeOffsetConverter))]
[System.Text.Json.Serialization.JsonPropertyName("up_time")]
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.RFC3339DateTimeOffsetConverter))]
public DateTimeOffset UpTime { get; set; }
/// <summary>
/// 获取或设置行政区划代码。
/// </summary>
[Newtonsoft.Json.JsonProperty("region_id")]
[System.Text.Json.Serialization.JsonPropertyName("region_id")]
public int RegionId { get; set; }
/// <summary>
/// 获取或设置乘客行程单来源。
/// </summary>
[Newtonsoft.Json.JsonProperty("source")]
[System.Text.Json.Serialization.JsonPropertyName("source")]
public string Source { get; set; } = default!;
/// <summary>
/// 获取或设置付款时间。
/// </summary>
[Newtonsoft.Json.JsonProperty("pay_time")]
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.RFC3339NullableDateTimeOffsetConverter))]
[System.Text.Json.Serialization.JsonPropertyName("pay_time")]
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.RFC3339NullableDateTimeOffsetConverter))]
public DateTimeOffset? PayTime { get; set; }
/// <summary>
/// 获取或设置付款金额(单位:分)。
/// </summary>
[Newtonsoft.Json.JsonProperty("pay_amount")]
[System.Text.Json.Serialization.JsonPropertyName("pay_amount")]
public int? PayAmount { get; set; }
}
}

View File

@@ -15,7 +15,7 @@
<PackageProjectUrl>https://github.com/fudiwei/DotNetCore.SKIT.FlurlHttpClient.Wechat</PackageProjectUrl>
<PackageTags>Flurl.Http Wechat Weixin MicroMessage Tenpay WechatPay WeixinPay Wxpay 微信 微信支付 微信商户</PackageTags>
<Version>2.16.0</Version>
<Description>基于 Flurl.Http 的微信支付 API v3 版客户端,支持直连商户、服务商模式,支持基础支付、代金券、商家券、委托营销、消费卡、支付有礼、银行定向促活、微信支付分、微信先享卡、支付即服务、点金计划、智慧商圈、电商收付通、二级商户进件、小微商户进件、消费者投诉、商户违规通知、批量转账到零钱、银行组件、海关报关、融合钱包、微工卡等功能。</Description>
<Description>基于 Flurl.Http 的微信支付 API v3 版客户端,支持直连商户、服务商模式,支持基础支付、代金券、商家券、委托营销、消费卡、支付有礼、银行定向促活、微信支付分、微信先享卡、支付即服务、点金计划、智慧商圈、电商收付通、二级商户进件、小微商户进件、消费者投诉、商户违规通知、批量转账到零钱、银行组件、海关报关、融合钱包、微工卡、电子发票等功能。</Description>
<Authors>Fu Diwei</Authors>
<RepositoryType>git</RepositoryType>
<RepositoryUrl>https://github.com/fudiwei/DotNetCore.SKIT.FlurlHttpClient.Wechat.git</RepositoryUrl>