Ir para conteúdo
  • Cadastre-se

BrunoD

Membros
  • Total de ítens

    13
  • Registro em

  • Última visita

Últimos Visitantes

O bloco dos últimos visitantes está desativado e não está sendo visualizado por outros usuários.

BrunoD's Achievements

Apprentice

Apprentice (3/14)

  • Reacting Well Rare
  • Dedicated Rare
  • First Post
  • Collaborator Rare
  • Conversation Starter

Recent Badges

1

Reputação

  1. Olá, Aparentemente o Itaú não está respondendo como deveria as requisições de consulta detalhe de um titulo. Apesar de retornar status code 200, o retorno traz o campo data, onde deveria existir os dados do boleto, em branco. { "data" : [ ], "page" : { "links" : { "first" : "/prod/boletoscash/v2/boletos?codigo_carteira=109&id_beneficiario=167500488074&nosso_numero=00006829&view=specific&page_size=20&page=0&order_by=data_vencimento&order=ASC", "last" : "/prod/boletoscash/v2/boletos?codigo_carteira=109&id_beneficiario=167500488074&nosso_numero=00006829&view=specific&page_size=20&page=0&order_by=data_vencimento&order=ASC", "previous" : "/prod/boletoscash/v2/boletos?codigo_carteira=109&id_beneficiario=167500488074&nosso_numero=00006829&view=specific&page_size=20&page=0&order_by=data_vencimento&order=ASC", "next" : "/prod/boletoscash/v2/boletos?codigo_carteira=109&id_beneficiario=167500488074&nosso_numero=00006829&view=specific&page_size=20&page=0&order_by=data_vencimento&order=ASC" }, "page" : 0, "total_pages" : 0, "total_elements" : 0, "page_size" : 20 } } Mais alguém passando por este problema?
  2. Ao adicionar uma Instrução de Cobrança em um título gerado para Api V2 do Itáu o campo quantidade de dias é gerado de acordo com o parâmetro IndicadorPix. if Boleto.Cedente.CedenteWS.IndicadorPix then LJsonDados.AddPair('quantidade_dias_apos_vencimento', Copy(trim((ATitulo.Instrucao1)), 3, 2)) else LJsonDados.AddPair('quantidade_dias_instrucao_cobranca', Copy(trim((ATitulo.Instrucao1)), 3, 2)); Gerando uma rejeição: { "codigo" : "422", "mensagem" : "Erro na validação de Campos", "campos" : [ { "campo" : "data.dado_boleto.instrucao_cobranca[0].quantidade_dias_apos_vencimento", "mensagem" : "Para instrução de baixa deve ser informada a quantidade de dias", "valor" : "" } ] } Ao analisar o payload disponibilizado no Portal do desenvolvedor Itáu para emissão de boletos - Não é Bolecode. O nome do campo deve ser quantidade_dias_apos_vencimento, ou seja o mesmo para quando é Bolecode. { "data": { "etapa_processo_boleto": "efetivacao", "codigo_canal_operacao": "API", "beneficiario": { "id_beneficiario": "id_beneficiario" }, "dado_boleto": { "descricao_instrumento_cobranca": "boleto", "forma_envio": "email", "texto_endereco_email": "[email protected]", "assunto_email": "Assunto do e-mail", "mensagem_email": "Texto para enviar ao cliente", "tipo_boleto": "a vista", "codigo_carteira": "109", "valor_titulo": "00000000000001000", "codigo_especie": "01", "valor_abatimento": "000", "data_emissao": "2022-12-21", "pagamento_parcial": true, "quantidade_maximo_parcial": 2, "pagador": { "pessoa": { "nome_pessoa": "Pessoa teste", "tipo_pessoa": { "codigo_tipo_pessoa": "F", "numero_cadastro_pessoa_fisica": "cpf_cnpj_pagador" } }, "endereco": { "nome_logradouro": "Rua endereço,71", "nome_bairro": "Bairro", "nome_cidade": "Cidade", "sigla_UF": "PE", "numero_CEP": "51340540" } }, "dados_individuais_boleto": [ { "numero_nosso_numero": "20000000", "data_vencimento": "2023-01-14", "valor_titulo": "00000000000119900", "texto_uso_beneficiario": "2", "texto_seu_numero": "2" } ], "multa": { "codigo_tipo_multa": "02", "data_multa": "2024-09-21", "percentual_multa": "000000100000" }, "juros": { "codigo_tipo_juros": 90, "data_juros": "2024-09-21", "percentual_juros": "000000100000" }, "recebimento_divergente": { "codigo_tipo_autorizacao": "01" }, "instrucao_cobranca": [ { "codigo_instrucao_cobranca": "2", "quantidade_dias_apos_vencimento": 10, "dia_util": false } ], "protesto": { "protesto": true, "quantidade_dias_protesto": 10 }, "desconto_expresso": false } } } Havia também um erro que todos as Instruções utilizavam LJsonDados quando deveriam utilizar LJsonDados2 e LJsonDados3, em anexo a Unit corrigida. ACBrBoletoW_Itau_API.pas
  3. BrunoD

    Boleto Itau WebService

    Bom dia, Na última atualização do ACBr, começamos a ter problemas para emissão de boletos via WebServices do Banco Itaú. O campo de CPF/CNPJ tinha uma formatação para 11 caracteres, o que fazia "cortar" quando o documento era CNPJ. procedure TBoletoW_Itau.GerarPagador(AJson: TJsonObject); var JsonDadosPagador: TJsonObject; JsonPairPagador: TJsonPair; begin if Assigned(Titulos) then with Titulos do begin if Assigned(AJson) then begin JsonDadosPagador := TJSONObject.Create; try JsonDadosPagador.Add('cpf_cnpj_pagador').Value.AsString := OnlyNumber(Sacado.CNPJCPF);//ACBrUtil.PadLeft(OnlyNumber(Sacado.CNPJCPF), 11, '0'); JsonDadosPagador.Add('nome_pagador').Value.AsString := Copy(Sacado.NomeSacado, 1, 30); JsonDadosPagador.Add('logradouro_pagador').Value.AsString := Trim(Copy(Sacado.Logradouro + ' ' + Sacado.Numero, 1, 40)); JsonDadosPagador.Add('bairro_pagador').Value.AsString := Copy(Sacado.Bairro, 1, 15); JsonDadosPagador.Add('cidade_pagador').Value.AsString := Copy(Sacado.Cidade, 1, 20); JsonDadosPagador.Add('uf_pagador').Value.AsString := Sacado.UF; JsonDadosPagador.Add('cep_pagador').Value.AsString := ACBrUtil.PadLeft(OnlyNumber(Sacado.CEP), 8, '0'); if (Sacado.Email <> '') then GerarEmailPagador(JsonDadosPagador); JsonPairPagador := TJsonPair.Create(AJson, 'pagador'); try JsonPairPagador.Value.AsObject := JsonDadosPagador; AJson.Add('pagador').Assign(JsonPairPagador); finally JsonPairPagador.Free; end; finally JsonDadosPagador.Free; end; end; end; end
  4. Bom dia @José M. S. Junior, Certo, então vou considerar as correções efetuadas como corretas. Achei outras possíveis correções a Unit ACBrBoletoW_Itau. Neste trecho da procedure RequisicaoJson. Json.Add('nosso_numero').Value.AsString := Copy(NossoNumero, 1, Length(NossoNumero) - 1); Json.Add('digito_verificador_nosso_numero').Value.AsString := Copy(NossoNumero, Length(NossoNumero) - 1, 1); Estava retornando erro no dígito verificador do nosso número e o próprio nosso número ia incompleto na requisição. Então realizei a seguinte alteração: Json.Add('nosso_numero').Value.AsString := NossoNumero; Json.Add('digito_verificador_nosso_numero').Value.AsString := ACBrBoleto.Banco.CalcularDigitoVerificador(Titulos); Na unit ACBrBoletoRet_Itau também foram aplicadas mudanças. Neste trecho da procedure LerRetorno. if not(SucessResponse) then O variável SucessResponse é inicializado como false, e nunca é alterada, mesmo a requisição sendo processada corretamente. A solução básica que encontrei foi verificar se no Json de retorno existe algum código de erro. Caso contrário lê as informações do retorno do JSON. if (AJson.Values['codigo'].AsString <> '') then LerErrosJSON else LerJSONSucesso Ao aplicar a correção acima ocorreram erros de acess violation na Classe TTituloRet que está dentro de ACBrBoletoRetorno. Os campos: FMensagem: TStrings; FInformativo: TStrings; FInstrucoes: TStrings; Não estavam sendo instanciados no Construtor da Classe: constructor TTituloRet.Create; begin FSacadoAvalista := TSacadoAvalistaRet.Create; FSacado := TSacadoRet.Create; end; Ficou assim: constructor TTituloRet.Create; begin FSacadoAvalista := TSacadoAvalistaRet.Create; FSacado := TSacadoRet.Create; FMensagem := TStringList.Create; FInformativo := TStringList.Create; FInstrucoes := TStringList.Create; end; As mesmas alterações foram também adicionadas ao Destroy da Classe: destructor TTituloRet.Destroy; begin FSacadoAvalista.Free; FSacado.Free; FMensagem.Free; FInformativo.Free; FInstrucoes.Free; inherited Destroy; end; Após essas alterações a leitura de um retorno de sucesso estão sendo lidas corretamente.
  5. Boa tarde @José M. S. Junior, Possíveis correções a Unit ACBrBoletoW_Itau. Referente a procedure GerarMulta. if DataMulta > 0 then begin JsonMulta.Add('data_multa').Value.AsString := FormatDateTime('yyyy-mm-dd', DataMulta); if MultaValorFixo then JsonMulta.Add('percentual_multa').Value.AsString := IntToStrZero(round(ValorMoraJuros * 100), 17) else JsonMulta.Add('percentual_multa').Value.AsString := IntToStrZero(round(ValorMoraJuros * 100000), 12); end; Fiz a seguinte alteração: if DataMulta > 0 then begin JsonMulta.Add('data_multa').Value.AsString := FormatDateTime('yyyy-mm-dd', DataMulta); if MultaValorFixo then JsonMulta.Add('valor_multa').Value.AsString := IntToStrZero(round(PercentualMulta), 17) else JsonMulta.Add('percentual_multa').Value.AsString := IntToStrZero(round(PercentualMulta * 100000), 12); end; Fiquei em dúvida se o campo PercentualMulta é o mesmo quando utiliza percentual e valor.
  6. Boa tarde José, Com as alterações efetuadas o registro ocorreu com sucesso. Vou continuar o processo de homologação qualquer novidade posto aqui.
  7. BrunoD

    Ajustes ACBrBoletoW_Itau

    Olá, Estou realizando a homologação com o Banco Itaú via API. E gostaria de compartilhar alguns ajustes que estão sendo necessários. Erro - conta cedente invalida - Segundo o manual a conta do cedente deve possuir 7 dígitos, caso o tamanho do número da conta utilizada for menor que 7 deve completar com zeros a esquerda utilizada a função PadLeft da ACBrUtil. A API retorna erros de validação na seção Sacador Avalista mesmo não sendo informado nenhum sacador avalista no componente - a seção sacador avalista do JSON só deve ser gerada caso exista um sacador avalista no componente - segundo o manual esta seção é opcional. A API retorna erros de validação na seção Debito - Aplicada a mesma correção do item anterior. Na seção Recebimento Divergente o índice do componente começa com zero e o da API começa com 1. Segue em anexo unit ACBrBoletoW_Itau com ajustes realizados. ACBrBoletoW_Itau.pas
  8. Caro amigo, após realizar alguns testes percebi que: O processo sugerido por você funciona somente se a tag ProtNFe não exista no XML. Quando tento o procedimento de Gerar, Assinar e Validar com um XML que tenha as tags ProtNFe (a tag foi adicionada ao realizar uma consulta) dá o erro mencionado anteriormente.
  9. Desculpe pela demora em responder, Mas realizei os testes com a versão atualizada do ACBr e acontece o mesmo erro. Ao chamar o método assinar gera a exception conforme imagem anexada anteriormente. Se tiver mais alguma sugestão eu agradeço.
  10. Segue uma imagem de onde o erro ocorre.
  11. Fiz os devidos testes hoje como foi sugerido, e Infelizmente não funcionou, quando tento chamar o Assinar ocorre um erro: Erro ao carregar o XML.
  12. Obrigado pela ajuda BigWings.
  13. Prezados, Preciso de ajuda para adicionar as tags <infNFeSupl> <qrCode> no XML já gerado e enviado. Algumas notas emitidas em contigência, ao enviar não foi atualizado o XML no banco de dados, agora o contador precisa importar os XMLs e não consegue por conta das tags faltando. Segue XML em anexo. 15170816965024000115650010000876129000876122-nfe.xml
×
×
  • 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...