Ir para conteúdo
  • Cadastre-se

dev botao

Problema em obter dados PINPAD


Recommended Posts

Boa tarde, utilizo a funcao obtem dados pinpad para o cliente digitar o codigo de operador com 4 digitos:

EntradaCOD :=  '010404DIGITE O CODIGO                 CONFIRME CODIGO | xxxx            ';
Retorno := xObtemDadoPinPadDiretoEx(PAnsiChar(ChaveAcesso), PAnsiChar(Identificador),
              PAnsiChar(EntradaCOD), Saida);

Porem em alguns pinpad com firmeware mais recentes não está aceitando!

Conversando com a softwareexpress tem uma maneira mais recente de obter esses dados.

"Osmar, boa tarde. Conforme conversamos em linha, informo que o erro apresentado se deve a versão da Firmware do Pinpad, pois nas novas versões é necessário seguir outro padrão no envio das funções. Modelo do Pinpad onde não apresentou o erro: [GERTEC|PPC-930;192MB C|1200.11808.VR0012 @|2.12002.14 200921|7200101907305095] Modelo do Pinpad onde apresentou erro: [GERTEC|PPC-930;192MB C|1400.12503.VR1115 @|2.12002.14 200921|7200102207027526] Conforme conversamos em linha, oriento o desenvolvimento da função dentro das novas normas para que o erro não seja apresentado. Atenciosamente, Sandra Silva"

Nova maneira é usar:

 

Função  Descrição
789 Obtenção de dado aberto no pinpad. Disponível a partir da clisitef 7.0.115.34.rc15.

Essa funcionalidade é iniciada através da função IniciaFuncaoSiTefInterativo() com o parâmetro Funcao (primeiro parâmetro de entrada da rotina) assumindo o valor 789 e os demais parâmetros com seus valores usuais.

No processo de Continuação (ContinuaFuncaoSiTefInterativo()), serão solicitados (via comando 29) e entregues os campos descritos a seguir (“Descrição dos parâmetros”).

Diferentemente da forma antiga (descrita em capítulo posterior), esta funcionalidade não possui rotinas de uso direto.

alguém já teve viu algo assim?

https://dev.softwareexpress.com.br/docs/clisitef-leitura-de-campo-aberto-no-pinpad/api_prototipo_das_funcoes

 

Link para o comentário
Compartilhar em outros sites

Analisando os fontes do acbrtefapi constatei que ObtemDadoPinPadDireto sempre remete a mesma função da clisitef.dll

xObtemDadoPinPadDiretoEx(PAnsiChar(ChaveAcesso), PAnsiChar(Identificador), PAnsiChar(EntradaCPF), Saida)
 

tentei iniciar uma requisicao da seguinte maneira:
-- 29/08 16:46:19:902 - *** IniciaFuncaoSiTefInterativo. Modalidade: 789 Valor: 0,00 Documento: 164619 Data: 20230829 Hora: 164619 Operador:  Restricoes: 
-- 29/08 16:46:19:902 - BloquearMouseTeclado: SIM
-- 29/08 16:46:19:902 - ContinuaFuncaoSiTefInterativo, Chamando: Continua = 0 Buffer = 
-- 29/08 16:46:20:145 - ContinuaFuncaoSiTefInterativo, Retornos: STS = 10000 ProximoComando = 29 TipoCampo = 2967 Buffer =  Tam.Min = 1 Tam.Max = 4
-- 29/08 16:46:20:145 - ContinuaFuncaoSiTefInterativo, Chamando: Continua = 0 Buffer = 
-- 29/08 16:46:20:161 - ContinuaFuncaoSiTefInterativo, Retornos: STS = 10000 ProximoComando = 22 TipoCampo = -1 Buffer = Campo com formato invalido Tam.Min = 1 Tam.Max = 2
-- 29/08 16:46:20:161 - CliSiTef DoExibeMsg: Oper: opmOK Mensagem: Campo com formato invalido

Como posso tratar para inserir esses parametros na Requisicao? 

image.png.25b3931fc2a42955503e576b7c7d63ad.png

Link para o comentário
Compartilhar em outros sites

  • 2 semanas depois ...
  • 4 semanas depois ...
  • 2 meses depois ...

Bom dia RRIquema, então eu ja entendi como funciona porem não sei qual é a melhor abordagem para implimentar no ACBRTEFD.

Mas funciona assim:

fRetornoPINPADNovo : String; 

Criei uma variavel global para salvar o retorno do pinpad.


