Ir para conteúdo
  • Cadastre-se

Valdir Dill

Membros Pro
  • Total de ítens

    933
  • Registro em

  • Última visita

  • Days Won

    5

Posts postados por Valdir Dill

  1. 15 minutos atrás, Daniel Simoes disse:

    Esse projeto que você não conseguiu abrir...

    Bom dia,

    Certo, entendi.

    Estamos conseguindo progredir.

    Na verdade os fontes deles (Gertec) são em Delphi 5, acredita? Não dá para entender como uma empresa que ganha tanto dinheiro vendendo hardware não é capaz de uma simples atualização de fontes. Atualizar a cada década já estaria bom, rs.

    Mas assim que tivermos as rotinas prontas, vamos disponibilizar aqui o código para ajudar quem precisar.

    Já conseguimos fazer o emulador se comunicar com o server. Agora é só questão de ajustes.

    Obrigado!  

    • Curtir 1
    • Obrigado 1
  2. 1 hora atrás, Daniel InfoCotidiano disse:

    @Valdir Dill
    Nossa documentação esta divergente qto a impressão do boleto na formatação do nossoNumero
    Pode por favor anexar um boleto gerado por eles e tbm a documentação que conste este novo formato do nosso numero

    Boa tarde

    A documentação deles é um pouco confusa. Ao mesmo tempo que diz que o layout do nosso número deve ser AABnnnnnD (arquivo Sicredi_Pag_108.pn anexo) , ou seja, no padrão que sempre foi, o mesmo manual mostra o json que retornará outro padrão para nosso número, caso este não seja informado. Vide arquivo Sicredi_Json_Ret_API_Pag_36.png anexo.

    Também anexo e o boleto solicitado. Não consegui anexar o manual porque ele excede 1 MB.

    Note que o boleto anexado tem o nosso número 00002. A impressão ficam assim no .pdf da Sicredi: 60/000002-1.
    Se eu aplicar esse número (00002) para o Acbr imprimir. Será impresso assim: 24/200002-4.

    Obrigado!

     

    Sicredi_Bol_GeradoAPI.png

    Sicredi_Json_Ret_API_Pag_36.png

    Sicredi_Pag_108.png

  3. 2 horas atrás, Daniel Simoes disse:

    Não é difícil converter Projetos Delphis antigos para as IDEs novas...

    O problema é maior quando o projeto contém componentes que foram descontinuados

    Se for possível, anexe um ZIP que avaliamos a possibilidade de conversão

    Bom dia

    Não entendi muito bem sua resposta @Daniel Simoes

    Eu não tenho um projeto pronto que possa enviar para ser analisado. 

    Deixe-me detalhar melhor sobre minha colocação anterior sobre o Monitor. Veja se fica mais claro: como eu vi num outro post aqui que, no Monitor tem as rotinas para uso do busca preço, mas o Monitor é desenvolvido em Lazarus e, como nós só trabalhamos com o Delphi, não temos como abrir esse projeto do monitor para compilar/analisar.
    Por isso perguntei em quais arquivos .pas da \Projetos\ACBrMonitorPLUS\Lazarus estariam as rotinas do busca preço. Aí abriríamos esses arquivos aqui para estudar as rotinas e, assim talvez, desenvolver as mesmas rotinas no Delphi.

     

    Obrigado

     

  4. Bom dia,

    Estamos precisando integrar nossa aplicação com o busca preços Gertec G2 E.

    No portal da Gertec, encontramos apenas um exemplo em Delphi, mas é muito antigo e não roda mais no Delphi atual. Vários bugs. Tentamos contato direto com a Gertec e nada conseguimos. 

    Alguém usa esse ou outro modelo Gertec integrado e poderia nos dar uma luz? Há algum código fonte que algum colega possa compartilhar ou vender? 

    Vi um post aqui no fórum falando que no Acbr Monitor teria um exemplo de código fonte, mas é em Lazarus. Qual a(s) units(s) desse código têm essas rotinas de exemplo? De repente conseguimos adaptar no Delphi.

    Enfim, qualquer dica ajuda, rs.

    Obrigado!

  5. Boa tarde,

    Fizemos a integração da API da Sicredi e estamos registrando boletos normalmente.

    Porém, na nossa requisição à API, não enviamos o nosso número e deixamos ela gerar esse dado automaticamente. 
    Funciona tudo normal.

    Num exemplo prático de um boleto gerado dessa forma, o nossoNumero retornou com o seguinte valor: 600000009, ou seja, com 9 dígitos e sem formatação.

    Se baixarmos o .pdf disponibilizado pela API, ele vem impresso assim mesmo 600000009.

    Mas queremos imprimir os boletos off line na nossa aplicação, sem ter que baixar o .pdf cada vez.
    Para isso, usamos usando as rotinas do Acbr com Fortes e alimentamos os dados como se fosse um boleto com remessa.

    O problema que estamos enfrentando é que, ao alimetnar o valor do nosso número no componente, ou seja, ACBrTitulo1.NossoNumero := '600000009', o componente acusa erro q o tamanho máximo do nosso numero é 5.

    Existe alguma forma de quem sabe eu informar o valor do nosso número e o Acbr usar esse dado de forma literal e o Acbr não rejeitar para que seja possível imprimir da forma que precisamos?

    Obrigado!

  6. Não, no código Acbr não mexi. Apenas pesquisei para ver se tinha alguma rotina para transformar a octet-stream que retorna, em um arquivo .pdf.

    Essa mexida no código Acbr foi o @DevSolucaoSistemasque fez, lá no início do ano passado quando ele abriu esse post. Mas depois não teve mais continuidade.

    O arquivo .txt com a stream que retorna da Sicredi eu anexei na minha postagem anterior (há pouco).

    O que eu precisaria é de uma rotina (em Delphi) para salvar essa stream em arquivo .pdf, entende?  

    Obrigado  

  7. 11 minutos atrás, Juliomar Marchetti disse:

    Creio que ele deva ter desistido ou o código está já funcionando do svn pois já faz 1 ano da ultima interação dele

    Boa tarde,

    Sim @Juliomar Marchettieu havia notado que o post é bastante antigo. Mas como não encontramos nada a respeito do assunto (e já pesquisamos um bocado nos últimos dias), resolvemos arriscar perguntando aqui no post do amigo. Vai que...rs.

    No componente não tem opção para tratar retorno pdf da Sicred. Já virei os fontes de ponta cabeça e não encontrei.

    Talvez a questão seja até simples de resolver, e seja eu que não esteja achando o fio da meada. 
    Veja se podes me ajudar com alguma dica, por gentileza.

    É assim: o que ocorre é que a Sicredi, no caso da requisição do .pdf, ela retorna uma octet-stream, conforme arquivo que estou anexando a este post.
    O meu problema é que não estou sabendo como fazer para gerar o arquivo .pdf com essa stream, entende?
    Qualquer sugestão ajuda, rs.

    Obrigado! 

    retPdf.txt

  8. Em 07/02/2023 at 16:57, DevSolucaoSistemas disse:

    Vou fazer uns testes em produção essa semana para poder postar os fontes aqui. Essa implementação é da API do Sicredi que permite fazer o boleto Hibrido. Terminando crio um tópico com os fontes novos para validação.

    Bom dia, @DevSolucaoSistemas

    Conseguistes algum progresso em relação a gerar o arquivo .pdf com a octet-stream retornada pela API Sicredi?

    Se sim, por gentileza, compartilha conosco, pois nós, e com certeza outros, estão com o mesma dificuldade. 

    Obrigado! 

    • Curtir 1
  9. 6 minutos atrás, Diego Foliene disse:

    No tópico Como solicitar credenciais e configurar PSPs no componente temos a seguinte informação para o Sicredi:

    Ao baixar esta cartilha e conferir na mesma temos:

    image.png

    Dado o retorno que você obteve, entendo que foi usado o arquivo resultante de Download Key.

    A sugestão seria realizar um teste com o arquivo de Download Key (Sem frase de segurança)

    Ah, perfeito.

    Vamos tentar isso e retornaremos com os resultados.

    Obrigado! 

    • Curtir 1
  10. 1 hora atrás, Diego Foliene disse:

    Bom dia!

    Conferindo no seu arquivo api-pix-pix_max.key, o mesmo começa com:

    Ou seja, o mesmo é o arquivo da chave privada criptografada com a senha e no momento da leitura pela dll da OpenSSL, espera se que essa senha seja fornecida em algum momento.

    Ao fazer um teste aqui em meu ambiente, notei que é no momento que a informação vai ser passada para a dll fazer a leitura, ela chega como

    Ou seja, só a chave.

    Por favor, faça um teste configurando no componente o arquivo Key (Sem frase de segurança).

    Boa tarde

     

      Em 10/03/2024 at 08:02, Valdir Dill disse:

    Bom dia,

    Estamos tendo erro "bad decrypt" ao carregar (no demo Acbr) o arquivo de chave privada (.key. Arquivo .key e print do erro, em anexo.

    Esse arquivo foi gerado no portal do Sicredi, assim como o .cer. 

    Fiz um teste gerando um arquivo de chave privada pelo demo do Acbr. Este é carregado sem erros. 

     

    Alguma sugestão do que pode ser esse problema?

    Obrigado

    ErroDemo.png

    1 hora atrás, Diego Foliene disse:

    Bom dia!

    Conferindo no seu arquivo api-pix-pix_max.key, o mesmo começa com:

    Ou seja, o mesmo é o arquivo da chave privada criptografada com a senha e no momento da leitura pela dll da OpenSSL, espera se que essa senha seja fornecida em algum momento.

    Ao fazer um teste aqui em meu ambiente, notei que é no momento que a informação vai ser passada para a dll fazer a leitura, ela chega como

    Ou seja, só a chave.

    Por favor, faça um teste configurando no componente o arquivo Key (Sem frase de segurança).

    Boa tarde,

    Sim, como eu havia dito, eu fiz um teste com o outro arquivo .key que gerei pelo demo Acbr, e esse arquivo tem na primeira linha o "-----BEGIN RSA PRIVATE KEY-----". Esse arquivo não dá erro ao carregá-lo no Demo.
    Mas o arquivo .key que vem do banco é esse que anexei e, ao carregá-lo, dá o erro. 

    Por favor, faça um teste configurando no componente o arquivo Key (Sem frase de segurança)...
    Não entendi muito bem. Pode, por gentileza, detalhar mais como eu faria esse teste?

    Obrigado!

     

  11. Bom dia,

    Estamos tendo erro "bad decrypt" ao carregar (no demo Acbr) o arquivo de chave privada (.key. Arquivo .key e print do erro, em anexo.

    Esse arquivo foi gerado no portal do Sicredi, assim como o .cer. 

    Fiz um teste gerando um arquivo de chave privada pelo demo do Acbr. Este é carregado sem erros. 

     

    Alguma sugestão do que pode ser esse problema?

    Obrigado

    ErroDemo.png

    api-pix-pix_max.key

  12. 3 minutos atrás, Daniel Simoes disse:

    Você não deve escrever um código como esse... pois ele está presumindo que sempre haverá um elemento PIX na resposta, o que pode não ser verdadeiro...

    Quando for trabalhar com Arrays ou Listas, sempre verifique primeiro a propriedade Count para depois tentar acessar os elementos...

    Exemplo

    If ACBrPixCD1.PSP.epCob.CobCompleta..pix.Count > 0 then
       VRetorno.FValorPago := ACBrPixCD1.PSP.epCob.CobCompleta.pix[0].valor;
    esse
       VRetorno.FValorPago := 0;

     

    Sim, eu concordo que ao varrer uma lista, deve ser verificado antes o seu count. A boa prática de código seria essa.

    Mas note que o código (na rotina completa que coloquei) só pega o index 0 se ACBrPixCD1.PSP.epCob.CobCompleta.status = stcCONCLUIDA.
    E veja também (no .txt que anexei) que, no momento em que ocorre a exceção, em ACBrPixCD1.PSP.epCob.CobCompleta.AsJSON tem sim um PIX.

    Então, se status = stcCONCLUIDA e ACBrPixCD1.PSP.epCob.CobCompleta.AsJSON contém retorno de um PIX pago, o ACBrPixCD1.PSP.epCob.CobCompleta.pix.count não deveria estar necessariamente > 0?

    Obrigado!

  13. Bom dia,

    Estamos tendo um erro na hora de confirmar se um PIX dinâmico, banco Inter, foi pago.
    Gostaria de ajuda para ver se há alguma coisa errada em nosso código ou se pode ser algum problema no componente.

    O que ocorre é que são gerados e confirmados 6, 7, ...PIX ou mais, tudo normal, ou seja, é gerado o qrCode e depois a confirmação.
    Porém, aleatoriamente acontece um erro. Como eu disse, vários PIX processam normalmente e, de repente, um deles dá problema, sem que nada diferente seja feito em relação aos PIX anteriores que processaram corretamente.

    A consulta é feita por um timer com interval de 5 segundos. 

    O erro é: "Argument out of range". Acreditamos (não temos certeza porque não há como debbugar) que ocorra nessas linhas de nosso código:
     begin
      VRetorno.FValorPago := ACBrPixCD1.PSP.epCob.CobCompleta.pix[0].valor;
      VRetorno.FEndToEnd := ACBrPixCD1.PSP.epCob.CobCompleta.pix[0].endToEndId;
     end; 


    O código todo de tratamento da confirmação é este:

    try
      if not ACBrPixCD1.PSP.epCob.ConsultarCobrancaImediata(VID_PIXGerado) then  //se não conseguiu fazer a consulta.
       begin
        TimerConsultarPIX.Enabled := false;

        VRetorno.FStatus := stcNENHUM;
        VRetorno.FErro := 'Não foi possível efetuar a consulta.';
       end
      else
       begin
        VRetorno.FStatus := ACBrPixCD1.PSP.epCob.CobCompleta.status;

        if VRetorno.FStatus <> stcATIVA then //se estivar ativa, ou seja, se não foi paga nem baixada, não sai.
         begin
          TimerConsultarPIX.Enabled := false;

          if VRetorno.FStatus = stcCONCLUIDA then
           begin
            VRetorno.FValorPago := ACBrPixCD1.PSP.epCob.CobCompleta.pix[0].valor;
            VRetorno.FEndToEnd := ACBrPixCD1.PSP.epCob.CobCompleta.pix[0].endToEndId;
           end
          else  ChamaErro('O PIX mudou status, mas não foi pago. Seu status está: ' + PIXStatusCobrancaToString(VRetorno.FStatus));
        end;
       end;
     except
      on e:exception do
       begin
        TimerConsultarPIX.Enabled := false;
        VMsg := 'Ocorreu um erro ao tentar buscar o status de pagamento do PIX.';
        VMsg := VMsg + '- exception: ' + e.message + sLineBreak + '- Status do PIX: ' + PIXStatusCobrancaToString(VRetorno.FStatus);
        if NaoEstaVazio(ACBrPixCD1.PSP.epCob.CobCompleta.AsJSON) then
          VMsg := VMsg + sLineBreak + '- Json retornado: ' + ACBrPixCD1.PSP.epCob.CobCompleta.AsJSON;

        WriteToTXT(VG.FDirTemp + 'logPIX.txt', VMsg, false);
        ChamaErro(VMsg);
       end;
     end;

    Ou tem alguma coisa que estamos fazendo errado (o tempo do timer talvez?), ou, em algum momento o componente se perde e não alimenta a lista do ACBrPixCD1.PSP.epCob.CobCompleta.pix[0], pois a consulta retorna tudo certo no, conforme dá para ver no arquivo logPIX.txt que é gravado e estou anexando aqui.

     Obrigado

    logPIX.txt

  14. Deixe-me se entendi a sugestão e me ajudem colocar isso em um código, por favor.

    no evento ACBrTEFAPI1QuandoPerguntarMenu eu faria:

    - if szPrompt = "DATA 1 PARCELA:" then VIDentificadorGuardadoDataPrimeiraParcela := wIdentificador

    - if szPrompt = "VALOR 1 PARCELA:" then  VIDentificadorGuardadoValorPrimeiraParcela := wIdentificador


    aí, no final da operação faço:
    DataPrimeiraParcela := ACBrTEFAPI1.UltimaRespostaTEF.LeInformacao(VIDentificadorGuardadoDataPrimeiraParcela)
    ValorPrimeiraParcela := ACBrTEFAPI1.UltimaRespostaTEF.LeInformacao(VIDentificadorGuardadoValorPrimeiraParcela)

    Seria isso?

    Obrigado!

  15. 4 horas atrás, EMBarbosa disse:

    Olá Valdir,

    Se você quiser capturar durante a apresentação dos dados, você pode usar os eventos OnObtemCampo e OnExibeMenu.

    É justamente nesse código que os usuários vão informar os dados ao TEF.

    Boa noite,

    Obrigado @EMBarbosa  as acho que você não entendeu bem nossa dúvida/dificuldade.

    Vou tentar explicar melhor.

    Bem, em primeiro lugar, é preciso registrar que, na verdade os eventos que você sugere seriam os QuandoPerguntarCampo e QuandoPerguntarMenu.
    Obs.: estamos falando do TEF PayGo, ok?

    Mas a questão não é onde (quando) pegar esses dados e sim, COMO pegar. Qual a rotina/método usar? 

    Por exemplo, se eu quiser saber a quantidade de parcelas, vou ler:
    ACBrTEFAPI1.UltimaRespostaTEF.LeInformacao(PWINFO_INSTALLMENTS), certo?

    Mas COMO ler, por exemplo, o valor e vencimento da parcela 02 dessa transação que eu mencionei na abertura deste post?

    Os parâmetros PWINFO_INSTALLMDATE e PWINFO_INSTALLM1AMT trazem o vencimento e valor, mas é apenas da entrada (acredito que seja a primeira parcela).
    Mas e as parcelas 2, 3, ...? Como faço para obter seus dados?

    Obs.: eu já havia relatado essa situação no Discord e o @Daniel Simoes me orientou a abrir um post aqui no fórum para uma melhor análise.

    Obrigado

  16. Bom dia,

    Estamos tentando implementar a opção de recebimento no TEF com cartão de débito com mais de 1 parcela.

    Em anexo enviamos os arquivos de log para análise, se necessário.
    A operação realizada e que consta no log foi:
    - Cartão débito
    - 3 parcelas
    - Valor total: R$ 10,00

    Ao iniciar o processamento, o TEF faz as perguntas:
    1) Se a primeira parcela será à vista: foi respondido que não;

    2) Se as parcelas serão iguais: respondido que não;
    Por conta dessa resposta, o TEF pergunta o valor e vencimento de cada parcela. Foi informado assim:
    - Parcela 01: R$ 2,00; vencimento: 05/01/24
    - Parcela 02: R$ 3,00; vencimento: 10/01/24
    - Parcela 03: R$ 5,00; vencimento: 15/01/24

    A questão que não estamos conseguindo fazer é capturar os dados dessas parcelas. 
    Como é uma informação que o operador vai digitar na tela do TEF, precisamos capturar essa lista de parcelas após a operação ser autorizada, para podermos gravar no banco de dados da nossa aplicação.
    Como fazer essa captura?

    Em anexo arquivos de log e também comprovante impresso da transação.

    Obrigado!

    Comprovante.jpg

    comms_231221.log Log21122023.txt ppsers_231221.log

  17. 6 minutos atrás, Alexandre de Paula disse:

    Bom dia @Valdir Dill

    A versão 3.0 foi recém disponibilizada e é muito importante que a comunidade utilize e reporte os problemas para podermos corrigir.

    Obrigado pela informação e assim que tivermos uma atualização a esse respeito informamos aqui. Criamos a TK-4659 para avaliar o caso.

    O procedimento no momento é exatamente o que você realizou, operar com a versão 1.1 até termos uma atualização.

    Obrigado mais uma vez.

    Sim, exatamente essa foi a intenção do post, informar para que a questão seja analisada e, se for o caso, aplicada a correção.

    Obrigado!

    • Curtir 4
    • Obrigado 1
  18. 1 minuto atrás, Daniel InfoCotidiano disse:

    Bom dia @Valdir Dill
    E as dlls 3.0 estão ai na pasta do seu exe?
    Segue os links das dlls
    http://svn.code.sf.net/p/acbr/code/trunk2/DLLs/OpenSSL/3.1.3/

    Sim sim, exatamente por causa das dll estarem na pasta é que o Acbr está carregando elas e, quando as carrega, ocorre o problema.

    Entendo perfeitamente essa questão das .dll openSSL e que o Acbr buscará na pasta do .exe. Já usamos isso há vários anos, rs.

    A questão é simples: com dlls versão 1.1, tudo certo. Com dlls versão 3.0, vai dar esse erro. 

    Acredito que você fizer esse teste aí, vai acontecer o erro também, pois aconteceu com vários usuários nossos. Assim que colocamos as novas dlls na pasta, o problema ocorreu. Voltamos as dlls 1.1, o problema foi sanado.

    Lembrando que só ocorre se usar assim: FAcbrNota.SSL.DadosPFX := ...
    Se alimentar o número de série, ou buscando o .pfx do arquivo, o problema não acontece.

    Obrigado! 

    • Curtir 2
  19. Bom dia,

    Assim como sempre fizemos, estamos alimentando os dados do certificado no componente com uma stream gravada no BD de nossa aplicação.

    Desta forma:
    TBlobField(FDSFiscais.FieldByName('CERT_DADOSPFX')).SaveToStream(VStream);
    FAcbrNota.SSL.DadosPFX := VStream.DataString;

    Sempre funcionou e continua funcionando.

    Porém, com as openSSL versão 3 não funciona.
    Após alimentar os dados no componente e se tenta verificar o CNPJ AcbrNFe1.SSL.CertCNPJ ocorre o erro em anexo.

    Repito: a mesma rotina, mas utilizando as openSSL 1.1, não ocorre nenhum erro. 

     

     

     

    image.png

  20. 5 horas atrás, Daniel InfoCotidiano disse:

    @Valdir Dill
    Bom dia !
    Por favor pode testar com o programa exemplo?
    Como este exemplo é um sistema comum entre nós do ACBr e os clientes, se puder testar por gentileza.
    Assim podemos simular aqui, caso aconteça o mesmo erro nos seus testes.
    Muito Obrigado

    Boa tarde,

    No programa de exemplo não ocorre.

    Vamos investigar melhor o que pode ser.

    Obrigado

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