Example #1
0
        private void ConfigureSitef()
        {
            var config = Configuration.GetSection("AppSettings").Get <AppSettings>();

            ConfigfSitefInterativoModel confSitefModel = new ConfigfSitefInterativoModel(config.SiTefIp, config.IdLoja, config.IdTerminal);

            var value = CliSiTefMethods.ConfiguraIntSiTefInterativo(confSitefModel.IpSiTef, confSitefModel.IdLoja, confSitefModel.IdTerminal, confSitefModel.Reservado);

            if (value != 0)
            {
                TefMessages.ConfigErrors(value);
            }

            var keepAlive = CliSiTefMethods.KeepAlivePinPad();

            TefMessages.PinpadErrors(keepAlive);

            Console.WriteLine("Endereço IP SiTef: {0} ", config.SiTefIp);
            Console.WriteLine("Id da Loja: {0} ", config.IdLoja);
            Console.WriteLine("Id do Terminal (PDV): {0} ", config.IdTerminal);
        }
        public RechargeViewModel RealizaTransacao(RechargeCommand rechargeCommand)
        {
            bool endOfPayment = false;

            /* ******************* Continua Sitef Interativo Variaveis ******************* */
            int           Comando   = 0;
            int           TamBuffer = 0;
            int           Continua  = 0;
            int           TamMinimo = 0;
            int           TamMaximo = 0;
            int           TipoCampo = 0;
            StringBuilder Buffer    = new StringBuilder(20000); //buffer de 20k bytes
            /* *************************************************************************** */

            IniciafSitefInterativoModel sitefInterativo = new IniciafSitefInterativoModel(rechargeCommand.Valor, rechargeCommand.Operator, "123456", rechargeCommand.PaymentMode);

            try
            {
                CheckPinPad();

                value = CliSiTefMethods.IniciaFuncaoSiTefInterativo((int)sitefInterativo.PaymentMode, sitefInterativo.Valor, sitefInterativo.CupomFiscal, sitefInterativo.DataFiscal, sitefInterativo.HoraFiscal, sitefInterativo.Operador, null);

                if (value != CONTINUA)
                {
                    TefMessages.ValueErrors(value);
                }

                while (!endOfPayment)
                {
                    value = CliSiTefMethods.ContinuaFuncaoSiTefInterativo(ref Comando, ref TipoCampo, ref TamMinimo, ref TamMaximo, Buffer, TamBuffer, Continua);

                    if (value == CONTINUA)
                    {
                        ComandoTipoCampo(Comando, TipoCampo, ref Buffer, rechargeCommand.Id);

                        if (Comando == 0 && TipoCampo == 132 && string.IsNullOrEmpty(codBandeira))
                        {
                            Continua = -1;
                        }
                    }
                    else if (value == FINALIZA_TRANSACAO)
                    {
                        endOfPayment = true;
                    }
                    else
                    {
                        TefMessages.ValueErrors(value, Continua);
                    }
                }
            } catch (Exception e)
            {
                // Se foi lançada nenhuma exceção é porque ocorreu erro na transação
                CliSiTefMethods.FinalizaFuncaoSiTefInterativo(0, sitefInterativo.CupomFiscal, sitefInterativo.DataFiscal, sitefInterativo.HoraFiscal, null);

                throw e;
            }

            return(new RechargeViewModel()
            {
                CupomFiscal = sitefInterativo.CupomFiscal.ToString(),
                HoraFiscal = sitefInterativo.HoraFiscal.ToString(),
                DataFiscal = sitefInterativo.DataFiscal.ToString(),
                Bandeira = codBandeira
            });
        }
        private void CheckPinPad()
        {
            var keepAlive = CliSiTefMethods.KeepAlivePinPad();

            TefMessages.PinpadErrors(keepAlive);
        }
        private void ComandoTipoCampo(int comando, int tipoCampo, ref StringBuilder buffer, int terminalId)
        {
            Object obj;

            switch (comando)
            {
            case 0:

                if (tipoCampo == 121)
                {
                    obj = new
                    {
                        code    = tipoCampo,
                        message = buffer.ToString()
                    };

                    TerminalMessages.SendMessage(terminalId, obj);
                }
                else if (tipoCampo == 132)
                {
                    codBandeira = VerificaCodBandeira(buffer.ToString());
                }

                insertCard = false;
                break;

            case 3:

                obj = new
                {
                    code    = tipoCampo,
                    message = buffer.ToString() == "70 - Modo Invalido. Retire e Passe o Cartao" ? "Modo de pagamento não suportado, somente crédito. Retire o Cartão" :
                              (buffer.ToString() == "SOLICITE A SENHA" ? "DIGITE A SENHA" : buffer.ToString())
                };

                TerminalMessages.SendMessage(terminalId, obj);

                insertCard = false;
                break;

            case 20:
                if (buffer.ToString() == "13 - Operacao Cancelada?")
                {
                    buffer = new StringBuilder("0");     /* Cancelar pagamento ao clicar em anula na maquina */
                }
                insertCard = false;
                break;

            case 22:

                obj = new
                {
                    code    = tipoCampo,
                    message = (buffer.ToString() == "Cartao nao configurado" ? "Cartão não suportado, somente Visa e Master" : buffer.ToString())
                };

                TerminalMessages.SendMessage(terminalId, obj);

                break;

            case 23:
                if (tipoCampo == -1)
                {
                    if (!insertCard)
                    {
                        startTime  = DateTime.Now;
                        insertCard = true;
                    }
                    else
                    {
                        if (DateTime.Now.Subtract(startTime).TotalMilliseconds > 60000)
                        {
                            TefMessages.TimeoutErrors();
                        }
                    }
                }

                break;

            default:
                insertCard = false;
                break;
            }
        }