Ir para conteúdo
  • Cadastre-se

tiagok

Membros
  • Total de ítens

    13
  • Registro em

  • Última visita

Posts postados por tiagok

  1. Em 15/07/2020 at 13:35, tiagok disse:

    Olá @Daniel Simoes

    Gostaria de enviar mais uma contribuição, implementei para obter os campos de identificação da carteira digital, que são muito importantes para fazer a identificação da carteira que foi utilizada para o pagamento.

    ACBrTEFComum.pas

    
    fpIdCarteiraDigital : String; // Código de identificação da carteira digital
    fpNomeCarteiraDigital : String; // Nome da carteira digital
    
    property IdCarteiraDigital: String read fpIdCarteiraDigital;
    property NomeCarteiraDigital: String read fpNomeCarteiraDigital;

    ACBrTEFCliSiTefComum.pas

    
    106: fpIdCarteiraDigital := LinStr;
    107: fpNomeCarteiraDigital := LinStr;

    Fontes anexos.

    Desta forma a aplicação pode obter a identificação da carteira, no meu caso obtenho conforme exemplo abaixo:

    FACBrTEFD.RespostasPendentes[Contador].IdCarteiraDigital

    FACBrTEFD.RespostasPendentes[Contador].NomeCarteiraDigital

    Já testei o processo todo e funciona perfeitamente, com essas alterações é possível operacionalizar toda a parte do módulo CardSE (carteiras digitais).

     

     

    ACBrTEFCliSiTefComum.pas 29 kB · 0 downloads ACBrTEFComum.pas 31 kB · 0 downloads

    @Juliomar Marchetti Olá, você poderia adicionar estes dois campos 106 e 107, no SVN ? Acima enviei o Documento da Software Express com a presença destes campos. Já está testado.

    • Curtir 1
  2. @Daniel Simoes

    Os campos 106 e 107 estão no manual específico que trata o módulo CardSe (carteira Digital).

    Anexo manual, página 19.

    Obs: aproveitando, pegamos um problema, ao cancelar um pagamento via carteira digital, a transação de cancelamento está ficando pendente, estamos fazendo algumas modificações pra ver se resolve, caso resolva lhe envio em seguida.

    CliSiTef - Interface com a aplicação - Carteiras Digitais - 1.25.pdf

  3. Olá @Daniel Simoes

    Gostaria de enviar mais uma contribuição, implementei para obter os campos de identificação da carteira digital, que são muito importantes para fazer a identificação da carteira que foi utilizada para o pagamento.

    ACBrTEFComum.pas

    fpIdCarteiraDigital : String; // Código de identificação da carteira digital
    fpNomeCarteiraDigital : String; // Nome da carteira digital
    property IdCarteiraDigital: String read fpIdCarteiraDigital;
    property NomeCarteiraDigital: String read fpNomeCarteiraDigital;

    ACBrTEFCliSiTefComum.pas

    106: fpIdCarteiraDigital := LinStr;
    107: fpNomeCarteiraDigital := LinStr;

    Fontes anexos.

    Desta forma a aplicação pode obter a identificação da carteira, no meu caso obtenho conforme exemplo abaixo:

    FACBrTEFD.RespostasPendentes[Contador].IdCarteiraDigital

    FACBrTEFD.RespostasPendentes[Contador].NomeCarteiraDigital

    Já testei o processo todo e funciona perfeitamente, com essas alterações é possível operacionalizar toda a parte do módulo CardSE (carteiras digitais).

     

     

    ACBrTEFCliSiTefComum.pas ACBrTEFComum.pas

  4. Olá, Bom dia,

    Eu fiz uma implementação no CliSiTef para justamente poder operar o QRCode, com o parâmetro {DevolveStringQRCode=1}

    Segue a contribuição anexa.

                    50 :
                       begin
                         MensagemOperador := 'QRCODE=' + ProcessaMensagemTela( Mensagem );
                         DoExibeMsg( opmExibirMsgOperador, MensagemOperador, (TipoCampo=584) ) ;
                       end;
                     51 :
                       begin
                         DoExibeMsg( opmRemoverMsgOperador, '' ) ;
                       end;

    Desta forma, o ACBr transfere para a aplicação os dados para poder gerar e exibir em tela o QRCode e depois solicita a remoção quando não for mais necessário.

    Observar que coloquei um prefixo "QRCODE=" que deve ser removido pela aplicação, o conteúdo do QRCode vem após o sinal de igual.

    Anexo fonte alterado.

    @Daniel Simoes

    ACBrTEFDCliSiTef.pas

    • Curtir 1
  5. 12 horas atrás, Juliomar Marchetti disse:

    Estranho fiz exatamente isso e ele gerou problema já no começo, pois o mesmo não está nem criando o componente e conforme citado não atribuiu os eventos pois depois que fiz a criação começou os problemas, pois nenhum evento necessário estava programado.

    Aparentemente, o problema ocorre no meu caso, porque a minha implementação das chamadas ACBR, ficam dentro de uma DLL que é carregada e utilizada pelo sistema... Talvez por ser dentro da DLL tenha alguma limitação na questão do Timer ali que não se destroi... Fiz uma aplicação de teste, com a implementação diretamente em um formulário simples, e não ocorreu o problema..  acho que só consegue simular se for por uma DLL mesmo...

    Podem fechar este tópico, eu acabei resolvendo pra mim de outra forma.. mas se quiserem testar, eu joguei abaixo alguns trechos para montagem de um exemplo:

    Exemplo:

    >>>> Criar uma DLL e exportar o método com uma implementação como esta:

    uses
      ACBrTEFD,
      ACBrTEFDClass,
      ACBrTEFDCliSiTef;

    private
        FACBrTEFD: TACBrTEFD;
        FEstadoECF: String;

      FACBrTEFD := TACBrTEFD.Create(nil);
      FACBrTEFD.TEFCliSiTef.EnderecoIP := 'localhost';
      FACBrTEFD.TEFCliSiTef.CodigoLoja := '00000000';
      FACBrTEFD.TEFCliSiTef.NumeroTerminal := 'SE000001';
      FACBrTEFD.TEFCliSiTef.PortaPinPad := 3;
      FACBrTEFD.TEFCliSiTef.NumVias := 2;
      FACBrTEFD.SuportaSaque := False;
      FACBrTEFD.SuportaDesconto := False;
      FACBrTEFD.OnExibeMsg := Sitef_ExibirMensagem;
      FACBrTEFD.OnAguardaResp := AguardaResposta;
      FACBrTEFD.OnInfoECF := InfoECF;
      FACBrTEFD.OnComandaECF := ComandaECF;
      FACBrTEFD.OnComandaECFAbreVinculado := ComandaECFAbreVinculado;
      FACBrTEFD.OnComandaECFImprimeVia := ComandaECFImprimeVia;
      FACBrTEFD.OnBloqueiaMouseTeclado := BloqueiaMouseTeclado;
      FACBrTEFD.TEFCliSiTef.OnExibeMenu := Sitef_ExibirMenu;
      FACBrTEFD.TEFCliSiTef.OnObtemCampo := Sitef_ObterCampo;
      FEstadoECF := 'V';
      FACBrTEFD.Inicializar(gpCliSiTef);
      FACBrTEFD.DesInicializar(gpCliSiTef);

      // Aqui vai ocorrer o problema (aparentemente apenas se isso tudo estiver dentro de uma DLL)
      FACBrTEFD.Free;

    ------------

    Métodos para testar assinatura:

    procedure Sitef_ExibirMensagem(Operacao: TACBrTEFDOperacaoMensagem; aMensagem: string; var AModalResult: TModalResult);
    begin
      // teste
    end;

    procedure Sitef_ExibirMenu(aTitulo: string; aOpcoes: TStringList; var aItemSelecionado: Integer; var aVoltarMenu: Boolean);
    begin
      // teste
    end;

    procedure Sitef_ObterCampo(aTitulo: string; aTamanhoMinimo, aTamanhoMaximo, aTipoCampo: Integer; aOperacao: TACBrTEFDCliSiTefOperacaoCampo; var aResposta: AnsiString; var aDigitado, aVoltarMenu: Boolean);
    begin
      // teste
    end;

    procedure ComandaECF(Operacao: TACBrTEFDOperacaoECF; Resp: TACBrTEFDResp; var RetornoECF: Integer);
    begin
      // teste
    end;

    procedure AguardaResposta(Arquivo: string; SegundosTimeOut: Integer; var Interromper: Boolean);
    begin
      // teste
    end;

    procedure ComandaECFAbreVinculado(COO, IndiceECF: string; Valor: Double; var RetornoECF: Integer);
    begin
      // teste
    end;

    procedure ComandaECFImprimeVia(TipoRelatorio: TACBrTEFDTipoRelatorio; Via: Integer; ImagemComprovante: TStringList; var RetornoECF: Integer);
    begin
      // teste
    end;

    procedure InfoECF(Operacao: TACBrTEFDInfoECF; var RetornoECF: string);
    begin
        // Simula o tempo de resposta da impressora
      Sleep(100);

      case Operacao of
        ineEstadoECF:
          begin
            RetornoECF := FEstadoECF;
          end;
        ineSubTotal:
          begin
            RetornoECF := '999999';
          end;
        ineTotalAPagar:
          begin
            RetornoECF := '0';
          end;
      end;
    end;

    procedure BloqueiaMouseTeclado(Bloqueia: Boolean; var Tratado: Boolean);
    begin
      // teste
    end;

    • Curtir 1
  6. 9 minutos atrás, Daniel Simoes disse:

    Isso me leva a crer, que você tem mudança nos fontes do ACBr, do seu lado.. ou ainda copiou alguma das Units do ACBr, para as pastas do seu projeto...

    Só consigo investigar um possível problema, se eu consigo reproduzi-lo...

    Outro fato que você pode observar... é que essas modificações já estão há algum tempo no SVN.. e não há relatos de problemas semelhantes ao seu, aqui no fórum...

    Olá Daniel,

    Não tenho modificações nos fontes ACBr, apenas baixei o trunk2, última versão e executei o ACBrInstall_Trunk2.exe para compilar e instalar, nada além disso.

    Como falei, o meu software ele instancia a classe:

    var

     FACBrTEFD: TACBrTEFD;

    begin

    FACBrTEFD.Inicializar(gpCliSiTef);

    FACBrTEFD.Free;

    end;

    se você fizer isso já vai conseguir simular...

    Se quiser pode fechar o tópico, como eu não uso o PayGoWeb, eu comentei o carregamento dele e pronto, pra mim resolveu.. só quis comentar a solução, pois acredito que possa contribuir com outras pessoas que venham a ter o mesmo problema.

    Abraço e obrigado pela atenção

     

     

  7. @Daniel Simoes

    O problema está aqui:

    Método >>> destructor TACBrTEFD.Destroy;
    >>> fTEFList.Free;  // Destroi Lista de Classes TEF e Objetos internos

    Ele sai destruindo todos os objetos da lista, e quando chega no fTimerOcioso.Free, do pacote  (ACBrTEFPayGoWebComum.pas) trava.

    destructor TACBrTEFPGWebAPI.Destroy;
    >>> fTimerOcioso.Free;

    Comentei a linha acima e recompilei o ACBR e resolveu.

  8. @Daniel Simoes O problema ocorreu no commit da revision 20137 (no revision 20136 funciona corretamente o .Free, e quando atualizo para a versão 20137 ocorre problema).

    Revision: 20137
    Author: dopi
    Date: sábado, 20 de junho de 2020 10:53:48
    Message:
    -- ACBrTEFD, ACBrTEFDClass --
    [+] Adicionado novo modelo de TEF Dedicado, para suportar "TEF PayGo Web Libc"
        Modelo: gpPayGoWeb,  Classe: TEFPayGoWeb: TACBrTEFDPayGoWeb;

    -- ACBrTEFDClass --
    [-] Correção para preencher a Segunda Via, quando apenas a Via Completa é informada

    -- TACBrTEFDPayGoWeb --
    [+] Nova classe, para suportar TEF Dedicado, "TEF PayGo Web Libc"
        - Necessita da Biblioteca 'PGWebLib.dll' (Windows) ou 'PGWebLib.so' (Linux)
        - Download da Biblioteca e Manuais em: https://www.paygo.com.br/links-e-manuais/
    [*] Projeto "TEFDDemoNF", modificado para suportar e demonstrar o novo Modelo de TEF

    -- ACBrTEFPayGo --
    [+] Mapeamento do campo "729" para "Resp.Confirmar"
    [-] Correção para que Resp.NFCeSAT.UltimosQuatroDigitos contenha apenas os 4 últimos digitos do BIN

    -- ACBrTEFComum --
    [+] Classe "TACBrTEFResp". Adição de comentários nos fontes, para melhor descrição
        de algumas propriedades
    [+] Classe "TACBrTEFResp". Adição das propriedades:
        Confirmar: Boolean -> Se True, a Resposta requer uma Confirmação (CNF)
        QRCode: String -> Com Conteúdo do QRCode a ser exibido, quando usando carteiras Digitais
        (por: DSA)    
    ----
    Modified : /trunk2/Fontes/ACBrTEFD/ACBrTEFDClass.pas
    Modified : /trunk2/Fontes/ACBrTEFD/ACBrTEFDPayGo.pas
    Modified : /trunk2/Fontes/ACBrTEFD/ACBrTEFComum.pas
    Modified : /trunk2/Fontes/ACBrTEFD/ACBrTEFD.pas

     

  9. Oi Daniel, Eu fiz isso, já tinha baixado em uma nova pasta..

    Retornei da Revision 20214 para a revision 20052 e o problema parou.

    Então limpei tudo e atualizei para revision 20137 e o problema no .Free já ocorre.

    Então limpei tudo e atualizei para revision 20052 novamente e não ocorre o problema no .Free

    Com certeza algum commit entre a revision 20052 e 20137 está ocasionando o problema.

    Sobre o método de inicialização, na review 20052 continua mais lento do que a versão de 2018.. parece que foi adicionado algo que pesou.. mas não chega a ser um grande problema, o problema maior mesmo é no .Free que trava e demora minutos.

    FACBrTEFD.Inicializar(gpCliSiTef); >>>>>>> Este método Demorava cerca de 5,8 a 6 segundos, passou a levar 11,8 a 12 segundos para executar.

     

    ACBR_Sitef.png

  10. Olá Pessoal,

    Estava com meus fontes do ACBr sem atualizar desde 2018, então resolvi atualizar para pegar as últimas atualizações.

    Exclui todo o trunk e baixei novamente (Agora estou na Revision 20214), fiz a compilação e reinstalação de todos os componentes ACBR (Uso Delphi XE 10)

    Crio via Fonte, o componente "TACBrTEFD" conforme exemplo abaixo

    FACBrTEFD: TACBrTEFD;

    Fui executar meu roteiro de testes com esta build citada e a aplicação está demorando mais em alguns pontos e outros chega a trava, conforme abaixo:

    FACBrTEFD.Inicializar(gpCliSiTef); >>>>>>> Este método Demorava cerca de 5,8 a 6 segundos, passou a levar 11,8 a 12 segundos para executar.

    FACBrTEFD.Free; >>>>>>> Este método, levava alguns milisegundos, agora está demorando mais de 5 minutos ou até travando as vezes.

    Alguém já tinha percebido esse problema? Conhece alguma solução?

    Achei inviável utilizar tendo esses problemas, a princípio acho que vou retornar para a versão que estava anteriormente.

×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.