719 lines
18 KiB
C#
719 lines
18 KiB
C#
using System.Collections.Generic;
|
||
using Newtonsoft.Json;
|
||
|
||
namespace OrderSupportTicket.Models.Api;
|
||
|
||
/// <summary>
|
||
/// 创建工单请求。
|
||
/// </summary>
|
||
internal sealed class CreateWorkOrderRequest
|
||
{
|
||
/// <summary>
|
||
/// 拍单账号。
|
||
/// </summary>
|
||
////[JsonProperty("purchaseAccount")]
|
||
public string PurchaseAccount { get; set; }
|
||
|
||
/// <summary>
|
||
/// 订单所属店铺 APPID。
|
||
/// </summary>
|
||
////[JsonProperty("appId")]
|
||
public string AppId { get; set; }
|
||
|
||
/// <summary>
|
||
/// 微信订单号,保持为数字字符串。
|
||
/// </summary>
|
||
////[JsonProperty("wechatOrderId")]
|
||
public string WechatOrderId { get; set; }
|
||
|
||
/// <summary>
|
||
/// 首条问题描述,长度 1~2000 字。
|
||
/// </summary>
|
||
////[JsonProperty("description")]
|
||
public string Description { get; set; }
|
||
|
||
/// <summary>
|
||
/// 可选的创建幂等编号。
|
||
/// </summary>
|
||
////[JsonProperty("clientRequestId", NullValueHandling = NullValueHandling.Ignore)]
|
||
public string ClientRequestId { get; set; }
|
||
}
|
||
|
||
/// <summary>
|
||
/// 工单摘要列表请求。
|
||
/// </summary>
|
||
internal sealed class ListWorkOrdersRequest
|
||
{
|
||
/// <summary>
|
||
/// 拍单账号。
|
||
/// </summary>
|
||
////[JsonProperty("purchaseAccount")]
|
||
public string PurchaseAccount { get; set; }
|
||
|
||
/// <summary>
|
||
/// 要查询的店铺 APPID 数组。
|
||
/// </summary>
|
||
////[JsonProperty("appIds")]
|
||
public IList<string> AppIds { get; set; }
|
||
|
||
/// <summary>
|
||
/// 可选的微信订单号精确筛选条件。
|
||
/// </summary>
|
||
////[JsonProperty("wechatOrderId", NullValueHandling = NullValueHandling.Ignore)]
|
||
public string WechatOrderId { get; set; }
|
||
|
||
/// <summary>
|
||
/// 可选的工单状态筛选条件。
|
||
/// </summary>
|
||
////[JsonProperty("status", NullValueHandling = NullValueHandling.Ignore)]
|
||
public string Status { get; set; }
|
||
|
||
/// <summary>
|
||
/// 本页最大返回数量,范围 1~100。
|
||
/// </summary>
|
||
////[JsonProperty("limit")]
|
||
public int Limit { get; set; }
|
||
|
||
/// <summary>
|
||
/// 下一页游标,使用服务端返回的原始值。
|
||
/// </summary>
|
||
////[JsonProperty("cursor", NullValueHandling = NullValueHandling.Ignore)]
|
||
public string Cursor { get; set; }
|
||
}
|
||
|
||
/// <summary>
|
||
/// 查询订单留言板请求。
|
||
/// </summary>
|
||
internal sealed class GetMessagesRequest
|
||
{
|
||
/// <summary>
|
||
/// 拍单账号。
|
||
/// </summary>
|
||
////[JsonProperty("purchaseAccount")]
|
||
public string PurchaseAccount { get; set; }
|
||
/// <summary>
|
||
/// 微信订单号,保持为数字字符串。
|
||
/// </summary>
|
||
////[JsonProperty("wechatOrderId")]
|
||
public string WechatOrderId { get; set; }
|
||
/// <summary>
|
||
/// 订单所属店铺 APPID。
|
||
/// </summary>
|
||
////[JsonProperty("appId")]
|
||
public string AppId { get; set; }
|
||
|
||
/// <summary>
|
||
/// 本页最大返回数量,范围 1~100。
|
||
/// </summary>
|
||
////[JsonProperty("limit")]
|
||
public int Limit { get; set; }
|
||
|
||
/// <summary>
|
||
/// 加载更早留言时使用的 before 游标。
|
||
/// </summary>
|
||
////[JsonProperty("before", NullValueHandling = NullValueHandling.Ignore)]
|
||
public string Before { get; set; }
|
||
}
|
||
|
||
/// <summary>
|
||
/// 提交客户留言请求。
|
||
/// </summary>
|
||
internal sealed class SendMessageRequest
|
||
{
|
||
/// <summary>
|
||
/// 拍单账号。
|
||
/// </summary>
|
||
////[JsonProperty("purchaseAccount")]
|
||
public string PurchaseAccount { get; set; }
|
||
|
||
/// <summary>
|
||
/// 订单所属店铺 APPID。
|
||
/// </summary>
|
||
////[JsonProperty("appId")]
|
||
public string AppId { get; set; }
|
||
|
||
/// <summary>
|
||
/// 留言幂等编号。
|
||
/// </summary>
|
||
////[JsonProperty("clientMessageId")]
|
||
public string ClientMessageId { get; set; }
|
||
|
||
/// <summary>
|
||
/// 留言正文;有图片附件时可为空。
|
||
/// </summary>
|
||
////[JsonProperty("text")]
|
||
public string Text { get; set; }
|
||
|
||
/// <summary>
|
||
/// 图片上传回执,最多 3 个;无图片时为 null,序列化时省略。
|
||
/// </summary>
|
||
////[JsonProperty("attachments")]
|
||
public IList<MessageAttachmentReceipt> Attachments { get; set; }
|
||
}
|
||
|
||
/// <summary>
|
||
/// 标记留言已读请求。
|
||
/// </summary>
|
||
internal sealed class MarkReadRequest
|
||
{
|
||
/// <summary>
|
||
/// 拍单账号。
|
||
/// </summary>
|
||
////[JsonProperty("purchaseAccount")]
|
||
public string PurchaseAccount { get; set; }
|
||
|
||
/// <summary>
|
||
/// 订单所属店铺 APPID。
|
||
/// </summary>
|
||
////[JsonProperty("appId")]
|
||
public string AppId { get; set; }
|
||
|
||
/// <summary>
|
||
/// 已读到的最大留言序号。
|
||
/// </summary>
|
||
////[JsonProperty("throughSequenceNo")]
|
||
public int ThroughSequenceNo { get; set; }
|
||
}
|
||
|
||
/// <summary>
|
||
/// 申请图片直传凭证请求。
|
||
/// </summary>
|
||
internal sealed class CreateImageUploadTicketRequest
|
||
{
|
||
/// <summary>
|
||
/// 拍单账号。
|
||
/// </summary>
|
||
public string PurchaseAccount { get; set; }
|
||
|
||
/// <summary>
|
||
/// 订单所属店铺 APPID。
|
||
/// </summary>
|
||
public string AppId { get; set; }
|
||
|
||
/// <summary>
|
||
/// 原始文件名,1~180 字符。
|
||
/// </summary>
|
||
public string FileName { get; set; }
|
||
|
||
/// <summary>
|
||
/// 精确的图片 MIME 类型:image/jpeg、image/png 或 image/webp。
|
||
/// </summary>
|
||
public string MimeType { get; set; }
|
||
|
||
/// <summary>
|
||
/// 图片实际字节数,1~5,242,880。
|
||
/// </summary>
|
||
public long Size { get; set; }
|
||
|
||
/// <summary>
|
||
/// 可选的上传标识;省略时由服务端生成。
|
||
/// </summary>
|
||
public string RequestId { get; set; }
|
||
}
|
||
|
||
/// <summary>
|
||
/// 图片直传凭证响应。
|
||
/// </summary>
|
||
public sealed class ImageUploadTicketResponse
|
||
{
|
||
/// <summary>
|
||
/// 请求是否成功。
|
||
/// </summary>
|
||
public bool Success { get; set; }
|
||
|
||
/// <summary>
|
||
/// 本次上传的凭证信息。
|
||
/// </summary>
|
||
public ImageUploadTicketDto Upload { get; set; }
|
||
|
||
/// <summary>
|
||
/// 订单所属店铺 APPID。
|
||
/// </summary>
|
||
public string AppId { get; set; }
|
||
|
||
/// <summary>
|
||
/// 微信订单号。
|
||
/// </summary>
|
||
public string WechatOrderId { get; set; }
|
||
|
||
/// <summary>
|
||
/// 接口返回的身份校验标记,当前恒为 false。
|
||
/// </summary>
|
||
public bool IdentityVerified { get; set; }
|
||
|
||
/// <summary>
|
||
/// 本次 HTTP 请求的排查编号;不是 upload.requestId。
|
||
/// </summary>
|
||
public string RequestId { get; set; }
|
||
}
|
||
|
||
/// <summary>
|
||
/// 服务端签发的单次图片直传凭证。
|
||
/// </summary>
|
||
public sealed class ImageUploadTicketDto
|
||
{
|
||
/// <summary>
|
||
/// 上传模式,文档约定为 single。
|
||
/// </summary>
|
||
public string Mode { get; set; }
|
||
|
||
/// <summary>
|
||
/// 上传 HTTP 方法,文档约定为 PUT。
|
||
/// </summary>
|
||
public string Method { get; set; }
|
||
|
||
/// <summary>
|
||
/// 本次图片上传标识。
|
||
/// </summary>
|
||
public string RequestId { get; set; }
|
||
|
||
/// <summary>
|
||
/// 服务端签发的上传凭证,需原样提交留言接口。
|
||
/// </summary>
|
||
public string Ticket { get; set; }
|
||
|
||
/// <summary>
|
||
/// 带短时签名的 COS 上传地址。
|
||
/// </summary>
|
||
public string UploadUrl { get; set; }
|
||
|
||
/// <summary>
|
||
/// 直传时必须原样携带的请求头。
|
||
/// </summary>
|
||
public Dictionary<string, string> Headers { get; set; }
|
||
|
||
/// <summary>
|
||
/// 上传凭证过期时间。
|
||
/// </summary>
|
||
public string ExpiresAt { get; set; }
|
||
}
|
||
|
||
/// <summary>
|
||
/// 图片直传完成后提交给留言接口的回执。
|
||
/// </summary>
|
||
public sealed class MessageAttachmentReceipt
|
||
{
|
||
/// <summary>
|
||
/// 原样使用 upload.requestId。
|
||
/// </summary>
|
||
public string RequestId { get; set; }
|
||
|
||
/// <summary>
|
||
/// 原样使用 upload.ticket。
|
||
/// </summary>
|
||
public string Ticket { get; set; }
|
||
|
||
/// <summary>
|
||
/// 可选的 COS 响应 ETag。
|
||
/// </summary>
|
||
public string Etag { get; set; }
|
||
}
|
||
|
||
/// <summary>
|
||
/// 留言中的公开图片附件。
|
||
/// </summary>
|
||
public sealed class TicketAttachmentDto
|
||
{
|
||
/// <summary>
|
||
/// 附件唯一 ID。
|
||
/// </summary>
|
||
public string Id { get; set; }
|
||
|
||
/// <summary>
|
||
/// 原始文件名。
|
||
/// </summary>
|
||
public string OriginalName { get; set; }
|
||
|
||
/// <summary>
|
||
/// 图片 MIME 类型。
|
||
/// </summary>
|
||
public string ContentType { get; set; }
|
||
|
||
/// <summary>
|
||
/// 图片字节数。
|
||
/// </summary>
|
||
public long ByteSize { get; set; }
|
||
|
||
/// <summary>
|
||
/// 图片创建时间。
|
||
/// </summary>
|
||
public string CreatedAt { get; set; }
|
||
|
||
/// <summary>
|
||
/// 短时读取地址;暂不可用时为 null。
|
||
/// </summary>
|
||
public string ReadUrl { get; set; }
|
||
}
|
||
|
||
/// <summary>
|
||
/// 工单摘要分页响应。
|
||
/// </summary>
|
||
public sealed class WorkOrderListResponse
|
||
{
|
||
/// <summary>
|
||
/// 请求是否成功。
|
||
/// </summary>
|
||
////[JsonProperty("success")]
|
||
public bool Success { get; set; }
|
||
|
||
/// <summary>
|
||
/// 当前页工单摘要。
|
||
/// </summary>
|
||
////[JsonProperty("items")]
|
||
public List<WorkOrderSummaryDto> Items { get; set; }
|
||
|
||
/// <summary>
|
||
/// 是否还有下一页。
|
||
/// </summary>
|
||
////[JsonProperty("hasMore")]
|
||
public bool HasMore { get; set; }
|
||
|
||
/// <summary>
|
||
/// 下一页游标。
|
||
/// </summary>
|
||
////[JsonProperty("nextCursor")]
|
||
public string NextCursor { get; set; }
|
||
|
||
/// <summary>
|
||
/// 接口返回的身份校验标记,当前恒为 false。
|
||
/// </summary>
|
||
////[JsonProperty("identityVerified")]
|
||
public bool IdentityVerified { get; set; }
|
||
}
|
||
|
||
/// <summary>
|
||
/// 单个订单的工单摘要。
|
||
/// </summary>
|
||
public sealed class WorkOrderSummaryDto
|
||
{
|
||
/// <summary>
|
||
/// 订单所属店铺 APPID。
|
||
/// </summary>
|
||
////[JsonProperty("appId")]
|
||
public string AppId { get; set; }
|
||
|
||
/// <summary>
|
||
/// 微信订单号,保持为数字字符串。
|
||
/// </summary>
|
||
////[JsonProperty("wechatOrderId")]
|
||
public string WechatOrderId { get; set; }
|
||
|
||
/// <summary>
|
||
/// 工单状态编码。
|
||
/// </summary>
|
||
////[JsonProperty("status")]
|
||
public string Status { get; set; }
|
||
|
||
/// <summary>
|
||
/// 工单状态中文文本。
|
||
/// </summary>
|
||
////[JsonProperty("statusText")]
|
||
public string StatusText { get; set; }
|
||
|
||
/// <summary>
|
||
/// 工单创建时间,由接口以 ISO 8601 字符串传输。
|
||
/// </summary>
|
||
////[JsonProperty("createdAt")]
|
||
public string CreatedAt { get; set; }
|
||
|
||
/// <summary>
|
||
/// 工单更新时间,由接口以 ISO 8601 字符串传输。
|
||
/// </summary>
|
||
////[JsonProperty("updatedAt")]
|
||
public string UpdatedAt { get; set; }
|
||
|
||
/// <summary>
|
||
/// 最近一条公开留言时间,由接口以 ISO 8601 字符串传输。
|
||
/// </summary>
|
||
////[JsonProperty("lastMessageAt")]
|
||
public string LastMessageAt { get; set; }
|
||
|
||
/// <summary>
|
||
/// 最近一次客服正式回复时间;从未回复时为 null。
|
||
/// </summary>
|
||
////[JsonProperty("lastReplyAt")]
|
||
public string LastReplyAt { get; set; }
|
||
|
||
/// <summary>
|
||
/// 最近一条公开留言的发送方类型。
|
||
/// </summary>
|
||
////[JsonProperty("lastSenderType")]
|
||
public string LastSenderType { get; set; }
|
||
|
||
/// <summary>
|
||
/// 未读留言数量。
|
||
/// </summary>
|
||
////[JsonProperty("unreadCount")]
|
||
public int UnreadCount { get; set; }
|
||
|
||
/// <summary>
|
||
/// 工单版本号,按接口返回的字符串原样保存。
|
||
/// </summary>
|
||
////[JsonProperty("version")]
|
||
public string Version { get; set; }
|
||
}
|
||
|
||
/// <summary>
|
||
/// 订单留言板响应。
|
||
/// </summary>
|
||
public sealed class WorkOrderMessagesResponse
|
||
{
|
||
/// <summary>
|
||
/// 请求是否成功。
|
||
/// </summary>
|
||
////[JsonProperty("success")]
|
||
public bool Success { get; set; }
|
||
|
||
/// <summary>
|
||
/// 订单所属店铺 APPID。
|
||
/// </summary>
|
||
////[JsonProperty("appId")]
|
||
public string AppId { get; set; }
|
||
|
||
/// <summary>
|
||
/// 微信订单号。
|
||
/// </summary>
|
||
////[JsonProperty("wechatOrderId")]
|
||
public string WechatOrderId { get; set; }
|
||
|
||
/// <summary>
|
||
/// 当前页公开留言,按 sequenceNo 升序排列。
|
||
/// </summary>
|
||
////[JsonProperty("items")]
|
||
public List<TicketMessageDto> Items { get; set; }
|
||
|
||
/// <summary>
|
||
/// 是否还有更早的留言。
|
||
/// </summary>
|
||
////[JsonProperty("hasMore")]
|
||
public bool HasMore { get; set; }
|
||
|
||
/// <summary>
|
||
/// 加载更早留言时使用的 before 游标。
|
||
/// </summary>
|
||
////[JsonProperty("nextBefore")]
|
||
public string NextBefore { get; set; }
|
||
|
||
/// <summary>
|
||
/// 接口返回的身份校验标记,当前恒为 false。
|
||
/// </summary>
|
||
////[JsonProperty("identityVerified")]
|
||
public bool IdentityVerified { get; set; }
|
||
}
|
||
|
||
/// <summary>
|
||
/// 单条公开留言。
|
||
/// </summary>
|
||
public sealed class TicketMessageDto
|
||
{
|
||
/// <summary>
|
||
/// 消息唯一 ID,用于去重。
|
||
/// </summary>
|
||
////[JsonProperty("messageId")]
|
||
public string MessageId { get; set; }
|
||
|
||
/// <summary>
|
||
/// 工单内连续递增的消息序号。
|
||
/// </summary>
|
||
////[JsonProperty("sequenceNo")]
|
||
public int SequenceNo { get; set; }
|
||
|
||
/// <summary>
|
||
/// 发送方类型,例如 customer。
|
||
/// </summary>
|
||
////[JsonProperty("senderType")]
|
||
public string SenderType { get; set; }
|
||
|
||
/// <summary>
|
||
/// 发送方显示名称。
|
||
/// </summary>
|
||
////[JsonProperty("senderName")]
|
||
public string SenderName { get; set; }
|
||
|
||
/// <summary>
|
||
/// 留言正文;消息撤回后为空字符串。
|
||
/// </summary>
|
||
////[JsonProperty("text")]
|
||
public string Text { get; set; }
|
||
|
||
/// <summary>
|
||
/// 消息是否已撤回。
|
||
/// </summary>
|
||
////[JsonProperty("recalled")]
|
||
public bool Recalled { get; set; }
|
||
|
||
/// <summary>
|
||
/// 消息发送时间,由接口以 ISO 8601 字符串传输。
|
||
/// </summary>
|
||
////[JsonProperty("createdAt")]
|
||
public string CreatedAt { get; set; }
|
||
|
||
/// <summary>
|
||
/// 公开图片附件;无图片时为空数组。
|
||
/// </summary>
|
||
////[JsonProperty("attachments")]
|
||
public List<TicketAttachmentDto> Attachments { get; set; }
|
||
}
|
||
|
||
/// <summary>
|
||
/// 创建工单响应。
|
||
/// </summary>
|
||
public sealed class CreateWorkOrderResponse
|
||
{
|
||
/// <summary>
|
||
/// 请求是否成功。
|
||
/// </summary>
|
||
////[JsonProperty("success")]
|
||
public bool Success { get; set; }
|
||
|
||
/// <summary>
|
||
/// 创建结果,取值 created、existing 或 reopened。
|
||
/// </summary>
|
||
////[JsonProperty("operation")]
|
||
public string Operation { get; set; }
|
||
|
||
/// <summary>
|
||
/// 订单所属店铺 APPID。
|
||
/// </summary>
|
||
////[JsonProperty("appId")]
|
||
public string AppId { get; set; }
|
||
|
||
/// <summary>
|
||
/// 微信订单号。
|
||
/// </summary>
|
||
////[JsonProperty("wechatOrderId")]
|
||
public string WechatOrderId { get; set; }
|
||
|
||
/// <summary>
|
||
/// 操作后的工单状态。
|
||
/// </summary>
|
||
////[JsonProperty("status")]
|
||
public string Status { get; set; }
|
||
|
||
/// <summary>
|
||
/// 创建或重开时追加的首条消息 ID。
|
||
/// </summary>
|
||
////[JsonProperty("messageId")]
|
||
public string MessageId { get; set; }
|
||
|
||
/// <summary>
|
||
/// 操作后的工单版本号字符串。
|
||
/// </summary>
|
||
////[JsonProperty("version")]
|
||
public string Version { get; set; }
|
||
|
||
/// <summary>
|
||
/// 是否为幂等编号对应的历史回执。
|
||
/// </summary>
|
||
////[JsonProperty("replayed")]
|
||
public bool Replayed { get; set; }
|
||
|
||
/// <summary>
|
||
/// 接口返回的身份校验标记,当前恒为 false。
|
||
/// </summary>
|
||
////[JsonProperty("identityVerified")]
|
||
public bool IdentityVerified { get; set; }
|
||
}
|
||
|
||
/// <summary>
|
||
/// 提交客户留言响应。
|
||
/// </summary>
|
||
public sealed class SendMessageResponse
|
||
{
|
||
/// <summary>
|
||
/// 请求是否成功。
|
||
/// </summary>
|
||
////[JsonProperty("success")]
|
||
public bool Success { get; set; }
|
||
|
||
/// <summary>
|
||
/// 订单所属店铺 APPID。
|
||
/// </summary>
|
||
////[JsonProperty("appId")]
|
||
public string AppId { get; set; }
|
||
|
||
/// <summary>
|
||
/// 微信订单号。
|
||
/// </summary>
|
||
////[JsonProperty("wechatOrderId")]
|
||
public string WechatOrderId { get; set; }
|
||
|
||
/// <summary>
|
||
/// 服务端正式生成的消息对象。
|
||
/// </summary>
|
||
////[JsonProperty("message")]
|
||
public TicketMessageDto Message { get; set; }
|
||
|
||
/// <summary>
|
||
/// 留言后的工单状态。
|
||
/// </summary>
|
||
////[JsonProperty("status")]
|
||
public string Status { get; set; }
|
||
|
||
/// <summary>
|
||
/// 留言后的工单版本号字符串。
|
||
/// </summary>
|
||
////[JsonProperty("version")]
|
||
public string Version { get; set; }
|
||
|
||
/// <summary>
|
||
/// 本次留言是否重新开启了已完结工单。
|
||
/// </summary>
|
||
////[JsonProperty("reopened")]
|
||
public bool Reopened { get; set; }
|
||
|
||
/// <summary>
|
||
/// 是否为幂等编号对应的历史回执。
|
||
/// </summary>
|
||
////[JsonProperty("replayed")]
|
||
public bool Replayed { get; set; }
|
||
|
||
/// <summary>
|
||
/// 接口返回的身份校验标记,当前恒为 false。
|
||
/// </summary>
|
||
////[JsonProperty("identityVerified")]
|
||
public bool IdentityVerified { get; set; }
|
||
}
|
||
|
||
/// <summary>
|
||
/// 通用成功状态响应,仅用于在解析具体业务对象前检查顶层 success。
|
||
/// </summary>
|
||
internal sealed class ApiSuccessResponse
|
||
{
|
||
/// <summary>
|
||
/// 请求是否成功。
|
||
/// </summary>
|
||
////[JsonProperty("success")]
|
||
public bool Success { get; set; }
|
||
}
|
||
|
||
/// <summary>
|
||
/// 工单接口错误响应。
|
||
/// </summary>
|
||
internal sealed class ApiErrorResponse
|
||
{
|
||
/// <summary>
|
||
/// 请求是否成功,错误响应通常为 false。
|
||
/// </summary>
|
||
////[JsonProperty("success")]
|
||
public bool Success { get; set; }
|
||
|
||
/// <summary>
|
||
/// 可展示给用户的错误说明。
|
||
/// </summary>
|
||
////[JsonProperty("message")]
|
||
public string Message { get; set; }
|
||
|
||
/// <summary>
|
||
/// 兼容旧接口的错误说明字段。
|
||
/// </summary>
|
||
////[JsonProperty("error")]
|
||
public string Error { get; set; }
|
||
|
||
/// <summary>
|
||
/// 服务端错误编码。
|
||
/// </summary>
|
||
////[JsonProperty("code")]
|
||
public string Code { get; set; }
|
||
}
|