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,

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

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.