Ir para conteúdo
  • Cadastre-se

Daniel Simoes

Fundadores
  • Total de ítens

    29.299
  • Registro em

  • Última visita

  • Days Won

    781

Tudo que Daniel Simoes postou

  1. O PayGo, disponibilizou uma nova versão de sua biblioteca PGWebLib 4.1.44.0, que permite as automações Enviar e manipular Imagens no PinPad, além de Menus para pesquisas ou outras funcionalidades Você pode encontrar essa nova biblioteca, no site oficial da PayGo Com essa nova biblioteca, implementamos os seguintes métodos, na classe TACBrTEFAPIClassPayGoWeb procedure CarregarImagemPinPad(const NomeImagem: String; AStream: TStream; TipoImagem: TACBrTEFAPIImagemPinPad ); override; procedure ExibirImagemPinPad(const NomeImagem: String); override; procedure ObterListaImagensPinPad(ALista: TStrings); override; procedure ApagarImagemPinPad(const NomeImagem: String); override; function MenuPinPad(const Titulo: String; Opcoes: TStrings; TimeOut: Integer = 30000): Integer; override; Isso permitirá que aplicações que usam o TEF PayGo, através da biblioteca PGWebLib, possam enviar Logotipos ao PinPad, ou QRCode do PIX, quando integrado por fora do TEF... A funcionalidade de exibição de Menus no PinPad, também é muito útil para pesquisas de satisfação, por exemplo... Exemplo de como enviar um QRCode ao PinPad, usando o componente ACBrTEFAPI ACBrTEFAPI1.ExibirQRCodePinPad( '00020101021226900014BR.GOV.BCB.PIX2568pix-qr.mercadopago.com/instore/p/v2/7edcf890b0de4f0689fe7aea52e447b843540016com.mercadolibre0130'+ 'https://mpago.la/pos/1078225765204000053039865802BR5907GETCARD6009SAO PAULO62070503***6304424C', 'QRCODE'); Usando o método acima, o ACBrTEFAPI, cuidará de renderizar uma imagem PNG em QRCode, com a String de um PIX, respeitando as dimensões de tela do PinPad, e por fim, transmiti-lo ao PinPad, e exibi-lo... Se você deseja enviar a sua própria imagem, use o comando abaixo: procedure TFormPrincipal.Button2Click(Sender: TObject); var FileLogo, MediaName: String; begin FileLogo := ApplicationPath+'LogoACBr.png'; // Path completo, para a Imagem a ser transmitida MediaName := 'LOGOACBR'; // Nome da Imagem no PinPad ACBrTEFAPI1.CarregarImagemPinPad(MediaName, FileLogo); ACBrTEFAPI1.ExibirImagemPinPad(MediaName); end; Observe que o primeiro comando, apenas transmite a Imagem ao PinPad... e isso pode demorar alguns segundos... O Segundo comando, comanda a exibição da uma Imagem já existente (carregada) no PinPad... Você pode ainda, usar o comando abaixo, para conhecer as imagens existentes no PinPad... ACBrTEFAPI1.ObterListaImagensPinPad(AStringList); O comando espera receber um TStrings, e irá preenche-lo com o nome das imagens existentes no PinPad ...se necessário, você pode aparar as Imagens da memória do equipamento MediaName := 'LOGOACBR'; ACBrTEFAPI1.ApagarImagemPinPad(MediaName); Já a funcionalidade de Exibição de Menus no PinPad, pode ser obtida, conforme exemplo abaixo: procedure TFormPrincipal.btMenuPinPadClick(Sender: TObject); var sl: TStringList; i: Integer; begin sl := TStringList.Create; try sl.Add('Item1'); sl.Add('Item2'); sl.Add('Item3'); i := ACBrTEFAPI1.MenuPinPad('Titulo do Menu', sl); // Chama o Menu no PinPad ShowMessage('Selecionada opção: '+IntToStr(i)); finally sl.Free; end; end;
      • 2
      • Curtir
  2. O ACBr não usa essa DLL
  3. @Italo Giurizzato Junior, Acredita que as alteracoes estão corretas?
  4. O mesmo problema, ocorre com o Demo do ACBrTEFAPI ?
  5. Olá @Desenvolvimento.microline, Você teria alguma informação, sobre a URL ou provedor correto ?
  6. Tentou usar o ACBrTEFAndroid ?
  7. @Robson_Renan, não está nos nossos planos recentes, tentar fazer ajustes para essas restrições do google No meu entendimento, o correto é a Sw.Houses ter ser próprio servidor SMTP, ao invés de usar contas pessoais, dos clientes, para envio de emails Veja esse vídeo:
  8. Humm... realmente o problema ocorrerá, quando 'FazerRequisicaoSiTef' for chamado novamente... Ou seja, se houver multiplos cartões na mesma venda, ele usará uma informação de DataHora, para cada chamada a 'FazerRequisicaoSiTef'... Estou aguardando a liberação de um SDK para testes, para rever a integração com a Fiserv
  9. @antoniojmsjr, enviei ao SVN, modificações, baseado em suas sugestões... Commit [r39850] -- ACBrTEFComum -- [+] Adicionada a propriedade TACBrTEFResp.PAN [*] Quando atribui algum valor a PAN, calcula o BIN e NFCeSAT.UltimosQuatroDigitos, caso essas propriedades sejam vazias
  10. Não encontrei na documentação oficial, informações sobre o retorno do campo 2021 https://dev.softwareexpress.com.br/docs/clisitef/clisitef_documento_principal/ Ele não seria a mesma coisa, que o campo 136 (BIN) ?
  11. @Smaili Amorim, Ainda não tenho o ambiente de testes da Sw.Express... Mas pelo que li nos fontes, ele está enviando corretamente, a mesma DataHora, que iniciou a transação, no momento da Confirmação.. Veja que ele recupera a transação, e usa da DataHora dela
  12. oi @antoniojmsjr, poderia por favor, anexar a Unit modificada ?
  13. @SIDesenvolvimento, Estou aguardando a liberação de um ambiente de testes pela Fiserv... Retorno nesse tópico em breve...
  14. ficou um pouco confuso... - o TEF Scope, é implementado no componente ACBrTEFAPI, usando a DLL. - A GetCard tem uma aplicação que emula o TEF por troca de arquivos, no TEF Scope
  15. Faz todo sentido.. obrigado, enviado ao SVN... Commit 39700
  16. humm, ok... provavelmente eles repostaram em relação a esses outros métodos.. Vou fazer uma validação Experimente apagar eles, antes da inicialização... ACBrTEFAPI1.LimparRespostasTEF;
  17. @Smaili Amorim, em qual documento eles afirmam isso ? Tem algum Link ou documentação ?
  18. Obrigado pela contribuição... Revi as demais classes, e implementei nas que tem a informação da Versão.. Commit [r39573]
  19. Apliquei uma ampla revisão nos fontes, no método LerInfo de todas as classes... Commit [r39561]
  20. O Sitef tem um funcionamento diferente, onde devemos informar quais formas de pagamento não queremos... Isso é feito, nos fontes do ACBr, em TACBrTEFAPIClassCliSiTef.EfetuarPagamento Observe que nesse método, o ACBr tenta traduzir os parâmetros recebidos no método EfetuarPagamento para esses parâmetros de restrição... Restricoes := DadosAdicionais; if (pos('[', fParamAdicFuncao.Text) = 0) then // Não especificou Restrições de Menu ? begin if (Op <> 0) and (OP <> 1) then // Débito Restricoes := Restricoes + CSITEF_RestricoesCueque + ';'; if (Op = 2) then // Débito Restricoes := Restricoes + CSITEF_RestricoesCredito + ';' else if (Op = 3) then // Crédito Restricoes := Restricoes + CSITEF_RestricoesDebito + ';'; if (Financiamento = tefmfAVista) then begin Restricoes := Restricoes + CSITEF_RestricoesParcelado + ';'; Restricoes := Restricoes + CSITEF_RestricoesParcelaAministradora + ';'; Restricoes := Restricoes + CSITEF_RestricoesParcelaEstabelecimento + ';'; end else if (Financiamento = tefmfParceladoEmissor) then begin Restricoes := Restricoes + CSITEF_RestricoesAVista + ';'; Restricoes := Restricoes + CSITEF_RestricoesParcelaEstabelecimento + ';'; end else if (Financiamento = tefmfParceladoEstabelecimento) then begin Restricoes := Restricoes + CSITEF_RestricoesAVista + ';'; Restricoes := Restricoes + CSITEF_RestricoesParcelaAministradora + ';'; end; e no final, ele adiciona os parâmetros que você tenha injetado em ParamAdicConfig e move tudo para ParamAdicFuncao... // Convertendo para formato de parâmetro, conforme esperado if (SL.Count > 0) then begin Restricoes := StringReplace(Trim(SL.Text), sLineBreak, ';', [rfReplaceAll]); if Restricoes <> '' then Restricoes := '['+Restricoes+']'; if fParamAdicConfig.Count > 0 then Restricoes := Restricoes + ';'+ Trim(fParamAdicConfig.Text); if (Restricoes <> '') then fParamAdicFuncao.Add( Restricoes ); end; finally SL.Free; end; Então precisamos ver no Log do ACBr (ou Sitef), como ficaram as restrições e parâmetros finais, enviados para o Sitef Segunda a documentação do SiTEF: https://dev.softwareexpress.com.br/docs/clisitef/clisitef_documento_principal/#início-da-transação-de-pagamento-ou-gerencial 110 Abre o menu de transações Gerenciais Os Cancelamentos, iniciam no comando 200 (que é o comando padrão do ACBr)
  21. Show, obrigado @antoniojmsjr já vou analisar...
  22. Olá @SIDesenvolvimento Você usa ACBrTEFD ou ACBrTEFAPI ? Seus fontes estão atualizados ? (lembro de ter feito um ajuste, para ele usar a hora atual, se não for informado o Documento da Venda) notei que em algumas situações no Log, está sendo enviado o Indentificador da Transação como zeros No seu Log, parece estar sendo enviado 200... veja Você pode configurar isso, na propriedade OperacaoCancelamento, exemplo: if ACBrTEFAPI1.TEF is TACBrTEFAPIClassCliSiTef then begin with TACBrTEFAPIClassCliSiTef(ACBrTEFAPI1.TEF) do begin OperacaoCancelamento := 110; end; end; Você está informando o parâmetro 'Financiamento' do método 'EfetuarPagamento' ? Ok := ACBrTEFAPI1.EfetuarPagamento( IntToStr(Venda.NumOperacao), AValor, Modalidade, CartoesAceitos, tefmfAVista); // <----- AQUI -----
  23. Enviado ao SVN... Commit [r39536] Não consegui baixar esse último anexo...
  24. Obrigado... Analisando...
×
×
  • 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.

The popup will be closed in 10 segundos...