Ir para conteúdo
  • Cadastre-se

  • Este tópico foi criado há 150 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Postado

Inicialmente tentei implementar uma Thread na inicialização do TEF para que o sistema não "congele", não porque demora tanto (cerca de 4 segundos), mas pensando em outras circunstâncias onde ocorram falhas durante a inicialização, uma falha no hardware da máquina TEF ou ela simplesmente não estar conectada, por exemplo. No entanto, o Pedro Frayman já me adiantou dizendo que isso não é possível com o ACBrTEFAPI. Então me foi sugerido fazer um timeout de 15-20 segundos e se o TEF não foi inicializado, matar o processo do sistema e executá-lo novamente. Porque caso contrário, o usuário ficaria esperando vários minutos com o sistema "congelado".

A melhor solução pra mim seria inicializar o TEF em uma Thread, mas já que isso não é possível, como implementar o timeout, já que Thread e até um TTimer não funcionam nesse caso?
Ou alguém tem uma solução diferente?

  • Fundadores
Postado

Olá @Joaquim Siqueira,

Obrigado por "repostar" o tópico aqui...

Poderia por favor compartilhar o código fonte, que você tentou ?

A princípio não vejo problemas de inicializar o TEF, em uma Thread (mas nunca tentei isso)

Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Postado

Da seguinte forma funciona da maneira que eu gostaria, porém, ao iniciar um pagamento a aplicação trava completamente. E se eu executar a inicialização dentro de Synchronize dá na mesma que o uso sem a Thread.

  TTask.Run(procedure begin
    try
      ACBrTEFAPI1.Inicializar;
      TThread.Synchronize(nil, procedure begin
        if ACBrTEFAPI1.Inicializado then
          btEfetuarPagamentos.Enabled := true
      end);
    except

    end;
  end);

 

Postado

Outro detalhe é que se eu utilizar TThread.CreateAnonymousThread(), ao invés de TTask.Run() a inicialização e os pagamentos funcionam. O problema que às vezes a aplicação fecha sozinha na inicialização do TEF, e sempre dá a Exception "System Error. Code: 1400. O identificador da janela é inválido." quando fecho a aplicação.

  • Fundadores
Postado
49 minutos atrás, Joaquim Siqueira disse:

Da seguinte forma funciona da maneira que eu gostaria, porém, ao iniciar um pagamento a aplicação trava completamente. E se eu executar a inicialização dentro de Synchronize dá na mesma que o uso sem a Thread.

  TTask.Run(procedure begin
    try
      ACBrTEFAPI1.Inicializar;
      TThread.Synchronize(nil, procedure begin
        if ACBrTEFAPI1.Inicializado then
          btEfetuarPagamentos.Enabled := true
      end);
    except

    end;
  end);

 

Você está usando o TEF PayGo, com a proteção (Warsaw) ?

Se SIM, ele irá ativar a proteção, na Thread, e após isso nenhuma outra "Thread" conseguiria usar a biblioteca (é a proteção em ação)

Experimente por favor usar a versão sem a Proteção do Warsaw

https://paygodev.readme.io/docs/kit-de-integração-sem-proteção-warsaw

 

Nesse vídeo, falo mais sobre esse assunto do Warsaw

 

Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

  • Fundadores
Postado

Por favor confirme, qual a DLL você está usando e onde ela foi copiada na sua máquina

image.png     image.png

 

Proceda como no vídeo, removendo do Windows, o Client PayGo, para que o Warsaw seja removido

Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Postado

A versão que eu estava utilizando é a 4.1.15.2. A DLL está no diretório do executável da minha própria aplicação.
Desinstalei o Client PayGo e utilizei essa versão atualizada sem proteção no diretório do exe, mas nada mudou.
Na verdade eu nunca cheguei a utilizar o Client PayGo, ele nem chegava a autenticar e a DLL que veio nele não funcionou aqui, acho que só funciona em produção, né? Daí olhando aqui no fórum baixei aquela versão antiga e funcionou. Até então não me importei com essas questões de versão e do Client, porque por enquanto só estou testando em homologação.

Obs.: versão x64.

Postado

Desculpe a confusão, Daniel. 😅
Eu tentei dizer que anteriormente utilizei a versão 4.1.15.2, mas depois que você me falou, estou utilizando a versão mais recente (4.1.47.901), sem proteção, e que nada mudou.
E sim, a DLL está na mesma pasta do exe da minha aplicação.

  • Fundadores
Postado

ok, compreendido...

Poderia por favor criar um Mini projeto em Delphi, com a inicialização em Thread ?

Assim, tento reproduzir o problema aqui...

ahh... se achar mais simples, pode modificar o Demo do ACBr... 

Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

  • Este tópico foi criado há 150 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
×
×
  • 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.