Marcio Dias Ramos Postado 29 Junho, 2020 Compartilhar Postado 29 Junho, 2020 (editado) Bom dia a todos! Desenvolvo uma aplicação para emissão de BP-e e migrei a parte mobile para o Acbr. Tenho a aplicação rodando em vários dispositivos diferentes desde celulares com a mini impressora BT a vário modelos de terminais POS. Tanto o AcbrBPe quanto o AcbrPOSPrinter funcionam perfeitamente em qualquer dessas situações. O único problema que em tenho é com os terminais Cielo LIO. Essas máquinas têm um SO modificado que não permite acessar a impressora. Nesse sistema da Cielo LIO você envia comandos para a impressora no formato de urls com o seguinte formato: lio://print?request=$base64&urlCallback=order://response O que eu tenho feito é criar um instrução nesse formato: scheme := '{"operation":"PRINT_IMAGE","styles":[{"key_attributes_align":0,"key_attributes_textsize":40}],"value":["/storage/emulated/0/saved_images/QRCODE.BMP"]}'; E depois enviar a impressora com essa rotina: Base64 := MinhaEncodeBase64(BytesOf(scheme)); Uri := 'lio://print?request='+Base64+'&urlCallback=order://response'; Imprime1 := TJIntent.Create; Imprime1.setAction(TJIntent.JavaClass.ACTION_VIEW); Imprime1.addFlags(TJIntent.JavaClass.FLAG_ACTIVITY_CLEAR_TOP) ; Imprime1.setData(StrToJURI(uri)); SharedActivity.startActivity(Imprime1) Será que é viável criar uma classe para compatibilizar o AcbrPosPrinter com esse método de impressão através Intent? Se sim, vocês tem alguma dica para começar? Desde já agradeço. Márcio Dias Ramos Editado 29 Junho, 2020 por Marcio Dias Ramos Link para o comentário Compartilhar em outros sites More sharing options...
Fundadores Daniel Simoes Postado 29 Junho, 2020 Fundadores Compartilhar Postado 29 Junho, 2020 notei que várias dessas máquinas Android que tem rotinas de segurança, não permitem acesso direto a impressora... mas ainda não avaliei qual a melhor forma de interagir com elas... 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...
Marcio Dias Ramos Postado 29 Junho, 2020 Autor Compartilhar Postado 29 Junho, 2020 Ok Daniel, obrigado pela resposta. Na verdade essa da Cielo até agora foi a única que o AcbrPosPrinter não rodou. Eu uso até uma que um cliente adquiriu na china e eu imaginei que não funcionaria mas rodou. Essa da Cielo parece que passou por uma personalização no OS. Mas valeu a atenção. Eu estou pensando em umas alternativas aqui pra esse situação. Obrigado. Link para o comentário Compartilhar em outros sites More sharing options...
Fundadores Daniel Simoes Postado 29 Junho, 2020 Fundadores Compartilhar Postado 29 Junho, 2020 Na Pior das hipóteses, poderíamos criar eventos no componente, como: "OnSendData" e "OnReadData".. Ou seja, facilitar o uso dos "hooks", por outras aplicações... 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...
LIDERNetwork Postado 21 Junho, 2021 Compartilhar Postado 21 Junho, 2021 Olá Senhores, Pesquisando no forum achei este post já com mais de 1 ano sem interações. O que o Marcio dias esta usando é a integração Híbrida que nao tem acesso direto a impressora, mas eu tambem nao consegui fazer com que o componente conseguisse reconhecer a impressora da LIO usando a integração local. Já consegui fazer todos os processos e pagamentos por ela usando o método de integração local consumindo o SDK usando classes JavaClass adicionando na libraries do projeto, mas impressão de uma NFCe ainda estou apanhando... Se conseguir posso contribuir postando os resultados aqui... Alguém aqui ja conseguiu impressão da NFCe nessa Cielo LIO? 1 Link para o comentário Compartilhar em outros sites More sharing options...
Fundadores Daniel Simoes Postado 21 Junho, 2021 Fundadores Compartilhar Postado 21 Junho, 2021 Veja como fiz recentemente, classes Externas para o ACBrPosPrinter, para supotar as Bibliotecas da Elgin e Gertec, para Android... http://svn.code.sf.net/p/acbr/code/trunk2/Fontes/ACBrSerial/ACBrPosPrinterGEDI.pas http://svn.code.sf.net/p/acbr/code/trunk2/Fontes/ACBrSerial/ACBrPosPrinterElginE1Lib.pas Talvez a implementação que mais se assemelhe, seja essa, que traduz as Tags do ACBrPosPrinter, para chamadas a Intent Service E1, da Elgin http://svn.code.sf.net/p/acbr/code/trunk2/Fontes/ACBrSerial/ACBrPosPrinterElginE1Service.pas 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...
LIDERNetwork Postado 22 Junho, 2021 Compartilhar Postado 22 Junho, 2021 (editado) Obrigado Daniel por dar retorno. Realmente as chamadas são bem diferentes em relação a Elgin porque vc usou intents e no caso to usando o SDK com integração local, segue em anexo a classe e as libs anexadas em Libraries se vc quiser dar uma olhada. Eu não consegui usar a classe JPrintermanager porque pede um parâmetro do tipo JMap e nao achei documentação para conversão do HashMap formato JAVA para Delphi no procedimento printImage(JBitmap, JMap, JPrinterListener). Note que a LIO nao aceita impressão PDF direta então tive que converter de PDF para JBitmap. No JAVA o HashMap seria mais ou menos assim: HashMap<String, Integer> alignCenter = new HashMap<>(); alignCenter.put(PrinterAttributes.KEY_ALIGN, PrinterAttributes.VAL_ALIGN_CENTER); alignCenter.put(PrinterAttributes.KEY_TYPEFACE, 1); alignCenter.put(PrinterAttributes.KEY_TEXT_SIZE, 20); CieloSDK.jar Android.CieloLIO.pas Editado 22 Junho, 2021 por LIDERNetwork 1 Link para o comentário Compartilhar em outros sites More sharing options...
LIDERNetwork Postado 22 Junho, 2021 Compartilhar Postado 22 Junho, 2021 Como forma de contribuição segue a conversão: alignCenter := TJHashMap.Create; alignCenter.put(StringToJString('KEY_ALIGN'), StringToJString('VAL_ALIGN_CENTER')); alignCenter.put(StringToJString('KEY_TYPEFACE'), StringToJString('1')); alignCenter.put(StringToJString('KEY_TEXT_SIZE'), StringToJString('20')); ImpLIO.printImage(DadosVenda.JBitmapNFCe, TJMap.Wrap(JObjectToID(alignCenter)), ListernerPrinter ); Link para o comentário Compartilhar em outros sites More sharing options...
gabriellc Postado 18 Agosto, 2021 Compartilhar Postado 18 Agosto, 2021 Em 22/06/2021 at 16:16, LIDERNetwork disse: Como forma de contribuição segue a conversão: alignCenter := TJHashMap.Create; alignCenter.put(StringToJString('KEY_ALIGN'), StringToJString('VAL_ALIGN_CENTER')); alignCenter.put(StringToJString('KEY_TYPEFACE'), StringToJString('1')); alignCenter.put(StringToJString('KEY_TEXT_SIZE'), StringToJString('20')); ImpLIO.printImage(DadosVenda.JBitmapNFCe, TJMap.Wrap(JObjectToID(alignCenter)), ListernerPrinter ); bom dia amigo, peguei teu Em 22/06/2021 at 14:40, LIDERNetwork disse: Obrigado Daniel por dar retorno. Realmente as chamadas são bem diferentes em relação a Elgin porque vc usou intents e no caso to usando o SDK com integração local, segue em anexo a classe e as libs anexadas em Libraries se vc quiser dar uma olhada. Eu não consegui usar a classe JPrintermanager porque pede um parâmetro do tipo JMap e nao achei documentação para conversão do HashMap formato JAVA para Delphi no procedimento printImage(JBitmap, JMap, JPrinterListener). Note que a LIO nao aceita impressão PDF direta então tive que converter de PDF para JBitmap. No JAVA o HashMap seria mais ou menos assim: HashMap<String, Integer> alignCenter = new HashMap<>(); alignCenter.put(PrinterAttributes.KEY_ALIGN, PrinterAttributes.VAL_ALIGN_CENTER); alignCenter.put(PrinterAttributes.KEY_TYPEFACE, 1); alignCenter.put(PrinterAttributes.KEY_TEXT_SIZE, 20); CieloSDK.jar 133 kB · 2 downloads Android.CieloLIO.pas 131 kB · 2 downloads ola amigo, peguei esse sdk pra estudar, mas estou um pouco perdido como fazer as chamadas, vc poderia por um codigo de exemplo, de criar uma order, fazer o bind. desde ja agradecido! Gabriel Rodrigues Da Costa Neto Link para o comentário Compartilhar em outros sites More sharing options...
djinfope Postado 19 Agosto, 2021 Compartilhar Postado 19 Agosto, 2021 Também estou penando a um tempo para desenvolver a integração com a lio, já fiz um app no delphi consigo listar meus abastecimentos mas na hora do pagamento estou levando uma surra para chamar a lio, só trabalho com delphi a 3 anos e não tenho tanta experiencia com mobile, apenas vlc. Link para o comentário Compartilhar em outros sites More sharing options...
LIDERNetwork Postado 19 Agosto, 2021 Compartilhar Postado 19 Agosto, 2021 Vou ajudar vcs... @gabriellc me passe ate onde vc conseguiu fazer no seu projeto. Vc ja anexou o SDK e ja importou o Android.Cielo.LIO.pas que anexo ao topico? Veja acima os anexos que coloquei... Link para o comentário Compartilhar em outros sites More sharing options...
gabriellc Postado 19 Agosto, 2021 Compartilhar Postado 19 Agosto, 2021 41 minutos atrás, LIDERNetwork disse: Vou ajudar vcs... @gabriellc me passe ate onde vc conseguiu fazer no seu projeto. Vc ja anexou o SDK e ja importou o Android.Cielo.LIO.pas que anexo ao topico? Veja acima os anexos que coloquei... ja sim, minhas duvidas sao so em como chamar os metodos, nao sou muito familiarizado com essa juncao do java com o delphi se puder postar exemplos basicos, eu desenrolo o restante, tipo uma chamada de uma order o exemplo do bind Gabriel Rodrigues Da Costa Neto Link para o comentário Compartilhar em outros sites More sharing options...
LIDERNetwork Postado 19 Agosto, 2021 Compartilhar Postado 19 Agosto, 2021 Eu apanhei bastante pra aprender a salada de códigos que vem de uma biblioteca JAVA para Delphi, eu acho até que é bem difícil vc encontrar um ser vivente que decifre tudo, nada além do esperado enquanto se trata de JAVA !! Vou passar mais conteúdo, afim de ajudar outros colegas... Declare os Objetos das interfaces TJavaLocal, deverá ter um listener para o bind e outro para o pagamento que será usado para chamar o OrderManager: TServBindListener = class(TJavaLocal, JServiceBindListener) public procedure onServiceBound; cdecl; procedure onServiceBoundError(P1: JThrowable); cdecl; procedure onServiceUnbound; cdecl; end; TPagListener = class(TJavaLocal, JPaymentListener) public procedure onCancel; cdecl; procedure onError(P1: JPaymentError); cdecl; procedure onPayment(P1: JOrder); cdecl; procedure onStart; cdecl; end; Declare variáveis private ou public das classes Listener e uma variável da classe Java do tipo JOrderManager var OrderManager : JOrderManager; ServiceBindListener : TServBindListener; PaymentListener : TPagListener; Vc precisa inicializar os objetos no form onde vc fará as chamadas initialization {Credenciais CIELO} const ClientID : string = 'SUA CLIENTEID'; const AccessToken : string= 'SEU TOKEN_ACCESS'; ServiceBindListener := TServBindListener.Create; PaymentListener := TPagListener.Create; OrderManager := TJOrderManager.JavaClass.init(TJdomain_Credentials.JavaClass.init(StringToJString(ClientID), StringToJString(AccessToken)), SharedActivityContext); OrderManager.bind(SharedActivity, ServiceBindListener); Até aqui a LIO já estará "escutando" todo pedido de pagamento... Para chamar o método e solicitar um ordem de pagamento function TfrmFORMULARIO.RealizaPagamento : boolean; {$IFDEF ANDROID} var LOrder: JOrder; {$ENDIF} begin {$IFDEF ANDROID} try begin LOrder := OrderManager.createDraftOrder(StringToJString(DadosVenda.codven.tostring)); LOrder.addItem(StringToJString(CODIGO_PRODUTO), StringToJString(DESCRICAO_PRODUTO), CurrencyToNumeric(100.00,-2), CurrencyToNumeric(10,-3), StringToJString('UND')); OrderManager.placeOrder(LOrder); OrderManager.checkoutOrder(LOrder.getId, CurrencyToNumeric(DadosVenda.ValorVenda,-2), PaymentListener); Result := DadosVenda.StatusPagamento; end; except on e : Exception do begin ShowMessage(e.message); end; end; end; Nesse momento ao chamar OrderManager.checkoutOrder vai abrir o app da Cielo para passar o cartao, o retorno do método quando a LIO finalizar o pagamento vc captura em TPagtListener.onPayment onde os retornos possíveis vc pega com JStringToString(P1.getStatus.toString) dentro do método, veja a documentação para saber quais retornos possíveis... procedure TPagListener.onPayment(P1: JOrder); begin frmFORMULARIOn.Text1.Text := 'VENDA ID = ' + JStringToString(P1.getId) + #10#13 + ' VALOR = ' + P1.paidAmount.toString + #10#13 + 'VALOR RESTANTE = ' + P1.getPendingAmount.toString + #10#13 + 'STATUS = ' + JStringToString(P1.getStatus.toString); end; Dai pra frente veja se consegue desenrolar! 2 Link para o comentário Compartilhar em outros sites More sharing options...
gabriellc Postado 20 Agosto, 2021 Compartilhar Postado 20 Agosto, 2021 11 horas atrás, LIDERNetwork disse: Eu apanhei bastante pra aprender a salada de códigos que vem de uma biblioteca JAVA para Delphi, eu acho até que é bem difícil vc encontrar um ser vivente que decifre tudo, nada além do esperado enquanto se trata de JAVA !! Vou passar mais conteúdo, afim de ajudar outros colegas... Declare os Objetos das interfaces TJavaLocal, deverá ter um listener para o bind e outro para o pagamento que será usado para chamar o OrderManager: TServBindListener = class(TJavaLocal, JServiceBindListener) public procedure onServiceBound; cdecl; procedure onServiceBoundError(P1: JThrowable); cdecl; procedure onServiceUnbound; cdecl; end; TPagListener = class(TJavaLocal, JPaymentListener) public procedure onCancel; cdecl; procedure onError(P1: JPaymentError); cdecl; procedure onPayment(P1: JOrder); cdecl; procedure onStart; cdecl; end; Declare variáveis private ou public das classes Listener e uma variável da classe Java do tipo JOrderManager var OrderManager : JOrderManager; ServiceBindListener : TServBindListener; PaymentListener : TPagListener; Vc precisa inicializar os objetos no form onde vc fará as chamadas initialization {Credenciais CIELO} const ClientID : string = 'SUA CLIENTEID'; const AccessToken : string= 'SEU TOKEN_ACCESS'; ServiceBindListener := TServBindListener.Create; PaymentListener := TPagListener.Create; OrderManager := TJOrderManager.JavaClass.init(TJdomain_Credentials.JavaClass.init(StringToJString(ClientID), StringToJString(AccessToken)), SharedActivityContext); OrderManager.bind(SharedActivity, ServiceBindListener); Até aqui a LIO já estará "escutando" todo pedido de pagamento... Para chamar o método e solicitar um ordem de pagamento function TfrmFORMULARIO.RealizaPagamento : boolean; {$IFDEF ANDROID} var LOrder: JOrder; {$ENDIF} begin {$IFDEF ANDROID} try begin LOrder := OrderManager.createDraftOrder(StringToJString(DadosVenda.codven.tostring)); LOrder.addItem(StringToJString(CODIGO_PRODUTO), StringToJString(DESCRICAO_PRODUTO), CurrencyToNumeric(100.00,-2), CurrencyToNumeric(10,-3), StringToJString('UND')); OrderManager.placeOrder(LOrder); OrderManager.checkoutOrder(LOrder.getId, CurrencyToNumeric(DadosVenda.ValorVenda,-2), PaymentListener); Result := DadosVenda.StatusPagamento; end; except on e : Exception do begin ShowMessage(e.message); end; end; end; Nesse momento ao chamar OrderManager.checkoutOrder vai abrir o app da Cielo para passar o cartao, o retorno do método quando a LIO finalizar o pagamento vc captura em TPagtListener.onPayment onde os retornos possíveis vc pega com JStringToString(P1.getStatus.toString) dentro do método, veja a documentação para saber quais retornos possíveis... procedure TPagListener.onPayment(P1: JOrder); begin frmFORMULARIOn.Text1.Text := 'VENDA ID = ' + JStringToString(P1.getId) + #10#13 + ' VALOR = ' + P1.paidAmount.toString + #10#13 + 'VALOR RESTANTE = ' + P1.getPendingAmount.toString + #10#13 + 'STATUS = ' + JStringToString(P1.getStatus.toString); end; Dai pra frente veja se consegue desenrolar! show cara, vlw! Gabriel Rodrigues Da Costa Neto Link para o comentário Compartilhar em outros sites More sharing options...
Rogerio Alves Postado 20 Maio, 2022 Compartilhar Postado 20 Maio, 2022 Em 19/08/2021 at 20:45, LIDERNetwork disse: OrderManager := TJOrderManager.JavaClass.init(TJdomain_Credentials.JavaClass.init(StringToJString(ClientID), StringToJString(AccessToken)), SharedActivityContext); Olá, tudo bem, venho desenvolvendo para a LIO, mas no momento da criação do OrderManager da esse erro "java.lang.noclassdeffounderror: failed resolution of: lkotlin/jvm/internal/intrinsics;" alguém já passou por isso? Link para o comentário Compartilhar em outros sites More sharing options...
djinfope Postado 9 Junho, 2022 Compartilhar Postado 9 Junho, 2022 Estou tendo o mesmo retorno do amigo aqui de cima @LIDERNetwork você passou por algo parecido? ou prcisou fazer alguma alteração no seu arquivo? Link para o comentário Compartilhar em outros sites More sharing options...
Carlos Modesto Postado 28 Agosto, 2022 Compartilhar Postado 28 Agosto, 2022 Olá, eu fiz a conversão da SDK da Cielo em 2019 e montei um pequeno exemplo no Delphi, coloquei o código no GitHub: CarlosHe/FiremonkeyCieloLIO: Firemonkey Cielo LIO Local - SDK (github.com) Vou atualizar o código e colocar um exemplo para a impressão na LIO. 1 1 Link para o comentário Compartilhar em outros sites More sharing options...
LIDERNetwork Postado 29 Agosto, 2022 Compartilhar Postado 29 Agosto, 2022 Olá @Carlos Modesto, sim isso mesmo, vc nos ajudou com seu código lá no GitHub e agradeço muito pela contribuição. Tive que fazer nova leitura e conversão do SDK da Cielo para a versão atual e implementei novas funcionalidades como impressão de comprovante, pagamento por PIX dentre outras, mas parti do principio usando seu código e isso foi a virada de chave que precisava na época, obrigado! Link para o comentário Compartilhar em outros sites More sharing options...
djinfope Postado 11 Outubro, 2022 Compartilhar Postado 11 Outubro, 2022 Em 29/08/2022 at 09:34, LIDERNetwork disse: Olá @Carlos Modesto, sim isso mesmo, vc nos ajudou com seu código lá no GitHub e agradeço muito pela contribuição. Tive que fazer nova leitura e conversão do SDK da Cielo para a versão atual e implementei novas funcionalidades como impressão de comprovante, pagamento por PIX dentre outras, mas parti do principio usando seu código e isso foi a virada de chave que precisava na época, obrigado! @LIDERNetwork você poderia falar como conseguiu ler e converter o arquivo? o que voce tinha passado em algumas mensagens anteriores está com alguns códigos em kotlin que o delphi não interpreta ele, assim fazendo o meu app ficar com a tela preta e travado. e eu estou com alguns clientes dependendo apenas de integração com a lio para migrar para meu sistema, e para ser mais simples o desenvolvimento estou tentando reutilizar o mesmo app que roda no gpos700 que ja implementei. Link para o comentário Compartilhar em outros sites More sharing options...
djinfope Postado 17 Novembro, 2022 Compartilhar Postado 17 Novembro, 2022 Alguem conseguiu fazer a impressão na cielo lio usando o sdk disponibilizado aqui? o restante do processo conseguir implementar em meu app mesmo a trancos e barrancos, falta agora apenas conseguir imprimor a nfce gerada via acbr. Link para o comentário Compartilhar em outros sites More sharing options...
djinfope Postado 17 Novembro, 2022 Compartilhar Postado 17 Novembro, 2022 Em 29/08/2022 at 09:34, LIDERNetwork disse: Olá @Carlos Modesto, sim isso mesmo, vc nos ajudou com seu código lá no GitHub e agradeço muito pela contribuição. Tive que fazer nova leitura e conversão do SDK da Cielo para a versão atual e implementei novas funcionalidades como impressão de comprovante, pagamento por PIX dentre outras, mas parti do principio usando seu código e isso foi a virada de chave que precisava na época, obrigado! @LIDERNetwork você teria algum exemplo de como fez a parte de impressão? o material qe tinha passado antes foi de grande ajuda e meu app agora esta comunicando só falta a impressão para testar em uma maquina fisica. Link para o comentário Compartilhar em outros sites More sharing options...
LIDERNetwork Postado 17 Novembro, 2022 Compartilhar Postado 17 Novembro, 2022 2 minutos atrás, djinfope disse: @LIDERNetwork você teria algum exemplo de como fez a parte de impressão? o material qe tinha passado antes foi de grande ajuda e meu app agora esta comunicando só falta a impressão para testar em uma maquina fisica. Ola @djinfope te passo sim, so quando chegar no pc mais tarde OK! Vou te passar como fiz, pode nao ser o ideal mas aqui esta funfando de boa... Link para o comentário Compartilhar em outros sites More sharing options...
djinfope Postado 17 Novembro, 2022 Compartilhar Postado 17 Novembro, 2022 (editado) 1 minuto atrás, LIDERNetwork disse: Ola @djinfope te passo sim, so quando chegar no pc mais tarde OK! Vou te passar como fiz, pode nao ser o ideal mas aqui esta funfando de boa... Blz, muito obrigado por suas contribuições aqui, me ajudaram muito. não sei se você consegue pegar o nome da bandeira no seu projeto, aqui quando tento o app trava, para pegar a bandeira e nsu que estão em uma subclasse. Editado 17 Novembro, 2022 por djinfope Link para o comentário Compartilhar em outros sites More sharing options...
djinfope Postado 29 Dezembro, 2022 Compartilhar Postado 29 Dezembro, 2022 Em 17/11/2022 at 14:50, LIDERNetwork disse: Ola @djinfope te passo sim, so quando chegar no pc mais tarde OK! Vou te passar como fiz, pode nao ser o ideal mas aqui esta funfando de boa... Bom dia, você poderia enviar uma base da impressão? para eu finalizar o app aqui só falta essa parte, desde já obrigado por suas contribuições. Link para o comentário Compartilhar em outros sites More sharing options...
Infocast Soluções em Técnologia Postado 26 Fevereiro, 2023 Compartilhar Postado 26 Fevereiro, 2023 Boa noite como faço para recuperar a bandeira e forma de pagamento efetuada ? 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