/// <summary> /// 解析消息并执行相应逻辑 /// </summary> /// <param name="msgStr">微信post过来的消息数据,xml格式</param> /// <returns>回复给用户的消息,将使用客服接口进行回复</returns> /// <exception cref="NotSupportedException"></exception> public static string ParseAndExecute(string msgStr) { var msgbase = Xml.Net.XmlConvert.DeserializeObject <MessageBase>(msgStr); IWxMsgHandler handler; switch (msgbase.MsgType) { case "text": // 文本消息 handler = new TextMessageHandler( ); break; case "image": // 图片消息 handler = new ImageMessageHandler( ); break; case "voice": // 语言消息 handler = new VoiceMessageHandler( ); break; case "video": // 视频消息 handler = new VideoMessageHandler( ); break; case "shortvideo": // 小视频消息 handler = new ShortVideoMessageHandler( ); break; case "location": // 地理位置消息 handler = new LocationMessageHandler( ); break; case "link": // 链接消息 handler = new LinkMessageHandler( ); break; case "event": // 事件 return(ParseEvent(msgStr)); default: throw new System.NotSupportedException("不支持的消息类型: " + msgbase.MsgType); } return(handler.Handle(msgStr)); }
public void GIVEN_a_RegisteredLocation_message_WHEN_listened_THEN_the_aggregate_is_saved_in_the_repository() { var dependencies = new MessageHandlerDependenciesHolder<LocationAggregate>(); var aggregate = GenerateRandomAggregate(); var handlersConfig = new List<MessageHandlerConfiguration>(); handlersConfig.Add(new MessageHandlerConfigurationFake("LocationMessageHandler", new List<ESynchroSystem>() { ESynchroSystem.PortalPaciente })); dependencies.HostConfiguration.MessagesHandlers.Returns(handlersConfig); dependencies.MessageDecrypter.Decrypt<LocationAggregate>(Arg.Any<NotNullable<BaseEvent>>()).Returns(aggregate); var sut = new LocationMessageHandler( dependencies.RepositoryFactory, dependencies.MessageDecrypter, dependencies.HostConfiguration, dependencies.HostServiceEvents); var message = TestsHelpers.GenerateRandomMessage("RegisteredLocation"); dependencies.HostServiceEvents.AddIncommingEvent(message); dependencies.Repository.Received(1).Save(aggregate); }
public void GIVEN_null_configuration_is_provided_WHEN_listened_a_message_THEN_it_does_nothing() { var dependencies = new MessageHandlerDependenciesHolder<LocationAggregate>(); var aggregate = GenerateRandomAggregate(); var handlersConfig = new List<MessageHandlerConfiguration>(); dependencies.HostConfiguration.MessagesHandlers.Returns(handlersConfig); dependencies.MessageDecrypter.Decrypt<LocationAggregate>(Arg.Any<NotNullable<BaseEvent>>()).Returns(aggregate); var sut = new LocationMessageHandler( dependencies.RepositoryFactory, dependencies.MessageDecrypter, dependencies.HostConfiguration, dependencies.HostServiceEvents); var message = TestsHelpers.GenerateRandomMessage("RegisteredLocation"); dependencies.HostServiceEvents.AddIncommingEvent(message); dependencies.Repository.DidNotReceive().Save(Arg.Any<LocationAggregate>()); }