Ir para conteúdo
  • Cadastre-se

dev botao

Erro "Tempo de espera inválido" ao obter dados pinpad


Ver Solução Respondido por Daniel Simoes,
  • Este tópico foi criado há 126 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Postado

cliente relatou que ao chamar ObterDadoPinPad(), obtinha o retorno TEMPO DE ESPERA INVALIDO

apos alguns testes e contato com suporte sitef, identificamos que o parametro 2970 na chama abaixo tem que ser informado em segundos.
o padrao da funcao esta em 30000 e esta sendo dividido por 100 dando 300 segundos e retornando o erro..
nao consegui identificar alteracoes no arquivo, entao, pode ser que tenham mudado algo internamente na sitef..
com valores mais baixos esta funcionando...

acredito que uma melhoria seria diminuir o padrao 30000 ou aumentar o fator 100 para 1000 por exemplo..

function TACBrTEFAPIClassCliSiTef.ObterDadoPinPad(
  TipoDado: TACBrTEFAPIDadoPinPad; TimeOut: integer; MinLen: SmallInt;
  MaxLen: SmallInt): String;
Var
  DadoPortador: String;
  Ok: Boolean;
begin
  DadoPortador := DadoPinPadToOperacao(TipoDado);
  if (DadoPortador = '') then
  begin
    fpACBrTEFAPI.DoException(Format(ACBrStr(sACBrTEFAPICapturaNaoSuportada),
      [GetEnumName(TypeInfo(TACBrTEFAPIDadoPinPad), integer(TipoDado) ), ClassName] ));
  end;

  if (MinLen = 0) and (MaxLen = 0) then
    CalcularTamanhosCampoDadoPinPad(TipoDado, MinLen, MaxLen);

  fRespostasPorTipo.ValueInfo[2967] := DadoPortador;
  fRespostasPorTipo.ValueInfo[2968] := IntToStr(MinLen);
  fRespostasPorTipo.ValueInfo[2969] := IntToStr(MaxLen);
  fRespostasPorTipo.ValueInfo[2970] := IntToStr(trunc(TimeOut/100));

  Ok := ExecutarTransacaoSiTef(CSITEF_OP_DadosPinPadAberto, 0);
  if Ok then
    Result := fpACBrTEFAPI.UltimaRespostaTEF.LeInformacao(2971,0).AsString;
end;

  • Moderadores
Postado
41 minutos atrás, Felipe Sachetti disse:

cliente relatou que ao chamar ObterDadoPinPad(), obtinha o retorno TEMPO DE ESPERA INVALIDO

apos alguns testes e contato com suporte sitef, identificamos que o parametro 2970 na chama abaixo tem que ser informado em segundos.
o padrao da funcao esta em 30000 e esta sendo dividido por 100 dando 300 segundos e retornando o erro..
nao consegui identificar alteracoes no arquivo, entao, pode ser que tenham mudado algo internamente na sitef..
com valores mais baixos esta funcionando...

acredito que uma melhoria seria diminuir o padrao 30000 ou aumentar o fator 100 para 1000 por exemplo..

function TACBrTEFAPIClassCliSiTef.ObterDadoPinPad(
  TipoDado: TACBrTEFAPIDadoPinPad; TimeOut: integer; MinLen: SmallInt;
  MaxLen: SmallInt): String;
Var
  DadoPortador: String;
  Ok: Boolean;
begin
  DadoPortador := DadoPinPadToOperacao(TipoDado);
  if (DadoPortador = '') then
  begin
    fpACBrTEFAPI.DoException(Format(ACBrStr(sACBrTEFAPICapturaNaoSuportada),
      [GetEnumName(TypeInfo(TACBrTEFAPIDadoPinPad), integer(TipoDado) ), ClassName] ));
  end;

  if (MinLen = 0) and (MaxLen = 0) then
    CalcularTamanhosCampoDadoPinPad(TipoDado, MinLen, MaxLen);

  fRespostasPorTipo.ValueInfo[2967] := DadoPortador;
  fRespostasPorTipo.ValueInfo[2968] := IntToStr(MinLen);
  fRespostasPorTipo.ValueInfo[2969] := IntToStr(MaxLen);
  fRespostasPorTipo.ValueInfo[2970] := IntToStr(trunc(TimeOut/100));

  Ok := ExecutarTransacaoSiTef(CSITEF_OP_DadosPinPadAberto, 0);
  if Ok then
    Result := fpACBrTEFAPI.UltimaRespostaTEF.LeInformacao(2971,0).AsString;
end;

no caso na sua chamada tu deve passar por exemplo valor 300

;-) isso tem relatos no discord e no fórum e com a solução para sitef

  • Curtir 1
