2020-12-28 14:55:48 +08:00
|
|
|
|
using Hncore.Infrastructure.Common;
|
|
|
|
|
|
using Microsoft.Extensions.DependencyInjection;
|
|
|
|
|
|
using System;
|
|
|
|
|
|
using System.IO;
|
|
|
|
|
|
using System.Xml;
|
|
|
|
|
|
using System.Xml.Linq;
|
|
|
|
|
|
|
|
|
|
|
|
namespace Hncore.Wx.Open
|
|
|
|
|
|
{
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// RequestMessage工厂
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public static class MessageFactory
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
|
|
public static IServiceCollection Service { get; set; }
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 获取XDocument转换后的IRequestMessageBase实例。
|
|
|
|
|
|
/// 如果MsgType不存在,抛出UnknownRequestMsgTypeException异常
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
|
public static IMessageBase GetRequestEntity(XDocument doc)
|
|
|
|
|
|
{
|
|
|
|
|
|
IMessageBase requestMessage = null;
|
|
|
|
|
|
RequestInfoType infoType;
|
|
|
|
|
|
|
|
|
|
|
|
try
|
|
|
|
|
|
{
|
|
|
|
|
|
infoType = InfoTypeHelper.GetRequestInfoType(doc);
|
|
|
|
|
|
switch (infoType)
|
|
|
|
|
|
{
|
|
|
|
|
|
case RequestInfoType.component_verify_ticket:
|
|
|
|
|
|
requestMessage = new MessageComponentVerifyTicket(doc);
|
|
|
|
|
|
break;
|
|
|
|
|
|
case RequestInfoType.unauthorized:
|
|
|
|
|
|
requestMessage = new MessageUnauthorized(doc);
|
|
|
|
|
|
break;
|
|
|
|
|
|
case RequestInfoType.authorized:
|
|
|
|
|
|
requestMessage = new MessageAuthorized(doc);
|
|
|
|
|
|
break;
|
|
|
|
|
|
case RequestInfoType.updateauthorized:
|
|
|
|
|
|
requestMessage = new MessageUpdateAuthorized(doc);
|
|
|
|
|
|
break;
|
|
|
|
|
|
case RequestInfoType.notify_third_fasteregister:
|
|
|
|
|
|
requestMessage = new MessageThirdFasteRegister(doc);
|
|
|
|
|
|
break;
|
|
|
|
|
|
case RequestInfoType.event_subscribe_qrscene:
|
|
|
|
|
|
requestMessage = new MessageEventSubscribeQrscene(doc);
|
|
|
|
|
|
break;
|
|
|
|
|
|
case RequestInfoType.event_SCAN:
|
|
|
|
|
|
requestMessage = new MessageEventScan(doc);
|
|
|
|
|
|
break;
|
|
|
|
|
|
case RequestInfoType.event_subscribe:
|
|
|
|
|
|
requestMessage = new MessageEventSubscribe(doc);
|
|
|
|
|
|
break;
|
|
|
|
|
|
default:
|
|
|
|
|
|
return new MessageDefault();
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
catch (Exception ex)
|
|
|
|
|
|
{
|
|
|
|
|
|
LogHelper.Error("MessageFactory 解析失败", ex.Message);
|
|
|
|
|
|
}
|
|
|
|
|
|
return requestMessage;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 获取XDocument转换后的IRequestMessageBase实例。
|
|
|
|
|
|
/// 如果MsgType不存在,抛出UnknownRequestMsgTypeException异常
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
|
public static IMessageBase GetRequestEntity(string xml)
|
|
|
|
|
|
{
|
|
|
|
|
|
return GetRequestEntity(XDocument.Parse(xml));
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 获取XDocument转换后的IRequestMessageBase实例。
|
|
|
|
|
|
/// 如果MsgType不存在,抛出UnknownRequestMsgTypeException异常
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="stream">如Request.InputStream</param>
|
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
|
public static IMessageBase GetRequestEntity(Stream stream)
|
|
|
|
|
|
{
|
|
|
|
|
|
using (XmlReader xr = XmlReader.Create(stream))
|
|
|
|
|
|
{
|
|
|
|
|
|
var doc = XDocument.Load(xr);
|
|
|
|
|
|
|
|
|
|
|
|
return GetRequestEntity(doc);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|