Ir para conteúdo
  • Cadastre-se

Antonio Gomes

Membros
  • Total de ítens

    644
  • Registro em

  • Última visita

  • Days Won

    1

Posts postados por Antonio Gomes

  1. 58 minutos atrás, ronluis disse:

    Obrigado pelas respostas mas o problema estava relacionao ao tamanho do Nosso Número q dever ser de 8 preechendo com zeros as esquerda ou seja tinha q fica no exemplo: NS: 00388681.

    uma dica que te dou, salva ele sem formatar, para vc evitar esse mesmo problema, se for o campo nosso número,quando voce pegar o nosso numero da caixa, vai entender a bubiça que é, aquele 24 ou 14 no começo do numero.

    repara:

    image.png.dc761e260a4cfb593d0a558b103e7617.png

  2. 7 minutos atrás, Daniel InfoCotidiano disse:

    @jefferson01
    Bom dia !
    Primeiramente obrigado pela contribuição.
    Estava falando com o time de boleto e como padrão de autenticação OAuth ele só gera outro token caso necessário automaticamente.
    Poderia detalhar melhor por favor a necessidade de salvar no banco por exemplo, igual citado no post acima.
    Obrigado

    Uai, suspeito que seja pelo tempo que ele pede, vc nao pode gerar outro token, se o anterior tiver valido, mas apenas usar, contar o tempo em minutos.

    Senao eles poem a gente na geladeira: olha:

    Obter token oAuth

    A autenticação OAuth é a mais recente forma de autenticar os novos serviços disponibilizados pelo Inter. O Token gerado será necessário para consumir as APIs do Inter.

    • O tempo de vida de um token gerado é de uma hora. Com isso, é possível realizar um número determinado de requisições nas apis, de acordo com o rate limit de cada api, utilizando um único token.
    • Rate limit: 5 chamadas por minuto

    fonte: https://developers.bancointer.com.br/reference/token-1

     

  3. voce quer carregar essas opções? toRemessaRegistrar, toRemessaBaixar etc.

     case ARem_Ocorrencia_Remban of
        0: ATituloNaLista.OcorrenciaOriginal.Tipo := toRemessaRegistrar;
        1: ATituloNaLista.OcorrenciaOriginal.Tipo := toRemessaBaixar;
        2: ATituloNaLista.OcorrenciaOriginal.Tipo := toRemessaConcederAbatimento;
        3: ATituloNaLista.OcorrenciaOriginal.Tipo := toRemessaCancelarAbatimento;
        4: ATituloNaLista.OcorrenciaOriginal.Tipo := toRemessaAlterarVencimento;
        5: ATituloNaLista.OcorrenciaOriginal.Tipo := toRemessaAlterarNumeroControle;
        6: ATituloNaLista.OcorrenciaOriginal.Tipo := toRemessaProtestar;
        7: ATituloNaLista.OcorrenciaOriginal.Tipo := toRemessaCancelarInstrucaoProtestoBaixa;
        8: ATituloNaLista.OcorrenciaOriginal.Tipo := toRemessaCancelarInstrucaoProtesto;
        9: ATituloNaLista.OcorrenciaOriginal.Tipo := toRemessaOutrasAlteracoes;
      else
        Raise Exception.Create('Código de ocorrência: ' + aRem_Ocorrencia_Remban.ToString + ' inválida.');
      end;

    Essa lista vc pega ela assim  Acbrboleto1.GetOcorrenciasRemessa() : TACBrOcorrenciasRemessa;

    A ocorrencia varia de acordo com o banco sim, voce deve tomar uma atitude/ação, de acordo com o codigo do retorno que vem, no caso, para baixar, vem 05 ou 06 vem em ListadeBoletos[X].OcorrenciaOriginal.Tipo

    • Curtir 1
  4. Campo livre do santander: O erro parece ser o codigo do cedente... tem banco que não é o numero da conta, mas o cedente na cip


        Result := '9'
                   + PadLeft(trim(Cedente.CodigoCedente),7,'0')
                   + PadLeft(ACBrTitulo.NossoNumero + CalcularDigitoVerificador(ACBrTitulo), 13,'0')
                   + '0'
                   + PadLeft(trim(Cedente.Modalidade),3,'0');
    E para voce fazer a impressao do mesmo boleto, é preciso ter o mesmo numero do campo nosso numero.

  5. 3 minutos atrás, jefferson01 disse:

    Seguindo a sugestão do @Antonio Gomes, fiz alteração nos fontes criando 2 propriedades no TACBrWebService, que são Token e Expire. Ao gerar o Token eu armazeno as informações nessas novas propriedades com isso consigo gerar um novo token apenas se já tiver expirado ou se não existir um token gerado.

    Segue os fontes para analise. Já fiz testes em produção e funcionou corretamente enviando vários boletos(mais de 5) por fez.

    Att. Jefferson

    ACBrBoleto.zip 48.57 kB · 0 downloads

    Eu salvo o meu no banco de dados, e se caso o operador sair do sistema, fica gravado os dados do token, para nao precisar processar de novo, a cada boleto, é verificado o tempo. Pois ele é fixo, o retorno do inter ja vem com o tempo somado, bom, era assim...

    Tipo, entra o comando no endpoint as 15hs, vem que ele vale ate 16hs

  6. 10 horas atrás, Luiz Carlos Panoni Junior disse:

    Ola Antonio, sempre ajudando por aqui hein... obrigado, mais no caso estou usando o componente do ACBR precisa ver onde ele faz a requisição do Token, vou tentar debugar o codigo para entender, pois pelo que vi na documentação, o token é valido por 1 hora.

     

     

    Código HTTP 401 - Token inválido

    Você precisa adicionar o Bearer token OAuth que foi gerado em Como gerar um token OAuth?. Caso já esteja adicionado, este token provavelmente expirou (validade de 1h) e é necessário emitir um novo.

    o meu tem uma falha ali, ao salvar o valor do tokentime.

    a proposito, no acbr, é aqui que valida o token

     

    function TBoletoW_Inter_API.GerarTokenAutenticacao: string;
    begin
      OAuth.Payload := True;
      Result := inherited GerarTokenAutenticacao;
    end;

    Na funcao: GerarTokenAutenticacao chama a funcao da boletaws base dessa derivacao:   TBoletoW_Inter_API = class(TBoletoWSREST)

    o tempo de validade, vem no retorno do 

     if OAuth.GerarToken then
          Result := OAuth.Token

    para mim, o tempo deve ser aqui:  property Expire          : TDateTime        read FExpire; na unit ACBrBoletoWS.Rest.OAuth

    Sempre que posso ajudo ...

  7. tem que colocar no cadastro da sua conta corrente, um campo campo com data e hora

    Ex: pega no cadastro de conta:

            Clear;
              Add('select ');
              Add('    CONTA_CORRENTE_SERV_BANCARIO.CODIGO_SER');
              Add('   ,CONTA_CORRENTE_SERV_BANCARIO.CLIENT_ID_SER');
              Add('   ,CONTA_CORRENTE_SERV_BANCARIO.CLIENT_SECRET_SER');
              Add('   ,CONTA_CORRENTE_SERV_BANCARIO.SESSAO_TOKEN_SER');
              Add('   ,CONTA_CORRENTE_SERV_BANCARIO.SESSAO_TOKEN_DATA_HORA_SER');
              Add('   ,CONTA_CORRENTE_SERV_BANCARIO.SESSAO_TOKEN_VALIDADE_SER');
              Add('   ,CONTA_CORRENTE_SERV_BANCARIO.NOME_CRT_SER');
              Add('   ,CONTA_CORRENTE_SERV_BANCARIO.CRT_SER');
              Add('   ,CONTA_CORRENTE_SERV_BANCARIO.NOME_KEY_SER');
              Add('   ,CONTA_CORRENTE_SERV_BANCARIO.KEY_SER');
              Add('   ,CONTA_CORRENTE_SERV_BANCARIO.NOME_PFX_SER');
              Add('   ,CONTA_CORRENTE_SERV_BANCARIO.PFX_SER');

              // SENHA_CRT_KEY_SER
              Add('from CONTA_CORRENTE_SERV_BANCARIO');
              Add('where CONTA_CORRENTE_SERV_BANCARIO.CODIGO_SER = ' + AServicoBancario.ToString);

              TFuncoesBancoDeDados.ExecuteReaderFD(Text, ATransacao, FDS);
            finally
              DisposeOf;
            end;

          AToken       := FDS.FieldByName('SESSAO_TOKEN_SER').AsString;
          ATokenTime   := FDS.FieldByName('SESSAO_TOKEN_VALIDADE_SER').AsDateTime;
          ClientId     := FDS.FieldByName('CLIENT_ID_SER').AsString;
          ClientSecret := FDS.FieldByName('CLIENT_SECRET_SER').AsString;

     

     // venceu ou nao tem
      if (AToken = '') or (ATokenTime <= Now) then
      begin
        HoraTmp := Now;

        Inter := TBancoInter.Create(nil);
        try

          Inter.ClientId     := ClientId;
          Inter.ClientSecret := ClientSecret;
          Inter.CertFile     := CrtTmp;
          Inter.KeyFile      := KeyTmp;

          Inter.GetToken;

          AToken     := Inter.Token;
          ATokenTime := Inter.TokenTime;

          if AToken <> '' then
          begin
            with TStringList.Create do
              try
                Clear;
                Add('update CONTA_CORRENTE_SERV_BANCARIO set');
                Add('       CONTA_CORRENTE_SERV_BANCARIO.SESSAO_TOKEN_SER           = ' + QuotedStr(AToken));
                Add('      ,CONTA_CORRENTE_SERV_BANCARIO.SESSAO_TOKEN_DATA_HORA_SER = ' + TFuncoesSQL.DataHoraSQL(HoraTmp));
                Add('      ,CONTA_CORRENTE_SERV_BANCARIO.SESSAO_TOKEN_VALIDADE_SER  = ' + TFuncoesSQL.DataHoraSQL(HoraTmp));
                Add('where CONTA_CORRENTE_SERV_BANCARIO.CODIGO_SER = ' + AServicoBancario.ToString);

                TFuncoesBancoDeDados.ExecuteCommand(Text, ATransacao);
              finally
                DisposeOf;
              end;
          end;
        finally
          Inter.DisposeOf;
        end;
      end;

  8. 20 horas atrás, Paulo Henchs disse:

    Boa tarde Pessoal, tudo bem ? alguem pode me ajudar.
    fiz uma atualização do acbr e agora nao funciona mais o retorno bancario acontece o erro da foto
    mudou algo ? os dados estão certo pois se eu pegar uma versão antiga ele funciona.

    retornosantander.jpg

    Então:

    Tem um caso, que vc precisa limpar e tem um caso que precisa colocar dados do cedente no objeto, olha onde é isso

    function TACBrBancoClass.ValidarDadosRetorno(const AAgencia, AContaCedente: String; const ACNPJCPF: String= '';
       const AValidaCodCedente: Boolean= False 😞 Boolean;
    begin
      try
        With ACBrBanco.ACBrBoleto do
        begin
          if NaoEstaVazio(ACNPJCPF) then
            if (not LeCedenteRetorno) and (ACNPJCPF <> OnlyNumber(Cedente.CNPJCPF)) then
              raise Exception.CreateFmt(ACBrStr('CNPJ\CPF: %s do arquivo não corresponde aos dados do Cedente!'), [ACNPJCPF]);
     

    Logo que começa ler o retorno, é feito isso:

      rCNPJCPF         := DefinerCnpjCPFRetorno240(ARetorno[0]);  // primeira linha do retorno

    function TACBrBancoClass.DefinerCnpjCPFRetorno240(const ALinha: String): String;
    begin
      Result := OnlyNumber( copy(ALinha, 19, 14) );
    end;
    ValidarDadosRetorno('', '', rCNPJCPF);

    Quando LeCedenteRetorno for false, é comparado com os dados que voce colocou no cedente do componente, isso ja tem bastante tempo que é assim.

    Sugestão, colocar ele True, se vc nao quer alimentar antes o objeto acbrboleto

    Ex: como eu uso:

     

       FuncBoleto.ACBrBoleto.LeCedenteRetorno := true; // problema do sicoob 756

              FuncBoleto.ACBrBoleto.Cedente.Conta := '0'; // Ocultar erro do ACBr

              FuncBoleto.ACBrBoleto.LerRetorno(ArquivoDeRetorno);
     

    Porem, eu uso o objeto para ler, e eu acho a conta no meu sistema, tem casos, que a pessoa lê, com a conta ja selecionada na tela, ou seja, o erro ali, pode ser isso, vc passou uma informacao, e leu outra.

    • Obrigado 1
  9. 17 horas atrás, Luiz Carlos Panoni Junior disse:

    Você montou pelo acbrboleto com o retorno do Inter ?, pode exemplificar por favor ?

    respondi no privado, para não me encherem o saco aqui ... prints.

    17 horas atrás, Luiz Carlos Panoni Junior disse:

    Você montou pelo acbrboleto com o retorno do Inter ?, pode exemplificar por favor ?

    Esqueci de mencionar, mesmo com emissao via acbr dá para montar, no meu caso, é boleto via api. Nem sei por onde passa essa de mandar retorno desse banco, coloquei  o cliente usar via api, é mais prático.

  10. ou fi, isso dai, é quando vc envia remessa, quitado, vem como 06 se nao me engano, vem como liquidacao normal.

    o banco manda isso, se caso vc quiser processar algo no seu bordero de retorno bancario... 

    tem casos, que quando é banco emite, vc precisa gravar o campo nosso numero, pois é o banco quem gera, dá uma olhada nos codigos de retornos, para entender legal isso.

  11. 48 minutos atrás, valterpatrick disse:

    Se eu apenas colocar o arquivo "\\ACBr\Fontes\ACBrDFe\ACBrNFe\ACBrNFeServicos.ini" na pasta do executável do cliente já resolveria ou teria que atualizar o ACBr todo?

    sim, vc muda a url.

    Acontece que eu não sou de mandar isso, para evitar fadiga, mas, ja vou criar uma rotina para deletar ele da pasta, quando o programa for atualizado com a versao certa.

     

  12. MG: Produção: Até dia 21/09, a url de consulta estava 

    URL-ConsultaNFCe_2.00=http://nfce.fazenda.mg.gov.br/portalnfce

    A partir desse dia, está gerando a rejeição, a url foi alterada para 

    <urlChave>https://portalsped.fazenda.mg.gov.br/portalnfce</urlChave>

     

    Isso vai ser mudado mesmo ou trocaram por engano, a do QR code está correta.

    Até dia 21/09

    <infNFeSupl>
                <qrCode>https://portalsped.fazenda.mg.gov.br/portalnfce/sistema/qrcode.xhtml?p=</qrCode>
                <urlChave>http://nfce.fazenda.mg.gov.br/portalnfce</urlChave>
            </infNFeSupl>

    Apos 21/09

    <infNFeSupl>
              <qrCode>https://portalsped.fazenda.mg.gov.br/portalnfce/sistema/qrcode.xhtml?p=</qrCode>
              <urlChave>https://portalsped.fazenda.mg.gov.br/portalnfce</urlChave>
            </infNFeSupl>

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