Consultor SAC ACBr Juliomar Marchetti
 

Projeto ACBr

skype: juliomar
telegram: juliomar
e-mail: [email protected]
http://www.juliomarmarchetti.com.br
MVP_NewLogo_100x100_Transparent-02.png
 

 

  • Fundadores
Postado

@Felipe Sachetti, veja o que acha dessa sugestão de correção

function TACBrTEFAPIClassCliSiTef.ObterDadoPinPad(
  TipoDado: TACBrTEFAPIDadoPinPad; TimeOut: integer; MinLen: SmallInt;
  MaxLen: SmallInt): String;
Var
  DadoPortador: String;
  Ok: Boolean;
begin
  DadoPortador := DadoPinPadToOperacao(TipoDado);
  if (DadoPortador = '') then
  begin
    fpACBrTEFAPI.DoException(Format(ACBrStr(sACBrTEFAPICapturaNaoSuportada),
      [GetEnumName(TypeInfo(TACBrTEFAPIDadoPinPad), integer(TipoDado) ), ClassName] ));
  end;

  if (MinLen = 0) and (MaxLen = 0) then
    CalcularTamanhosCampoDadoPinPad(TipoDado, MinLen, MaxLen);

  if (TimeOut > 1000) then
    TimeOut := trunc(TimeOut/1000);  // SiTef espera o tempo em Segundos.. convertendo de milisegundos

  fRespostasPorTipo.ValueInfo[2967] := DadoPortador;
  fRespostasPorTipo.ValueInfo[2968] := IntToStr(MinLen);
  fRespostasPorTipo.ValueInfo[2969] := IntToStr(MaxLen);
  fRespostasPorTipo.ValueInfo[2970] := IntToStr(TimeOut);

  Ok := ExecutarTransacaoSiTef(CSITEF_OP_DadosPinPadAberto, 0);
  if Ok then
    Result := fpACBrTEFAPI.UltimaRespostaTEF.LeInformacao(2971,0).AsString;
end;

 

o valor Default, é utilizado em todas as demais classes de TEF, então não podemos mudar ele...

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
42 minutos atrás, Daniel Simoes disse:

@Felipe Sachetti, veja o que acha dessa sugestão de correção

function TACBrTEFAPIClassCliSiTef.ObterDadoPinPad(
  TipoDado: TACBrTEFAPIDadoPinPad; TimeOut: integer; MinLen: SmallInt;
  MaxLen: SmallInt): String;
Var
  DadoPortador: String;
  Ok: Boolean;
begin
  DadoPortador := DadoPinPadToOperacao(TipoDado);
  if (DadoPortador = '') then
  begin
    fpACBrTEFAPI.DoException(Format(ACBrStr(sACBrTEFAPICapturaNaoSuportada),
      [GetEnumName(TypeInfo(TACBrTEFAPIDadoPinPad), integer(TipoDado) ), ClassName] ));
  end;

  if (MinLen = 0) and (MaxLen = 0) then
    CalcularTamanhosCampoDadoPinPad(TipoDado, MinLen, MaxLen);

  if (TimeOut > 1000) then
    TimeOut := trunc(TimeOut/1000);  // SiTef espera o tempo em Segundos.. convertendo de milisegundos

  fRespostasPorTipo.ValueInfo[2967] := DadoPortador;
  fRespostasPorTipo.ValueInfo[2968] := IntToStr(MinLen);
  fRespostasPorTipo.ValueInfo[2969] := IntToStr(MaxLen);
  fRespostasPorTipo.ValueInfo[2970] := IntToStr(TimeOut);

  Ok := ExecutarTransacaoSiTef(CSITEF_OP_DadosPinPadAberto, 0);
  if Ok then
    Result := fpACBrTEFAPI.UltimaRespostaTEF.LeInformacao(2971,0).AsString;
end;

 

o valor Default, é utilizado em todas as demais classes de TEF, então não podemos mudar ele...

Acredito ser uma otima opçao essa ideia, ja trata o padrao  que é 30000.
daria pra testar os entre 100 e 999 dividir por 100 pra garantir que alguma funcao ja nao esteja chamando  com algum ajuste relacionado a divisao por 100 que existia
exemplo, estarem passando 900 pra dividir por 100 e dar 9 segundos
abaixo disso seria em segundos e 100 segundo aceita de boa a funcao

if(TimeOut > 1000)then
    TimeOut := trunc(TimeOut/1000)
  else
      if(TimeOut > 100)then
        TimeOut := trunc(TimeOut/100);

  • Curtir 1
  • Este tópico foi criado há 126 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.

The popup will be closed in 10 segundos...
The popup will be closed in 10 segundos...