Abra uma transação com a operacao: 789

 if ExecutarTransacaoSiTef(789, 0) then
      ContinuarRequisicaoSiTef;

no ContinuarRequisicaoSiTef verifique os retornos

 proximocomando for 0 e tipocampo=2971: 

  • fRetornoPINPADNovo := BinaryStringToString(Buffer);

proximocomando=29

  •  tipocampo =  2967:
  •                         Resposta := '1E'; // Código hexadecimal do dado do portador: Veja Tabela
  •   tipocampo =  2968:
  •                          Resposta := '4'; // Tamanho Minimo do Campo 
  •   tipocampo =  2969:
  •                          Resposta := '4'; // Tamanho Maximo do campo
  •   tipocampo =  2970:
  •                           Resposta := '0'; // Tempo de Espera
     

com isso consegui retornar os dados do pinpad.

Fiz isso no ACBrTEFAPI.

Da pra fazer igual no ACBrTEFD.

Então se alguem se habilitar para poder adicionar nos fontes do TEF eu posso ajudar.

chamar no Whatsapp 45-99971-5601

Editado por Osmar de Luca
Link para o comentário
Compartilhar em outros sites

  • 4 meses depois ...
  • Membros Pro

Bom dia, implementei esse método mas não tenho certeza quanto a padronização e operações relativas à finalização do processo TEF, fiz apenas com base nos meus estudos da DLL e ao que entendi do padrão usado no ACBr para o TEF.
Como eu percebi que algumas coisas estavam bem amarradas ao PayGo na questão de herança, então possivelmente não utilizei da maneira 100% correta, porém está funcional.
Se alguém mais experiente na ACBrTEFAPI conseguir revisar e melhorar o código para poder subir oficialmente seria muito bom.


Minha chamada está dessa forma:

  AcbrTEF.LimparRespostasTEF();
	//tamMin e tamMax estão como variáveis
  TACBrTEFAPIClassCliSiTef(AcbrTEF.TEF).ObterDadoPinPadAberto(dapDDD,tamMin,tamMax,0);
  showmessage(AcbrTEF.RespostasTEF.Items[0].DadoPinPad);

  AcbrTEF.FinalizarTransacao(tefstsSucessoAutomatico);


Link da documentação dessa parte da CliSITEF: https://dev.softwareexpress.com.br/docs/clisitef-leitura-de-campo-aberto-no-pinpad/leitura_campos_abertos_pinpad_forma_nova


ACBrTEFComum.pasACBrTEFCliSiTefComum.pasACBrTEFAPICliSiTef.pas

Link para o comentário
Compartilhar em outros sites

  • Consultores
20 horas atrás, Datacamp disse:

Bom dia, implementei esse método mas não tenho certeza quanto a padronização e operações relativas à finalização do processo TEF, fiz apenas com base nos meus estudos da DLL e ao que entendi do padrão usado no ACBr para o TEF.
Como eu percebi que algumas coisas estavam bem amarradas ao PayGo na questão de herança, então possivelmente não utilizei da maneira 100% correta, porém está funcional.
Se alguém mais experiente na ACBrTEFAPI conseguir revisar e melhorar o código para poder subir oficialmente seria muito bom.


Minha chamada está dessa forma:

  AcbrTEF.LimparRespostasTEF();
	//tamMin e tamMax estão como variáveis
  TACBrTEFAPIClassCliSiTef(AcbrTEF.TEF).ObterDadoPinPadAberto(dapDDD,tamMin,tamMax,0);
  showmessage(AcbrTEF.RespostasTEF.Items[0].DadoPinPad);

  AcbrTEF.FinalizarTransacao(tefstsSucessoAutomatico);


Link da documentação dessa parte da CliSITEF: https://dev.softwareexpress.com.br/docs/clisitef-leitura-de-campo-aberto-no-pinpad/leitura_campos_abertos_pinpad_forma_nova


ACBrTEFComum.pasACBrTEFCliSiTefComum.pasACBrTEFAPICliSiTef.pas

Bom dia!

Obrigado pela contribuição, foi criada em nosso backlog a #TK-5493 para análise da mesma e parecer por parte da equipe de consultores.

Vale citar a existência do nosso novo componente ACBrAbecsPinPad, que pode ser usado para finalidade semelhante.

Veja mais sobre o mesmo em:

 

  • Curtir 1
Consultor SAC ACBr

Diego Folieni
Ajude o Projeto ACBr crescer - Assine o SAC

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

Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil


Participe de nosso canal no Discord e fique ainda mais próximo da Comunidade !!

Link para o comentário
Compartilhar em outros sites

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.