Jump to content

dev botao

Problemas no TEF PayGoWeb, com Aplicativo rodando em várias instâncias simultaneamente


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

Recommended Posts

  • Fundadores

O TEF por API/DLL, PayGoWeb, é muito rápido e simples de instalar... Mas você deve tomar alguns cuidados para que ele funcione corretamente nos seus clientes Finais

Se você está recebendo alguma das msgs de erro abaixo:

  • SEQUENCIA INVALIDA DO NUMERO DE SOLICITACAO
  • ERRO DE AUTENTICACAO DO PONTO DE CAPTURA

A causa desse problema, pode ser o Fato de sua aplicação, que carrega a DLL da PayGoWeb, estar sendo executada em várias instâncias, ao mesmo tempo, na mesma máquina...
Ou seja, o Operador executou a aplicação duas ou mais vezes, e está operando o TEF em várias janelas da sua mesma aplicação...  Isso gera uma série de problemas, e deve ser evitado...

  • O PinPad não poderá ser acessado em modo compartilhado, por várias instâncias da DLL da PayGoWeb, ao mesmo tempo, e você pode receber erros de acesso ao PinPad
  • As tabelas internas da PayGoWeb, que ela cria em sua Pasta de Trabalho podem perder o sincronismo, pois agora temos várias instâncias da DLL da PayGoWeb gravando nas mesmas tabelas...

Portanto, devemos evitar que a aplicação de Frente de Caixa, possa ser aberta várias vezes, na mesma máquina...

Uma das técnica para fazer isso, é usar a API do Windows, com o método CreateMutex

Veja um exemplo, abaixo, usando Delphi.

program SeuPrograma;

uses
  Interfaces, sysutils, IniFiles, Windows, Dialogs, Forms, .... ;

{$R *.res}

var
  Ini : TIniFile;
  UmaInstancia : Boolean;
begin
  Ini := TIniFile.Create(  ExtractFilePath(Application.ExeName)+ 'Config.ini' ) ;
  try
     UmaInstancia := Ini.ReadBool('Config', 'Uma_Instancia', false);
  finally
     Ini.Free;
  end;
  Application.Initialize;

  if UmaInstancia then
  begin
    CreateMutex(nil, True, 'NomeDoSeuPrograma');      // <--------------- AQUI -------------
    if GetLastError = ERROR_ALREADY_EXISTS then
    begin
      MessageDlg('NomeDoSeuPrograma','O programa já está em execução', mtError, [mbOK], 0);
      Application.Terminate;
      exit ;
    end;
  end;
  
  Application.CreateForm(TFrmMain, FrmMain) ;
  Application.Run;
end. 

 

Ou Seja, o Primeiro Mutex será criado com sucesso... Mas quando a segunda aplicação for executada, haverá um erro na criação do Mutex, e isso forçará a entrada no IF que aborta a execução do programa, fechando a segunda instância...

  • Like 6
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.

Link to comment
Share on other sites

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.

The popup will be closed in 10 seconds...