Пример #1
0
        /// <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>());
        }