Ir para conteúdo
  • Cadastre-se

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

Recommended Posts

Postado

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

 

Postado

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

  • 2 semanas depois ...
  • 4 semanas depois ...
  • 2 meses depois ...
Postado (editado)

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
Postado

Osmar obrigado pela resposta.

Fiz algumas modificações na forma de leitura antiga (que está implementada) e já resolvi minha necessidade.

Tudo certo.

Grato.

Postado

Entendi, porém algumas versões do firmware atualizadas não funcionam digitacao que seja fora do padrao CPF, CNPJ e TELEFONE, por isso que softwareexpress indica que seja utilizado dessa nova forma.

  • 4 meses depois ...
  • Membros Pro
Postado

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

  • Curtir 1
  • Consultores
Postado
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 !!

  • Fundadores
Postado

Olá @Datacamp, obrigado pelas suas contribuições

Enviei ao SVN, modificações baseadas no seu código, mas procurei preservar o método Original

Citar

-- ACBrTEFAPI --
[*] Modificada a assintura do método "ObterDadoPinPad" para permitir informar
    o Tamanho Mínimo e Máximo do Campo
    function ObterDadoPinPad(TipoDado: TACBrTEFAPIDadoPinPad;
      TimeOut: SmallInt = 30000; MinLen: SmallInt = 0; MaxLen: SmallInt = 0): String;
[*] Novos enumerados adicionados em TACBrTEFAPIDadoPinPad
[+] Adicionado o método Protected
    procedure CalcularTamanhosCampoDadoPinPad( TipoDado: TACBrTEFAPIDadoPinPad;
      out MinLen: SmallInt; out MaxLen: SmallInt);
   (por: DSA)

-- ACBrTEFAPIPayGoWeb --
[*] Refatoração do método "ObterDadoPinPad" para processar os novos parâmetros

-- ACBrTEFAPICliSiTef --
[*] Nova Implememtação do método "ObterDadoPinPad", baseado nas sugestões da
    nova versão da CliSiTef
    https://www.projetoacbr.com.br/forum/topic/73829-problema-em-obter-dados-pinpad/
    (por: DataCamp)        

Commit [r33792]

Poderia por favor testar a minha implementação ?

(Eu não tenho ambiente de trabalho do SiTEF)

  • Curtir 1
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.

  • Membros Pro
Postado

@Daniel Simoes, fiz o teste aqui de umas 4 opções e funcionou corretamente, obrigado.

Único ponto que eu mudaria era para ter alguma forma mais fácil de identificar aqueles que não são suportados entre os TEFs.

Entendo a questão da padronização e utilização da herança para não repetir código, mas acredito que tenha seus pontos negativos.
Na minha implementação eu tinha colocado específico para a CliSiTEF por conta que ao testar o componente eu tinha que verificar 1 por 1 (olhando somente o código fonte) para ver quais eram suportados pela CliSiTEF, acredito que quem vá homologar com a PayGo vá ter a mesma sensação ao tentar utilizar um método que acaba pegando de um enumerável com muitas opções.

Mas está funcional, novamente obrigado.

  • Fundadores
Postado

@Datacamp, As opções são na verdade, especificadas pela ABECS... No nosso componente ACBrAbecsPinpad, podemos testar todas elas...

Creio que mesmo na PayGo, elas funcionariam, se informássemos o índice equivalente...  (vou testar)

Na documentação do SiTef, notei que apenas a opção "dpNumeroCartao" não está documentada...

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