Ir para conteúdo
  • Cadastre-se

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

Recommended Posts

Postado

Bom dia.

Tive problema com um autorizador, pois ele exigia a trilha2 completa, com os 37 bytes.

Olhando o fonte do ACBrAbecsPinPad, verifiquei que ele usava o comando CEX para fazer a leitura do cartão, e neste comando, o Pinpad retorna as trilhas incompletas.

Para poder ler a trilha completa, é necessário usar o comando CKE, mas como ele não está implementado nACBrAbecsPinPad.pasa ACBrAbecsPinPad.pas, e fiz isso.

Segue fonte do ACBrAbecsPinPad.pas com a função CKE.

 

Obrigado

Postado
1 hora atrás, Daniel Simoes disse:

@eliandro.may,

Muito bacana, o código está bem compatível com os demais métodos do componente... 

Uma dúvida...

image.png

A linha em destaque, não deveria estar fora do IF ?

Opa, sim, deveria, eu acabei mexendo na última hora e esqueci de colocar ela de volta fora.

Daniel

Pensei em colocar o tratamento no retorno, para facilitar o uso do componente, mas, como este retorno não tem aquela definição de campos, acabei não fazendo.

Mas, seria interessante retornar o tipo da resposta, e os campos já separados, como trilha1, trilha 2, quando magnético, um campo boolean quando a resposta é de remoção de cartão, ou um campo com a tecla quando for tecla.

  • Fundadores
Postado
Em 09/12/2025 at 19:19, eliandro.may disse:

Pensei em colocar o tratamento no retorno, para facilitar o uso do componente, mas, como este retorno não tem aquela definição de campos, acabei não fazendo.

@eliandro.may, não compreendi muito bem esse trecho..

Você não poderia usar o método abaixo ?

ACBrAbecsPinPad1.Response.GetResponseFromTagValue()

Enviei suas implementações ao SVN... Commit [r43558]

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.

  • 4 semanas depois ...
Postado
Em 11/12/2025 at 19:24, Daniel Simoes disse:

@eliandro.may, não compreendi muito bem esse trecho..

Você não poderia usar o método abaixo ?

ACBrAbecsPinPad1.Response.GetResponseFromTagValue()

Enviei suas implementações ao SVN... Commit [r43558]

Bom dia.

Na verdade como não tem Tags para estes valores retornados, eu usei o ACBrAbecsPinPad.Response.GetResponseData() e tratei a string de retorno.

Mais ou menos assim

        repeat
          ACBrAbecsPinPad.DSP('Passe o cartao','');
          ACBrAbecsPinPad.CKE( True,
                               True,
                               False,
                               False,
                               False);
          Resposta:=ACBrAbecsPinPad.Response.GetResponseData();
          ACKE_EVENT:=Copy(Resposta,1,1);
          case StrToIntDef(ACKE_EVENT,-1) of
            0:
              begin
                ACKE_KEYCODE:=Copy(Resposta,2,2);
                if (ACKE_KEYCODE='13') then
                begin
                  Loga(iINFO,'Leitura do cartao cancelada no pinpad.');
                  MensagemPinPad('CANCELADO');
                end;
              end;
            1:
              begin
                ACKE_TRK1LEN:=Copy(Resposta,2,2);
                ACKE_TRK1:=Copy(Resposta,4,StrToIntDef(ACKE_TRK1LEN,0));
                Loga(iINFO,'CKE_TRK1: '+ACKE_TRK1);
                ACKE_TRK2LEN:=Copy(Resposta,StrToIntDef(ACKE_TRK1LEN,0)+4,2);
                ACKE_TRK2:=Copy(Resposta,6+StrToIntDef(ACKE_TRK1LEN,0),StrToIntDef(ACKE_TRK2LEN,0));
                Loga(iINFO,'CKE_TRK2: '+ACKE_TRK2);
                ACKE_TRK3LEN:=Copy(Resposta,StrToIntDef(ACKE_TRK1LEN,0)+StrToIntDef(ACKE_TRK2LEN,0)+6,2);
                ACKE_TRK3:=Copy(Resposta,8+StrToIntDef(ACKE_TRK1LEN,0)+StrToIntDef(ACKE_TRK2LEN,0),StrToIntDef(ACKE_TRK3LEN,0));
                Loga(iINFO,'CKE_TRK3: '+ACKE_TRK3);
                expirationDate:=FormatDateTime('yymmdd',UltimoDiaDoMes(Encodedate(StrToInt(Copy(Cartao.Trilha2,Pos('=',Cartao.Trilha2)+1,2)),StrToInt(Copy(Cartao.Trilha2,Pos('=',Cartao.Trilha2)+3,2)),1)));
                Loga(iINFO,'expirationDate='+expirationDate);
                Result:=True;
              end;
            2:
              begin
                ACKE_ICCSTAT:=Copy(Resposta,1);
                Loga(iINFO,'CKE_ICCSTAT: '+ACKE_ICCSTAT);
              end;
            3:
              begin
                AKE_CTLSSTAT:=Copy(Resposta,1);
                Loga(iINFO,'CKE_CTLSSTAT: '+AKE_CTLSSTAT);
              end;
          end;
        until ( (ACKE_KEYCODE='13') and (ACKE_EVENT='0')) or (ACKE_EVENT = '1');
 

  • 4 semanas depois ...
  • Fundadores
Postado

Boa.. isso mesmo.. 

Observe que no Demo do ACBr, tem um trecho de código, semelhante...

Porém usando:

ACBrAbecsPinPad1.Response.GetResponseFromTagValue(ATag: Word)

 

  procedure AddResponseToLog(t: Word);
  var
    v: AnsiString;
  begin
    v := ACBrAbecsPinPad1.Response.GetResponseFromTagValue(t);
    if (Trim(v) = '') then
      Exit;

    mCEXResponse.Lines.Add(PP_ToStr(t)+' => '+v);
  end;   

  mCEXResponse.Lines.Add('');
  AddResponseToLog(PP_EVENT);
  AddResponseToLog(PP_VALUE);
  AddResponseToLog(PP_DATAOUT);
  AddResponseToLog(PP_CARDTYPE);
  AddResponseToLog(PP_PAN);
  AddResponseToLog(PP_PANSEQNO);
  AddResponseToLog(PP_CHNAME);
  AddResponseToLog(PP_LABEL);
  AddResponseToLog(PP_ISSCNTRY);
  AddResponseToLog(PP_CARDEXP);
  AddResponseToLog(PP_DEVTYPE);
  AddResponseToLog(PP_TRK1INC);
  AddResponseToLog(PP_TRK2INC);
  AddResponseToLog(PP_TRK3INC);    

 

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á 132 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...