Osmar de Luca Postado 28 Agosto, 2023 Compartilhar Postado 28 Agosto, 2023 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 More sharing options...
Moderadores Juliomar Marchetti Postado 28 Agosto, 2023 Moderadores Compartilhar Postado 28 Agosto, 2023 sim e tem no componente ACBrTEFD e ACBrTEFAPI implementado Juliomar Marchetti skype: juliomar telegram: juliomar e-mail: [email protected] http://www.juliomarmarchetti.com.br Link para o comentário Compartilhar em outros sites More sharing options...
Osmar de Luca Postado 29 Agosto, 2023 Autor Compartilhar Postado 29 Agosto, 2023 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? Link para o comentário Compartilhar em outros sites More sharing options...
Moderadores Juliomar Marchetti Postado 29 Agosto, 2023 Moderadores Compartilhar Postado 29 Agosto, 2023 terá que alterar o componente bassta olhar os fontes e modificar depois anexa aqui que validamos Juliomar Marchetti skype: juliomar telegram: juliomar e-mail: [email protected] http://www.juliomarmarchetti.com.br Link para o comentário Compartilhar em outros sites More sharing options...
Osmar de Luca Postado 11 Setembro, 2023 Autor Compartilhar Postado 11 Setembro, 2023 Tentei implementar mas ainda nao consegui pegar o fio da meada. Link para o comentário Compartilhar em outros sites More sharing options...
Moderadores Juliomar Marchetti Postado 12 Setembro, 2023 Moderadores Compartilhar Postado 12 Setembro, 2023 20 horas atrás, Osmar de Luca disse: Tentei implementar mas ainda nao consegui pegar o fio da meada. vai firme que logo resolve. Juliomar Marchetti skype: juliomar telegram: juliomar e-mail: [email protected] http://www.juliomarmarchetti.com.br Link para o comentário Compartilhar em outros sites More sharing options...
Membros Pro Helius_ERP Postado 9 Outubro, 2023 Membros Pro Compartilhar Postado 9 Outubro, 2023 Boa tarde, isso teve alguma evolução? Link para o comentário Compartilhar em outros sites More sharing options...
Osmar de Luca Postado 16 Outubro, 2023 Autor Compartilhar Postado 16 Outubro, 2023 bom dia, não consegui descobrir como passar os parametros depois da primeira resposta. Link para o comentário Compartilhar em outros sites More sharing options...
RRiquena Postado 28 Dezembro, 2023 Compartilhar Postado 28 Dezembro, 2023 (editado) Boa Tarde. Sobre esse assunto. https://dev.softwareexpress.com.br/docs/clisitef-leitura-de-campo-aberto-no-pinpad/leitura_campos_abertos_pinpad_forma_nova Alguma novidade? Ainda está aguardando desenvolvimento? Grato. Editado 28 Dezembro, 2023 por RRiquena Link para o comentário Compartilhar em outros sites More sharing options...
Osmar de Luca Postado 29 Dezembro, 2023 Autor Compartilhar Postado 29 Dezembro, 2023 (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 29 Dezembro, 2023 por Osmar de Luca Link para o comentário Compartilhar em outros sites More sharing options...
RRiquena Postado 29 Dezembro, 2023 Compartilhar Postado 29 Dezembro, 2023 Osmar obrigado pela resposta. Fiz algumas modificações na forma de leitura antiga (que está implementada) e já resolvi minha necessidade. Tudo certo. Grato. Link para o comentário Compartilhar em outros sites More sharing options...
Osmar de Luca Postado 29 Dezembro, 2023 Autor Compartilhar Postado 29 Dezembro, 2023 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. Link para o comentário Compartilhar em outros sites More sharing options...
Membros Pro Datacamp Postado 21 Maio Membros Pro Compartilhar Postado 21 Maio 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 1 Link para o comentário Compartilhar em outros sites More sharing options...
Consultores Diego Foliene Postado 22 Maio Consultores Compartilhar Postado 22 Maio 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: 1 Diego FolieniAjude o Projeto ACBr crescer - Assine o SAC (15) 2105-0750 (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 More sharing options...
Fundadores Daniel Simoes Postado 24 Maio Fundadores Compartilhar Postado 24 Maio Obrigado pela contribuição.... analisando... Daniel Simões de Almeida O melhor TEF, é com o Projeto ACBr - Clique e Conheça Ajude o Projeto ACBr crescer - Assine o SAC (15) 2105-0750 (15)99790-2976. Link para o comentário Compartilhar em outros sites More sharing options...
Fundadores Daniel Simoes Postado 27 Maio Fundadores Compartilhar Postado 27 Maio 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) 1 Daniel Simões de Almeida O melhor TEF, é com o Projeto ACBr - Clique e Conheça Ajude o Projeto ACBr crescer - Assine o SAC (15) 2105-0750 (15)99790-2976. Link para o comentário Compartilhar em outros sites More sharing options...
Membros Pro Datacamp Postado 27 Maio Membros Pro Compartilhar Postado 27 Maio Olá, assim que possível irei atualizar o componente e fazer os testes. Obrigado. 1 Link para o comentário Compartilhar em outros sites More sharing options...
Membros Pro Datacamp Postado 29 Maio Membros Pro Compartilhar Postado 29 Maio @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. Link para o comentário Compartilhar em outros sites More sharing options...
Fundadores Daniel Simoes Postado 29 Maio Fundadores Compartilhar Postado 29 Maio @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... Daniel Simões de Almeida O melhor TEF, é com o Projeto ACBr - Clique e Conheça Ajude o Projeto ACBr crescer - Assine o SAC (15) 2105-0750 (15)99790-2976. Link para o comentário Compartilhar em outros sites More sharing options...
Recommended Posts
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 contaEntrar
Já tem uma conta? Faça o login.
Entrar Agora