mirror of
https://gitee.com/fudiwei/DotNetCore.SKIT.FlurlHttpClient.Wechat.git
synced 2025-09-21 02:58:06 +08:00
refactor(openai): 重新实现请求加密 XML 序列化的方式
This commit is contained in:
@@ -112,7 +112,7 @@ namespace SKIT.FlurlHttpClient.Wechat.OpenAI
|
|||||||
using var fileContent = new ByteArrayContent(request.FileBytes ?? Array.Empty<byte>());
|
using var fileContent = new ByteArrayContent(request.FileBytes ?? Array.Empty<byte>());
|
||||||
using var paramContent = new StringContent(
|
using var paramContent = new StringContent(
|
||||||
Utilities.WxMsgCryptor.AESEncrypt(
|
Utilities.WxMsgCryptor.AESEncrypt(
|
||||||
plainText: Utilities.XmlUtility.Serialize(request),
|
plainText: Utilities.XmlUtility.ConvertFromJson(client.JsonSerializer.Serialize(request)),
|
||||||
encodingAESKey: client.Credentials.EncodingAESKey!,
|
encodingAESKey: client.Credentials.EncodingAESKey!,
|
||||||
appId: client.Credentials.AppId!
|
appId: client.Credentials.AppId!
|
||||||
),
|
),
|
||||||
|
@@ -1,12 +1,10 @@
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Xml.Serialization;
|
|
||||||
|
|
||||||
namespace SKIT.FlurlHttpClient.Wechat.OpenAI.Models
|
namespace SKIT.FlurlHttpClient.Wechat.OpenAI.Models
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// <para>表示 [POST] /batchimportskill/{TOKEN} 接口的请求。</para>
|
/// <para>表示 [POST] /batchimportskill/{TOKEN} 接口的请求。</para>
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[XmlRoot("xml")]
|
|
||||||
public class BatchImportSkillRequest : WechatOpenAIRequest, WechatOpenAIRequest.Serialization.IEncryptedXmlable
|
public class BatchImportSkillRequest : WechatOpenAIRequest, WechatOpenAIRequest.Serialization.IEncryptedXmlable
|
||||||
{
|
{
|
||||||
public static class Types
|
public static class Types
|
||||||
@@ -16,25 +14,29 @@ namespace SKIT.FlurlHttpClient.Wechat.OpenAI.Models
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// 获取或设置技能名称。
|
/// 获取或设置技能名称。
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[XmlElement("skillname")]
|
[Newtonsoft.Json.JsonProperty("skillname")]
|
||||||
|
[System.Text.Json.Serialization.JsonPropertyName("skillname")]
|
||||||
public string SkillName { get; set; } = string.Empty;
|
public string SkillName { get; set; } = string.Empty;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 获取或设置标准问题。
|
/// 获取或设置标准问题。
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[XmlElement("title")]
|
[Newtonsoft.Json.JsonProperty("title")]
|
||||||
|
[System.Text.Json.Serialization.JsonPropertyName("title")]
|
||||||
public string Title { get; set; } = string.Empty;
|
public string Title { get; set; } = string.Empty;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 获取或设置相似问题列表。
|
/// 获取或设置相似问题列表。
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[XmlElement("question", Type = typeof(string))]
|
[Newtonsoft.Json.JsonProperty("question")]
|
||||||
|
[System.Text.Json.Serialization.JsonPropertyName("question")]
|
||||||
public IList<string> QuestionList { get; set; } = new List<string>();
|
public IList<string> QuestionList { get; set; } = new List<string>();
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 获取或设置机器人回答列表。
|
/// 获取或设置机器人回答列表。
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[XmlElement("answer", Type = typeof(string))]
|
[Newtonsoft.Json.JsonProperty("answer")]
|
||||||
|
[System.Text.Json.Serialization.JsonPropertyName("answer")]
|
||||||
public IList<string> AnswerList { get; set; } = new List<string>();
|
public IList<string> AnswerList { get; set; } = new List<string>();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -42,13 +44,15 @@ namespace SKIT.FlurlHttpClient.Wechat.OpenAI.Models
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// 获取或设置管理员 ID。
|
/// 获取或设置管理员 ID。
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[XmlElement("managerid")]
|
[Newtonsoft.Json.JsonProperty("managerid")]
|
||||||
|
[System.Text.Json.Serialization.JsonPropertyName("managerid")]
|
||||||
public string ManagetId { get; set; } = string.Empty;
|
public string ManagetId { get; set; } = string.Empty;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 获取或设置技能列表。
|
/// 获取或设置技能列表。
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[XmlElement("skill", Type = typeof(Types.Skill))]
|
[Newtonsoft.Json.JsonProperty("skill")]
|
||||||
|
[System.Text.Json.Serialization.JsonPropertyName("skill")]
|
||||||
public IList<Types.Skill> SkillList { get; set; } = new List<Types.Skill>();
|
public IList<Types.Skill> SkillList { get; set; } = new List<Types.Skill>();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -1,43 +1,55 @@
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Xml.Serialization;
|
|
||||||
|
|
||||||
namespace SKIT.FlurlHttpClient.Wechat.OpenAI.Models
|
namespace SKIT.FlurlHttpClient.Wechat.OpenAI.Models
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// <para>表示 [POST] /label/batchset/{TOKEN} 接口的请求。</para>
|
/// <para>表示 [POST] /label/batchset/{TOKEN} 接口的请求。</para>
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[XmlRoot("xml")]
|
|
||||||
public class LabelBatchSetRequest : WechatOpenAIRequest, WechatOpenAIRequest.Serialization.IEncryptedXmlable
|
public class LabelBatchSetRequest : WechatOpenAIRequest, WechatOpenAIRequest.Serialization.IEncryptedXmlable
|
||||||
{
|
{
|
||||||
|
public static class Types
|
||||||
|
{
|
||||||
|
public class OpenIdList
|
||||||
|
{
|
||||||
|
[Newtonsoft.Json.JsonProperty("openid")]
|
||||||
|
[System.Text.Json.Serialization.JsonPropertyName("openid")]
|
||||||
|
public IList<string> Items { get; set; } = new List<string>();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 获取或设置微信 AppId。
|
/// 获取或设置微信 AppId。
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[XmlElement("appid")]
|
[Newtonsoft.Json.JsonProperty("appid")]
|
||||||
|
[System.Text.Json.Serialization.JsonPropertyName("appid")]
|
||||||
public string AppId { get; set; } = string.Empty;
|
public string AppId { get; set; } = string.Empty;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 获取或设置标签名称。
|
/// 获取或设置标签名称。
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[XmlElement("category")]
|
[Newtonsoft.Json.JsonProperty("category")]
|
||||||
|
[System.Text.Json.Serialization.JsonPropertyName("category")]
|
||||||
public string Category { get; set; } = string.Empty;
|
public string Category { get; set; } = string.Empty;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 获取或设置二级标签名称。
|
/// 获取或设置二级标签名称。
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[XmlElement("label")]
|
[Newtonsoft.Json.JsonProperty("label")]
|
||||||
|
[System.Text.Json.Serialization.JsonPropertyName("label")]
|
||||||
public string Label { get; set; } = string.Empty;
|
public string Label { get; set; } = string.Empty;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 获取或设置标签分类规则。
|
/// 获取或设置标签分类规则。
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[XmlElement("desc")]
|
[Newtonsoft.Json.JsonProperty("desc")]
|
||||||
|
[System.Text.Json.Serialization.JsonPropertyName("desc")]
|
||||||
public string Description { get; set; } = string.Empty;
|
public string Description { get; set; } = string.Empty;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 获取或设置要设置标签的 OpenId 列表。
|
/// 获取或设置要设置标签的 OpenId 列表。
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[XmlArray("list")]
|
[Newtonsoft.Json.JsonProperty("list")]
|
||||||
[XmlArrayItem("openid", Type = typeof(string))]
|
[System.Text.Json.Serialization.JsonPropertyName("list")]
|
||||||
public IList<string> OpenIdList { get; set; } = new List<string>();
|
public Types.OpenIdList OpenIdList { get; set; } = new Types.OpenIdList();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -1,17 +1,15 @@
|
|||||||
using System.Xml.Serialization;
|
|
||||||
|
|
||||||
namespace SKIT.FlurlHttpClient.Wechat.OpenAI.Models
|
namespace SKIT.FlurlHttpClient.Wechat.OpenAI.Models
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// <para>表示 [POST] /publish_progress/{TOKEN} 接口的请求。</para>
|
/// <para>表示 [POST] /publish_progress/{TOKEN} 接口的请求。</para>
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[XmlRoot("xml")]
|
|
||||||
public class PublishProgressRequest : WechatOpenAIRequest, WechatOpenAIRequest.Serialization.IEncryptedXmlable
|
public class PublishProgressRequest : WechatOpenAIRequest, WechatOpenAIRequest.Serialization.IEncryptedXmlable
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 获取或设置管理员 ID。
|
/// 获取或设置管理员 ID。
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[XmlElement("managerid")]
|
[Newtonsoft.Json.JsonProperty("managerid")]
|
||||||
|
[System.Text.Json.Serialization.JsonPropertyName("managerid")]
|
||||||
public string ManagerId { get; set; } = string.Empty;
|
public string ManagerId { get; set; } = string.Empty;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -1,17 +1,15 @@
|
|||||||
using System.Xml.Serialization;
|
|
||||||
|
|
||||||
namespace SKIT.FlurlHttpClient.Wechat.OpenAI.Models
|
namespace SKIT.FlurlHttpClient.Wechat.OpenAI.Models
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// <para>表示 [POST] /publish/{TOKEN} 接口的请求。</para>
|
/// <para>表示 [POST] /publish/{TOKEN} 接口的请求。</para>
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[XmlRoot("xml")]
|
|
||||||
public class PublishRequest : WechatOpenAIRequest, WechatOpenAIRequest.Serialization.IEncryptedXmlable
|
public class PublishRequest : WechatOpenAIRequest, WechatOpenAIRequest.Serialization.IEncryptedXmlable
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 获取或设置管理员 ID。
|
/// 获取或设置管理员 ID。
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[XmlElement("managerid")]
|
[Newtonsoft.Json.JsonProperty("managerid")]
|
||||||
|
[System.Text.Json.Serialization.JsonPropertyName("managerid")]
|
||||||
public string ManagerId { get; set; } = string.Empty;
|
public string ManagerId { get; set; } = string.Empty;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -1,43 +1,55 @@
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Xml.Serialization;
|
|
||||||
|
|
||||||
namespace SKIT.FlurlHttpClient.Wechat.OpenAI.Models
|
namespace SKIT.FlurlHttpClient.Wechat.OpenAI.Models
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// <para>表示 [POST] /setautoreply/{TOKEN} 接口的请求。</para>
|
/// <para>表示 [POST] /setautoreply/{TOKEN} 接口的请求。</para>
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[XmlRoot("xml")]
|
|
||||||
public class SetAutoReplyRequest : WechatOpenAIRequest, WechatOpenAIRequest.Serialization.IEncryptedXmlable
|
public class SetAutoReplyRequest : WechatOpenAIRequest, WechatOpenAIRequest.Serialization.IEncryptedXmlable
|
||||||
{
|
{
|
||||||
|
public static class Types
|
||||||
|
{
|
||||||
|
public class QuestionList
|
||||||
|
{
|
||||||
|
[Newtonsoft.Json.JsonProperty("question")]
|
||||||
|
[System.Text.Json.Serialization.JsonPropertyName("question")]
|
||||||
|
public IList<string> Items { get; set; } = new List<string>();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 获取或设置管理员 ID。
|
/// 获取或设置管理员 ID。
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[XmlElement("managerid")]
|
[Newtonsoft.Json.JsonProperty("managerid")]
|
||||||
|
[System.Text.Json.Serialization.JsonPropertyName("managerid")]
|
||||||
public string ManagetId { get; set; } = string.Empty;
|
public string ManagetId { get; set; } = string.Empty;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 获取或设置技能名称。
|
/// 获取或设置技能名称。
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[XmlElement("skillname")]
|
[Newtonsoft.Json.JsonProperty("skillname")]
|
||||||
|
[System.Text.Json.Serialization.JsonPropertyName("skillname")]
|
||||||
public string SkillName { get; set; } = string.Empty;
|
public string SkillName { get; set; } = string.Empty;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 获取或设置标准问题。
|
/// 获取或设置标准问题。
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[XmlElement("title")]
|
[Newtonsoft.Json.JsonProperty("title")]
|
||||||
|
[System.Text.Json.Serialization.JsonPropertyName("title")]
|
||||||
public string Title { get; set; } = string.Empty;
|
public string Title { get; set; } = string.Empty;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 获取或设置自动回答的内容。
|
/// 获取或设置自动回答的内容。
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[XmlElement("content")]
|
[Newtonsoft.Json.JsonProperty("content")]
|
||||||
|
[System.Text.Json.Serialization.JsonPropertyName("content")]
|
||||||
public string Content { get; set; } = string.Empty;
|
public string Content { get; set; } = string.Empty;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 获取或设置相似问题列表。
|
/// 获取或设置相似问题列表。
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[XmlArray("list")]
|
[Newtonsoft.Json.JsonProperty("list")]
|
||||||
[XmlArrayItem("question", Type = typeof(string))]
|
[System.Text.Json.Serialization.JsonPropertyName("list")]
|
||||||
public IList<string> QuestionList { get; set; } = new List<string>();
|
public Types.QuestionList QuestionList { get; set; } = new Types.QuestionList();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -1,29 +1,29 @@
|
|||||||
using System.Xml.Serialization;
|
|
||||||
|
|
||||||
namespace SKIT.FlurlHttpClient.Wechat.OpenAI.Models
|
namespace SKIT.FlurlHttpClient.Wechat.OpenAI.Models
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// <para>表示 [POST] /feedback/{TOKEN} 接口的请求。</para>
|
/// <para>表示 [POST] /feedback/{TOKEN} 接口的请求。</para>
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[XmlRoot("xml")]
|
|
||||||
public class FeedbackRequest : WechatOpenAIRequest, WechatOpenAIRequest.Serialization.IEncryptedXmlable
|
public class FeedbackRequest : WechatOpenAIRequest, WechatOpenAIRequest.Serialization.IEncryptedXmlable
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 获取或设置消息 ID。
|
/// 获取或设置消息 ID。
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[XmlElement("msgid")]
|
[Newtonsoft.Json.JsonProperty("msgid")]
|
||||||
|
[System.Text.Json.Serialization.JsonPropertyName("msgid")]
|
||||||
public string MessageId { get; set; } = string.Empty;
|
public string MessageId { get; set; } = string.Empty;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 获取或设置反馈结果。
|
/// 获取或设置反馈结果。
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[XmlElement("feedbackResult")]
|
[Newtonsoft.Json.JsonProperty("feedbackResult")]
|
||||||
|
[System.Text.Json.Serialization.JsonPropertyName("feedbackResult")]
|
||||||
public int FeedbackResult { get; set; }
|
public int FeedbackResult { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 获取或设置用户反馈时间戳。
|
/// 获取或设置用户反馈时间戳。
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[XmlElement("updateAt")]
|
[Newtonsoft.Json.JsonProperty("updateAt")]
|
||||||
|
[System.Text.Json.Serialization.JsonPropertyName("updateAt")]
|
||||||
public long UpdateTimestamp { get; set; }
|
public long UpdateTimestamp { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -1,67 +1,73 @@
|
|||||||
using System.Xml.Serialization;
|
|
||||||
|
|
||||||
namespace SKIT.FlurlHttpClient.Wechat.OpenAI.Models
|
namespace SKIT.FlurlHttpClient.Wechat.OpenAI.Models
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// <para>表示 [POST] /gethotquerydetail/{TOKEN} 接口的请求。</para>
|
/// <para>表示 [POST] /gethotquerydetail/{TOKEN} 接口的请求。</para>
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[XmlRoot("xml")]
|
|
||||||
public class GetHotQueryDetailRequest : WechatOpenAIRequest, WechatOpenAIRequest.Serialization.IEncryptedXmlable
|
public class GetHotQueryDetailRequest : WechatOpenAIRequest, WechatOpenAIRequest.Serialization.IEncryptedXmlable
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 获取或设置分页页数。
|
/// 获取或设置分页页数。
|
||||||
/// <para>默认值:1</para>
|
/// <para>默认值:1</para>
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[XmlElement("pageNo")]
|
[Newtonsoft.Json.JsonProperty("pageNo")]
|
||||||
|
[System.Text.Json.Serialization.JsonPropertyName("pageNo")]
|
||||||
public int Page { get; set; } = 1;
|
public int Page { get; set; } = 1;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 获取或设置分页每页数量。
|
/// 获取或设置分页每页数量。
|
||||||
/// <para>默认值:10</para>
|
/// <para>默认值:10</para>
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[XmlElement("pageSize")]
|
[Newtonsoft.Json.JsonProperty("pageSize")]
|
||||||
|
[System.Text.Json.Serialization.JsonPropertyName("pageSize")]
|
||||||
public int Limit { get; set; } = 10;
|
public int Limit { get; set; } = 10;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 获取或设置命中类型。
|
/// 获取或设置命中类型。
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[XmlElement("matchType", IsNullable = true)]
|
[Newtonsoft.Json.JsonProperty("matchType")]
|
||||||
|
[System.Text.Json.Serialization.JsonPropertyName("matchType")]
|
||||||
public int? MatchType { get; set; }
|
public int? MatchType { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 获取或设置问题类型。
|
/// 获取或设置问题类型。
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[XmlElement("cluesType", IsNullable = true)]
|
[Newtonsoft.Json.JsonProperty("cluesType")]
|
||||||
|
[System.Text.Json.Serialization.JsonPropertyName("cluesType")]
|
||||||
public int? ClueType { get; set; }
|
public int? ClueType { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 获取或设置报告类型。
|
/// 获取或设置报告类型。
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[XmlElement("reportType", IsNullable = true)]
|
[Newtonsoft.Json.JsonProperty("reportType")]
|
||||||
|
[System.Text.Json.Serialization.JsonPropertyName("reportType")]
|
||||||
public int? ReportType { get; set; }
|
public int? ReportType { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 获取或设置日期字符串(格式:yyyy-MM-dd)。
|
/// 获取或设置日期字符串(格式:yyyy-MM-dd)。
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[XmlElement("date")]
|
[Newtonsoft.Json.JsonProperty("date")]
|
||||||
|
[System.Text.Json.Serialization.JsonPropertyName("date")]
|
||||||
public string DateString { get; set; } = string.Empty;
|
public string DateString { get; set; } = string.Empty;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 获取或设置开发者的 OpenId。
|
/// 获取或设置开发者的 OpenId。
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[XmlElement("openid")]
|
[Newtonsoft.Json.JsonProperty("openid")]
|
||||||
|
[System.Text.Json.Serialization.JsonPropertyName("openid")]
|
||||||
public string OpenId { get; set; } = string.Empty;
|
public string OpenId { get; set; } = string.Empty;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 获取或设置聚类结果类别 ID。
|
/// 获取或设置聚类结果类别 ID。
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[XmlElement("clusterId")]
|
[Newtonsoft.Json.JsonProperty("clusterId")]
|
||||||
|
[System.Text.Json.Serialization.JsonPropertyName("clusterId")]
|
||||||
public string ClusterId { get; set; } = string.Empty;
|
public string ClusterId { get; set; } = string.Empty;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 获取或设置聚类结果。
|
/// 获取或设置聚类结果。
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[XmlElement("hotQuesCluster", IsNullable = true)]
|
[Newtonsoft.Json.JsonProperty("hotQuesCluster")]
|
||||||
|
[System.Text.Json.Serialization.JsonPropertyName("hotQuesCluster")]
|
||||||
public string? HotQuestionCluster { get; set; }
|
public string? HotQuestionCluster { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -1,55 +1,59 @@
|
|||||||
using System.Xml.Serialization;
|
|
||||||
|
|
||||||
namespace SKIT.FlurlHttpClient.Wechat.OpenAI.Models
|
namespace SKIT.FlurlHttpClient.Wechat.OpenAI.Models
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// <para>表示 [POST] /gethotquerylist/{TOKEN} 接口的请求。</para>
|
/// <para>表示 [POST] /gethotquerylist/{TOKEN} 接口的请求。</para>
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[XmlRoot("xml")]
|
|
||||||
public class GetHotQueryListRequest : WechatOpenAIRequest, WechatOpenAIRequest.Serialization.IEncryptedXmlable
|
public class GetHotQueryListRequest : WechatOpenAIRequest, WechatOpenAIRequest.Serialization.IEncryptedXmlable
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 获取或设置分页页数。
|
/// 获取或设置分页页数。
|
||||||
/// <para>默认值:1</para>
|
/// <para>默认值:1</para>
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[XmlElement("pageNo")]
|
[Newtonsoft.Json.JsonProperty("pageNo")]
|
||||||
|
[System.Text.Json.Serialization.JsonPropertyName("pageNo")]
|
||||||
public int Page { get; set; } = 1;
|
public int Page { get; set; } = 1;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 获取或设置分页每页数量。
|
/// 获取或设置分页每页数量。
|
||||||
/// <para>默认值:10</para>
|
/// <para>默认值:10</para>
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[XmlElement("pageSize")]
|
[Newtonsoft.Json.JsonProperty("pageSize")]
|
||||||
|
[System.Text.Json.Serialization.JsonPropertyName("pageSize")]
|
||||||
public int Limit { get; set; } = 10;
|
public int Limit { get; set; } = 10;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 获取或设置命中类型。
|
/// 获取或设置命中类型。
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[XmlElement("matchType", IsNullable = true)]
|
[Newtonsoft.Json.JsonProperty("matchType")]
|
||||||
|
[System.Text.Json.Serialization.JsonPropertyName("matchType")]
|
||||||
public int? MatchType { get; set; }
|
public int? MatchType { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 获取或设置问题类型。
|
/// 获取或设置问题类型。
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[XmlElement("cluesType", IsNullable = true)]
|
[Newtonsoft.Json.JsonProperty("cluesType")]
|
||||||
|
[System.Text.Json.Serialization.JsonPropertyName("cluesType")]
|
||||||
public int? ClueType { get; set; }
|
public int? ClueType { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 获取或设置报告类型。
|
/// 获取或设置报告类型。
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[XmlElement("reportType", IsNullable = true)]
|
[Newtonsoft.Json.JsonProperty("reportType")]
|
||||||
|
[System.Text.Json.Serialization.JsonPropertyName("reportType")]
|
||||||
public int? ReportType { get; set; }
|
public int? ReportType { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 获取或设置日期字符串(格式:yyyy-MM-dd)。
|
/// 获取或设置日期字符串(格式:yyyy-MM-dd)。
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[XmlElement("date")]
|
[Newtonsoft.Json.JsonProperty("date")]
|
||||||
|
[System.Text.Json.Serialization.JsonPropertyName("date")]
|
||||||
public string DateString { get; set; } = string.Empty;
|
public string DateString { get; set; } = string.Empty;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 获取或设置开发者的 OpenId。
|
/// 获取或设置开发者的 OpenId。
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[XmlElement("openid")]
|
[Newtonsoft.Json.JsonProperty("openid")]
|
||||||
|
[System.Text.Json.Serialization.JsonPropertyName("openid")]
|
||||||
public string OpenId { get; set; } = string.Empty;
|
public string OpenId { get; set; } = string.Empty;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -1,36 +1,38 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Xml.Serialization;
|
|
||||||
|
|
||||||
namespace SKIT.FlurlHttpClient.Wechat.OpenAI.Models
|
namespace SKIT.FlurlHttpClient.Wechat.OpenAI.Models
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// <para>表示 [POST] /assetsupload/{TOKEN} 接口的请求。</para>
|
/// <para>表示 [POST] /assetsupload/{TOKEN} 接口的请求。</para>
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[XmlRoot("xml")]
|
|
||||||
public class AssetsUploadRequest : WechatOpenAIRequest, WechatOpenAIRequest.Serialization.IEncryptedXmlable
|
public class AssetsUploadRequest : WechatOpenAIRequest, WechatOpenAIRequest.Serialization.IEncryptedXmlable
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 获取或设置用户 ID。
|
/// 获取或设置用户 ID。
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[XmlElement("userid")]
|
[Newtonsoft.Json.JsonProperty("userid")]
|
||||||
|
[System.Text.Json.Serialization.JsonPropertyName("userid")]
|
||||||
public string UserId { get; set; } = string.Empty;
|
public string UserId { get; set; } = string.Empty;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 获取或设置文件字节数组。
|
/// 获取或设置文件字节数组。
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[XmlIgnore]
|
[Newtonsoft.Json.JsonIgnore]
|
||||||
|
[System.Text.Json.Serialization.JsonIgnore]
|
||||||
public byte[] FileBytes { get; set; } = Array.Empty<byte>();
|
public byte[] FileBytes { get; set; } = Array.Empty<byte>();
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 获取或设置文件名。如果不指定将由系统自动生成。
|
/// 获取或设置文件名。如果不指定将由系统自动生成。
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[XmlIgnore]
|
[Newtonsoft.Json.JsonIgnore]
|
||||||
|
[System.Text.Json.Serialization.JsonIgnore]
|
||||||
public string? FileName { get; set; }
|
public string? FileName { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 获取或设置文件 Conent-Type。如果不指定将由系统自动生成。
|
/// 获取或设置文件 Conent-Type。如果不指定将由系统自动生成。
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[XmlIgnore]
|
[Newtonsoft.Json.JsonIgnore]
|
||||||
|
[System.Text.Json.Serialization.JsonIgnore]
|
||||||
public string? FileContentType { get; set; }
|
public string? FileContentType { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -1,17 +1,15 @@
|
|||||||
using System.Xml.Serialization;
|
|
||||||
|
|
||||||
namespace SKIT.FlurlHttpClient.Wechat.OpenAI.Models
|
namespace SKIT.FlurlHttpClient.Wechat.OpenAI.Models
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// <para>表示 [POST] /getbindlink/{TOKEN} 接口的请求。</para>
|
/// <para>表示 [POST] /getbindlink/{TOKEN} 接口的请求。</para>
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[XmlRoot("xml")]
|
|
||||||
public class GetBindLinkRequest : WechatOpenAIRequest, WechatOpenAIRequest.Serialization.IEncryptedXmlable
|
public class GetBindLinkRequest : WechatOpenAIRequest, WechatOpenAIRequest.Serialization.IEncryptedXmlable
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 获取或设置直播 ID。
|
/// 获取或设置直播 ID。
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[XmlElement("redirectlink")]
|
[Newtonsoft.Json.JsonProperty("redirectlink")]
|
||||||
public string RedirectLink { get; set; } = string.Empty;
|
[System.Text.Json.Serialization.JsonPropertyName("redirectlink")]
|
||||||
|
public string RedirectUrl { get; set; } = string.Empty;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -24,6 +24,6 @@ namespace SKIT.FlurlHttpClient.Wechat.OpenAI.Models
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
[Newtonsoft.Json.JsonProperty("link")]
|
[Newtonsoft.Json.JsonProperty("link")]
|
||||||
[System.Text.Json.Serialization.JsonPropertyName("link")]
|
[System.Text.Json.Serialization.JsonPropertyName("link")]
|
||||||
public string Url { get; set; } = default!;
|
public string LinkUrl { get; set; } = default!;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -1,12 +1,9 @@
|
|||||||
using System.Xml.Serialization;
|
|
||||||
|
|
||||||
namespace SKIT.FlurlHttpClient.Wechat.OpenAI.Models
|
namespace SKIT.FlurlHttpClient.Wechat.OpenAI.Models
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// <para>表示 [POST] /getbindlist/{TOKEN} 接口的请求。</para>
|
/// <para>表示 [POST] /getbindlist/{TOKEN} 接口的请求。</para>
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[XmlRoot("xml")]
|
public class GetBindListRequest : WechatOpenAIRequest
|
||||||
public class GetBindListRequest : WechatOpenAIRequest, WechatOpenAIRequest.Serialization.IEncryptedXmlable
|
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -1,17 +1,15 @@
|
|||||||
using System.Xml.Serialization;
|
|
||||||
|
|
||||||
namespace SKIT.FlurlHttpClient.Wechat.OpenAI.Models
|
namespace SKIT.FlurlHttpClient.Wechat.OpenAI.Models
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// <para>表示 [POST] /geth5link/{TOKEN} 接口的请求。</para>
|
/// <para>表示 [POST] /geth5link/{TOKEN} 接口的请求。</para>
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[XmlRoot("xml")]
|
|
||||||
public class GetH5LinkRequest : WechatOpenAIRequest, WechatOpenAIRequest.Serialization.IEncryptedXmlable
|
public class GetH5LinkRequest : WechatOpenAIRequest, WechatOpenAIRequest.Serialization.IEncryptedXmlable
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 获取或设置页面标题。
|
/// 获取或设置页面标题。
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[XmlElement("title", IsNullable = true)]
|
[Newtonsoft.Json.JsonProperty("title")]
|
||||||
|
[System.Text.Json.Serialization.JsonPropertyName("title")]
|
||||||
public string? Title { get; set; }
|
public string? Title { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -24,6 +24,6 @@ namespace SKIT.FlurlHttpClient.Wechat.OpenAI.Models
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
[Newtonsoft.Json.JsonProperty("link")]
|
[Newtonsoft.Json.JsonProperty("link")]
|
||||||
[System.Text.Json.Serialization.JsonPropertyName("link")]
|
[System.Text.Json.Serialization.JsonPropertyName("link")]
|
||||||
public string Url { get; set; } = default!;
|
public string LinkUrl { get; set; } = default!;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -1,17 +1,15 @@
|
|||||||
using System.Xml.Serialization;
|
|
||||||
|
|
||||||
namespace SKIT.FlurlHttpClient.Wechat.OpenAI.Models
|
namespace SKIT.FlurlHttpClient.Wechat.OpenAI.Models
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// <para>表示 [POST] /unbindmp/{TOKEN} 接口的请求。</para>
|
/// <para>表示 [POST] /unbindmp/{TOKEN} 接口的请求。</para>
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[XmlRoot("xml")]
|
|
||||||
public class UnbindMpRequest : WechatOpenAIRequest, WechatOpenAIRequest.Serialization.IEncryptedXmlable
|
public class UnbindMpRequest : WechatOpenAIRequest, WechatOpenAIRequest.Serialization.IEncryptedXmlable
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 获取或设置微信 AppId。
|
/// 获取或设置微信 AppId。
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[XmlElement("authorizer_appid")]
|
[Newtonsoft.Json.JsonProperty("authorizer_appid")]
|
||||||
|
[System.Text.Json.Serialization.JsonPropertyName("authorizer_appid")]
|
||||||
public string AuthorizerAppId { get; set; } = string.Empty;
|
public string AuthorizerAppId { get; set; } = string.Empty;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -1,35 +1,36 @@
|
|||||||
using System.Xml.Serialization;
|
|
||||||
|
|
||||||
namespace SKIT.FlurlHttpClient.Wechat.OpenAI.Models
|
namespace SKIT.FlurlHttpClient.Wechat.OpenAI.Models
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// <para>表示 [POST] /kefustate/change/{TOKEN} 接口的请求。</para>
|
/// <para>表示 [POST] /kefustate/change/{TOKEN} 接口的请求。</para>
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[XmlRoot("xml")]
|
|
||||||
public class KefuStateChangeRequest : WechatOpenAIRequest, WechatOpenAIRequest.Serialization.IEncryptedXmlable
|
public class KefuStateChangeRequest : WechatOpenAIRequest, WechatOpenAIRequest.Serialization.IEncryptedXmlable
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 获取或设置微信 AppId。如果不指定将使用构造 <see cref="WechatOpenAIClient"/> 时的 <see cref="WechatOpenAIClientOptions.AppId"/> 参数。
|
/// 获取或设置微信 AppId。如果不指定将使用构造 <see cref="WechatOpenAIClient"/> 时的 <see cref="WechatOpenAIClientOptions.AppId"/> 参数。
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[XmlElement("appid")]
|
[Newtonsoft.Json.JsonProperty("appid")]
|
||||||
|
[System.Text.Json.Serialization.JsonPropertyName("appid")]
|
||||||
public string? AppId { get; set; }
|
public string? AppId { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 获取或设置用户的 OpenId。
|
/// 获取或设置用户的 OpenId。
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[XmlElement("openid")]
|
[Newtonsoft.Json.JsonProperty("openid")]
|
||||||
|
[System.Text.Json.Serialization.JsonPropertyName("openid")]
|
||||||
public string OpenId { get; set; } = string.Empty;
|
public string OpenId { get; set; } = string.Empty;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 获取或设置客服接入状态。
|
/// 获取或设置客服接入状态。
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[XmlElement("kefustate")]
|
[Newtonsoft.Json.JsonProperty("kefustate")]
|
||||||
|
[System.Text.Json.Serialization.JsonPropertyName("kefustate")]
|
||||||
public string KfState { get; set; } = string.Empty;
|
public string KfState { get; set; } = string.Empty;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 获取或设置有效期(单位:秒)。
|
/// 获取或设置有效期(单位:秒)。
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[XmlElement("expires", IsNullable = true)]
|
[Newtonsoft.Json.JsonProperty("expires")]
|
||||||
|
[System.Text.Json.Serialization.JsonPropertyName("expires")]
|
||||||
public int? ExpiresIn { get; set; }
|
public int? ExpiresIn { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -1,29 +1,29 @@
|
|||||||
using System.Xml.Serialization;
|
|
||||||
|
|
||||||
namespace SKIT.FlurlHttpClient.Wechat.OpenAI.Models
|
namespace SKIT.FlurlHttpClient.Wechat.OpenAI.Models
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// <para>表示 [POST] /kefustate/get/{TOKEN} 接口的请求。</para>
|
/// <para>表示 [POST] /kefustate/get/{TOKEN} 接口的请求。</para>
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[XmlRoot("xml")]
|
|
||||||
public class KefuStateGetRequest : WechatOpenAIRequest, WechatOpenAIRequest.Serialization.IEncryptedXmlable
|
public class KefuStateGetRequest : WechatOpenAIRequest, WechatOpenAIRequest.Serialization.IEncryptedXmlable
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 获取或设置微信 AppId。如果不指定将使用构造 <see cref="WechatOpenAIClient"/> 时的 <see cref="WechatOpenAIClientOptions.AppId"/> 参数。
|
/// 获取或设置微信 AppId。如果不指定将使用构造 <see cref="WechatOpenAIClient"/> 时的 <see cref="WechatOpenAIClientOptions.AppId"/> 参数。
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[XmlElement("appid")]
|
[Newtonsoft.Json.JsonProperty("appid")]
|
||||||
|
[System.Text.Json.Serialization.JsonPropertyName("appid")]
|
||||||
public string? AppId { get; set; }
|
public string? AppId { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 获取或设置用户的 OpenId。
|
/// 获取或设置用户的 OpenId。
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[XmlElement("openid")]
|
[Newtonsoft.Json.JsonProperty("openid")]
|
||||||
|
[System.Text.Json.Serialization.JsonPropertyName("openid")]
|
||||||
public string OpenId { get; set; } = string.Empty;
|
public string OpenId { get; set; } = string.Empty;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 获取或设置获取类型。
|
/// 获取或设置获取类型。
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[XmlElement("type", IsNullable = true)]
|
[Newtonsoft.Json.JsonProperty("type")]
|
||||||
|
[System.Text.Json.Serialization.JsonPropertyName("type")]
|
||||||
public int? Type { get; set; }
|
public int? Type { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -1,59 +1,64 @@
|
|||||||
using System.Xml.Serialization;
|
|
||||||
|
|
||||||
namespace SKIT.FlurlHttpClient.Wechat.OpenAI.Models
|
namespace SKIT.FlurlHttpClient.Wechat.OpenAI.Models
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// <para>表示 [POST] /sendmsg/{TOKEN} 接口的请求。</para>
|
/// <para>表示 [POST] /sendmsg/{TOKEN} 接口的请求。</para>
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[XmlRoot("xml")]
|
|
||||||
public class SendMessageRequest : WechatOpenAIRequest, WechatOpenAIRequest.Serialization.IEncryptedXmlable
|
public class SendMessageRequest : WechatOpenAIRequest, WechatOpenAIRequest.Serialization.IEncryptedXmlable
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 获取或设置微信 AppId。如果不指定将使用构造 <see cref="WechatOpenAIClient"/> 时的 <see cref="WechatOpenAIClientOptions.AppId"/> 参数。
|
/// 获取或设置微信 AppId。如果不指定将使用构造 <see cref="WechatOpenAIClient"/> 时的 <see cref="WechatOpenAIClientOptions.AppId"/> 参数。
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[XmlElement("appid")]
|
[Newtonsoft.Json.JsonProperty("appid")]
|
||||||
|
[System.Text.Json.Serialization.JsonPropertyName("appid")]
|
||||||
public string? AppId { get; set; }
|
public string? AppId { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 获取或设置用户的 OpenId。
|
/// 获取或设置用户的 OpenId。
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[XmlElement("openid")]
|
[Newtonsoft.Json.JsonProperty("openid")]
|
||||||
|
[System.Text.Json.Serialization.JsonPropertyName("openid")]
|
||||||
public string OpenId { get; set; } = string.Empty;
|
public string OpenId { get; set; } = string.Empty;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 获取或设置消息内容。
|
/// 获取或设置消息内容。
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[XmlElement("msg")]
|
[Newtonsoft.Json.JsonProperty("msg")]
|
||||||
|
[System.Text.Json.Serialization.JsonPropertyName("msg")]
|
||||||
public string Message { get; set; } = string.Empty;
|
public string Message { get; set; } = string.Empty;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 获取或设置渠道。
|
/// 获取或设置渠道。
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[XmlElement("channel")]
|
[Newtonsoft.Json.JsonProperty("channel")]
|
||||||
|
[System.Text.Json.Serialization.JsonPropertyName("channel")]
|
||||||
public int Channel { get; set; }
|
public int Channel { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 获取或设置事件。
|
/// 获取或设置事件。
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[XmlElement("event", IsNullable = true)]
|
[Newtonsoft.Json.JsonProperty("event")]
|
||||||
|
[System.Text.Json.Serialization.JsonPropertyName("event")]
|
||||||
public string? Event { get; set; }
|
public string? Event { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 获取或设置客服人员的昵称。
|
/// 获取或设置客服人员的昵称。
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[XmlElement("kefuname", IsNullable = true)]
|
[Newtonsoft.Json.JsonProperty("kefuname")]
|
||||||
|
[System.Text.Json.Serialization.JsonPropertyName("kefuname")]
|
||||||
public string? KfName { get; set; }
|
public string? KfName { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 获取或设置客服人员的头像 URL。
|
/// 获取或设置客服人员的头像 URL。
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[XmlElement("kefuavatar", IsNullable = true)]
|
[Newtonsoft.Json.JsonProperty("kefuavatar")]
|
||||||
|
[System.Text.Json.Serialization.JsonPropertyName("kefuavatar")]
|
||||||
public string? KfAvatarUrl { get; set; }
|
public string? KfAvatarUrl { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 获取或设置分类或技能名称。
|
/// 获取或设置分类或技能名称。
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[XmlElement("ans_node_name", IsNullable = true)]
|
[Newtonsoft.Json.JsonProperty("ans_node_name")]
|
||||||
|
[System.Text.Json.Serialization.JsonPropertyName("ans_node_name")]
|
||||||
public string? AnswerNodeName { get; set; }
|
public string? AnswerNodeName { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -5,6 +5,7 @@ using System.Text;
|
|||||||
using System.Text.RegularExpressions;
|
using System.Text.RegularExpressions;
|
||||||
using System.Xml;
|
using System.Xml;
|
||||||
using System.Xml.Serialization;
|
using System.Xml.Serialization;
|
||||||
|
using Newtonsoft.Json;
|
||||||
|
|
||||||
namespace SKIT.FlurlHttpClient.Wechat.OpenAI.Utilities
|
namespace SKIT.FlurlHttpClient.Wechat.OpenAI.Utilities
|
||||||
{
|
{
|
||||||
@@ -60,11 +61,6 @@ namespace SKIT.FlurlHttpClient.Wechat.OpenAI.Utilities
|
|||||||
return Serialize(typeof(T), obj);
|
return Serialize(typeof(T), obj);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static string Serialize(object obj)
|
|
||||||
{
|
|
||||||
return Serialize(obj.GetType(), obj);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static object Deserialize(Type type, string xml)
|
public static object Deserialize(Type type, string xml)
|
||||||
{
|
{
|
||||||
using var reader = new StringReader(xml);
|
using var reader = new StringReader(xml);
|
||||||
@@ -77,5 +73,12 @@ namespace SKIT.FlurlHttpClient.Wechat.OpenAI.Utilities
|
|||||||
{
|
{
|
||||||
return (T)Deserialize(typeof(T), xml);
|
return (T)Deserialize(typeof(T), xml);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static string ConvertFromJson(string json)
|
||||||
|
{
|
||||||
|
XmlDocument xmlDocument = JsonConvert.DeserializeXmlNode(json, "xml")!;
|
||||||
|
string xml = xmlDocument.InnerXml;
|
||||||
|
return xml;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -102,7 +102,7 @@ namespace SKIT.FlurlHttpClient.Wechat.OpenAI
|
|||||||
{
|
{
|
||||||
if (data is WechatOpenAIRequest.Serialization.IEncryptedXmlable)
|
if (data is WechatOpenAIRequest.Serialization.IEncryptedXmlable)
|
||||||
{
|
{
|
||||||
string plainXml = Utilities.XmlUtility.Serialize(data);
|
string plainXml = Utilities.XmlUtility.ConvertFromJson(JsonSerializer.Serialize(data));
|
||||||
string encryptedXml = Utilities.WxMsgCryptor.AESEncrypt(plainText: plainXml, encodingAESKey: Credentials.EncodingAESKey!, appId: Credentials.AppId!);
|
string encryptedXml = Utilities.WxMsgCryptor.AESEncrypt(plainText: plainXml, encodingAESKey: Credentials.EncodingAESKey!, appId: Credentials.AppId!);
|
||||||
data = new { encrypt = encryptedXml };
|
data = new { encrypt = encryptedXml };
|
||||||
}
|
}
|
||||||
|
@@ -0,0 +1,28 @@
|
|||||||
|
{
|
||||||
|
"managerid": "平台管理员ID",
|
||||||
|
"skill": [
|
||||||
|
{
|
||||||
|
"skillname": "技能名称1",
|
||||||
|
"title": "标准问题2",
|
||||||
|
"question": [
|
||||||
|
"相似问题1",
|
||||||
|
"相似问题2",
|
||||||
|
"相似问题3"
|
||||||
|
],
|
||||||
|
"answer": [
|
||||||
|
"1",
|
||||||
|
"2"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"skillname": "技能名称1",
|
||||||
|
"title": "标准问题3",
|
||||||
|
"question": [
|
||||||
|
"相似问题1"
|
||||||
|
],
|
||||||
|
"answer": [
|
||||||
|
"1"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
@@ -0,0 +1,12 @@
|
|||||||
|
{
|
||||||
|
"appid": "wxxxxx",
|
||||||
|
"category": "完件",
|
||||||
|
"label": "完成",
|
||||||
|
"desc": "在 app 中完成了用户信息",
|
||||||
|
"list": {
|
||||||
|
"openid": [
|
||||||
|
"openid_1",
|
||||||
|
"openid_2"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
@@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"managerid": "平台管理员ID"
|
||||||
|
}
|
@@ -0,0 +1,10 @@
|
|||||||
|
{
|
||||||
|
"errcode": 1001,
|
||||||
|
"errmsg": "TOKEN is not valid",
|
||||||
|
"code": 0,
|
||||||
|
"data": {
|
||||||
|
"progress": 100,
|
||||||
|
"status": 1
|
||||||
|
},
|
||||||
|
"msg": "success"
|
||||||
|
}
|
@@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"managerid": "平台管理员ID"
|
||||||
|
}
|
@@ -0,0 +1,12 @@
|
|||||||
|
{
|
||||||
|
"managerid": "平台管理员ID",
|
||||||
|
"skillname": "技能名称",
|
||||||
|
"title": "标准问题",
|
||||||
|
"content": "自动回答的内容",
|
||||||
|
"list": {
|
||||||
|
"question": [
|
||||||
|
"相似问题1",
|
||||||
|
"相似问题2"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
@@ -0,0 +1,5 @@
|
|||||||
|
{
|
||||||
|
"msgid": "WtxsA9ENwZtFdjK",
|
||||||
|
"feedbackResult": 1,
|
||||||
|
"updateAt": 1653496004
|
||||||
|
}
|
@@ -0,0 +1,11 @@
|
|||||||
|
{
|
||||||
|
"pageNo": 1,
|
||||||
|
"pageSize": 10,
|
||||||
|
"matchType": 0,
|
||||||
|
"cluesType": 0,
|
||||||
|
"reportType": 0,
|
||||||
|
"date": "2021-07-19",
|
||||||
|
"openid": "abcdasdf123123asldjfalsjdf",
|
||||||
|
"clusterId": "10971,10971,openaiquerycluster_10971_a32bfe917bbae4b6d09b90482c33c4b6",
|
||||||
|
"hotQuesCluster": "遇到难以解决问题,请<a href=\"weixin://dl/help\">轻按此处</a>反馈给我们,我们会第一时间处理。"
|
||||||
|
}
|
@@ -0,0 +1,9 @@
|
|||||||
|
{
|
||||||
|
"pageNo": 1,
|
||||||
|
"pageSize": 10,
|
||||||
|
"matchType": 0,
|
||||||
|
"cluesType": 0,
|
||||||
|
"reportType": 0,
|
||||||
|
"date": "2021-07-19",
|
||||||
|
"openid": "abcdasdf123123asldjfalsjdf"
|
||||||
|
}
|
@@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"userid": "xxxxx"
|
||||||
|
}
|
@@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"redirectlink": "https://xxx.com/xxx"
|
||||||
|
}
|
@@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"title": "xxx客服"
|
||||||
|
}
|
@@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"authorizer_appid": "https://xxx.com/xxx"
|
||||||
|
}
|
@@ -0,0 +1,5 @@
|
|||||||
|
{
|
||||||
|
"appid": "wxxxxx",
|
||||||
|
"openid": "xxxxx",
|
||||||
|
"kefustate": "needperson"
|
||||||
|
}
|
@@ -0,0 +1,4 @@
|
|||||||
|
{
|
||||||
|
"appid": "wxxxxx",
|
||||||
|
"openid": "xxxxx"
|
||||||
|
}
|
@@ -0,0 +1,9 @@
|
|||||||
|
{
|
||||||
|
"appid": "wxxxxx",
|
||||||
|
"openid": "xxxxx",
|
||||||
|
"msg": "您好,请问需要什么帮助",
|
||||||
|
"channel": 0,
|
||||||
|
"kefuname": "客服昵称",
|
||||||
|
"kefuavatar": "客服头像图片 URL 地址",
|
||||||
|
"ans_node_name": "分类或技能名称"
|
||||||
|
}
|
@@ -0,0 +1,17 @@
|
|||||||
|
using System.Threading.Tasks;
|
||||||
|
using Xunit;
|
||||||
|
|
||||||
|
namespace SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests
|
||||||
|
{
|
||||||
|
public class TestCase_ApiExecuteDialogTests
|
||||||
|
{
|
||||||
|
[Fact(DisplayName = "测试用例:调用 API [POST] /sign/{TOKEN}")]
|
||||||
|
public async Task TestExecuteSign()
|
||||||
|
{
|
||||||
|
var request = new Models.SignRequest() { UserId = "TEST_USERID" };
|
||||||
|
var response = await TestClients.Instance.ExecuteSignAsync(request);
|
||||||
|
|
||||||
|
Assert.NotNull(response.Signature);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@@ -0,0 +1,17 @@
|
|||||||
|
using System.Threading.Tasks;
|
||||||
|
using Xunit;
|
||||||
|
|
||||||
|
namespace SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests
|
||||||
|
{
|
||||||
|
public class TestCase_ApiExecuteMpTests
|
||||||
|
{
|
||||||
|
[Fact(DisplayName = "测试用例:调用 API [POST] /getbindlink/{TOKEN}")]
|
||||||
|
public async Task TestExecuteSign()
|
||||||
|
{
|
||||||
|
var request = new Models.GetBindLinkRequest() { RedirectUrl = "https://example.com" };
|
||||||
|
var response = await TestClients.Instance.ExecuteGetBindLinkAsync(request);
|
||||||
|
|
||||||
|
Assert.NotNull(response.LinkUrl);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@@ -1,17 +0,0 @@
|
|||||||
using Xunit;
|
|
||||||
|
|
||||||
namespace SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests
|
|
||||||
{
|
|
||||||
public class TestCase_XmlUtilityTests
|
|
||||||
{
|
|
||||||
[Fact(DisplayName = "测试用例:XML 序列化派生类")]
|
|
||||||
public void TestXmlSerializeSubClass()
|
|
||||||
{
|
|
||||||
Assert.Null(Record.Exception(() =>
|
|
||||||
{
|
|
||||||
object obj = new Models.SignRequest() { UserId = "TEST" };
|
|
||||||
Utilities.XmlUtility.Serialize(obj);
|
|
||||||
}));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
Reference in New Issue
Block a user