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 Terça as 16:23 Membros Pro Compartilhar Postado Terça as 16:23 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 More sharing options...
Consultores Diego Foliene Postado Há 22 horas Consultores Compartilhar Postado Há 22 horas 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...
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