Ir para conteúdo
  • Cadastre-se

WashingtonFelipe

Membros
  • Total de ítens

    15
  • Registro em

  • Última visita

Últimos Visitantes

624 visualizações

WashingtonFelipe's Achievements

  1. Boa tarde, Sim, tive que realizar algumas alterações na unit ACBrBancoItau.pas para que funcionasse o boleCode por arquivo de remessa. ACBrBancoItau.pas
  2. Bom dia, Recentemente, finalizei a homologação com o Itau em relação ao BoleCode por envio de arquivo de remessa. Aonde é gerada uma location (Vazia) e passo essa location no arquivo de remessa e o banco faz o registro. Abaixo o link aonde fiz a implementação da location vazia. Ao iniciar a homologação do arquivo de remessa, tive que fazer algumas mudanças. Segundo o pessoal do banco, existia 3 situações. 1° Posição da Identificação do registro bolecode estava após a identificação 5 e ela tem que ser antes, pois é a 3. 2° Quando vai enviar a location no arquivo de remessa não pode enviar a chave PIX. 3° A Posição aonde gera a location, tem que utilizar 100% de sua posição, completando com zeros a esquerda. Exemplo: Location é 123 Então tem que ficar 000000123(Colocando zeros a esquerda até a utilização total do campo). Porem, essa situação tratei direto em meu sistema ou seja, ele que vai gerar os zeros a esquerda e enviar para o arquivo de remessa já com os zeros. Abaixo uma imagem de como é hoje. Abaixo com as mudanças que realizei Abaixo o código completo e em anexo a unit alterada. procedure TACBrBancoItau.GerarRegistroTransacao400( ACBrTitulo: TACBrTitulo; aRemessa: TStringList); var ATipoCedente, ATipoSacado, ATipoSacadoAvalista, ATipoOcorrencia :String; ADataMoraJuros, ADataDesconto, ATipoAceite :String; ATipoEspecieDoc, ANossoNumero,wLinha,wCarteira :String; wLinhaMulta,LCPFCNPJBeneciciario :String; iSequencia : integer; begin with ACBrTitulo do begin {Tipo de Ocorrencia} ATipoOcorrencia := TipoOcorrenciaToCodRemessa(ACBrTitulo.OcorrenciaOriginal.Tipo); {Aceite do Titulo } ATipoAceite := DefineAceite(ACBrTitulo); {Especie Documento} ATipoEspecieDoc := DefineEspecieDoc(ACBrTitulo); {Data Mora} ADataMoraJuros := DefineDataMoraJuros(ACBrTitulo, 'ddmmyy'); {Descontos} ADataDesconto := DefineDataDesconto(ACBrTitulo, 'ddmmyy'); {Pegando Tipo de Cedente} ATipoCedente := DefineTipoBeneficiario(ACBrTitulo); if (StrToIntDef(ATipoCedente,0) in [3..4]) then LCPFCNPJBeneciciario := OnlyNumber(ACBrTitulo.Sacado.SacadoAvalista.CNPJCPF) else LCPFCNPJBeneciciario := ACBrBoleto.Cedente.CNPJCPF; {Pegando Tipo de Sacado} ATipoSacado:= DefineTipoSacado(ACBrTitulo); {Pegando Tipo de Sacado Avalista} ATipoSacadoAvalista := DefineTipoSacadoAvalista(ACBrTitulo); {Pegando campo Intruções conforme código protesto} InstrucoesProtesto(ACBrTitulo); DefineDataProtestoNegativacao(ACBrTitulo); with ACBrBoleto do begin wCarteira:= Trim(Carteira); {Cobrança sem registro com opção de envio de arquivo remessa} if (wCarteira = '102') or (wCarteira = '103') or (wCarteira = '107') or (wCarteira = '172') or (wCarteira = '173') or (wCarteira = '196') then begin ANossoNumero := MontarCampoNossoNumero(ACBrTitulo); wLinha:= '6' + // 6 - FIXO '1' + // 1 - FIXO PadLeft(OnlyNumber(Cedente.Agencia), 4, '0') + // AGÊNCIA MANTENEDORA DA CONTA '00' + // COMPLEMENTO DE REGISTRO PadLeft(OnlyNumber(Cedente.Conta), 5, '0') + // NÚMERO DA CONTA CORRENTE DA EMPRESA PadRight(Cedente.ContaDigito, 1) + // DÍGITO DE AUTO CONFERÊNCIA AG/CONTA EMPRESA PadLeft(Carteira,3,' ') + // NÚMERO DA CARTEIRA NO BANCO PadLeft(NossoNumero, 8, '0') + // IDENTIFICAÇÃO DO TÍTULO NO BANCO Copy(ANossoNumero, Length(ANossoNumero), 1) + // DAC DO NOSSO NÚMERO '0' + // 0 - R$ PadRight('R$', 4, ' ') + // LITERAL DE MOEDA IntToStrZero( round( ValorDocumento * 100), 13) + // VALOR NOMINAL DO TÍTULO PadRight(SeuNumero, 10, ' ') + // IDENTIFICAÇÃO DO TÍTULO NA EMPRESA FormatDateTime('ddmmyy', Vencimento) + // DATA DE VENCIMENTO DO TÍTULO PadLeft(ATipoEspecieDoc, 2, '0') + // ESPÉCIE DO TÍTULO ATipoAceite + // IDENTIFICAÇÃO DE TITILO ACEITO OU NÃO ACEITO FormatDateTime('ddmmyy', DataDocumento) + // DATA DE EMISSÃO {Dados do sacado} PadLeft(ATipoSacado, 2, '0') + // IDENTIFICAÇÃO DO TIPO DE INSCRIÇÃO/SACADO PadLeft(OnlyNumber(Sacado.CNPJCPF), 15, '0') + // Nº DE INSCRIÇÃO DO SACADO (CPF/CGC) PadRight(Sacado.NomeSacado, 30, ' ') + // NOME DO SACADO space(9) + // BRANCOS(COMPLEMENTO DE REGISTRO) PadRight(Sacado.Logradouro + ' ' + Sacado.Numero + ' ' + Sacado.Complemento , 40, ' ') + // RUA, NÚMERO E COMPLEMENTO DO SACADO PadRight(Sacado.Bairro, 12, ' ') + // BAIRRO DO SACADO PadLeft(OnlyNumber(Sacado.CEP), 8, '0') + // CEP DO SACADO PadRight(Sacado.Cidade, 15, ' ') + // CIDADE DO SACADO PadRight(Sacado.UF, 2, ' ') + // UF DO SACADO {Dados do sacador/avalista} PadRight(Sacado.SacadoAvalista.NomeAvalista, 30, ' ') + // NOME DO SACADOR/AVALISTA space(4) + // COMPLEMENTO DO REGISTRO PadRight(TiraAcentos(LocalPagamento), 55, ' ') + // LOCAL PAGAMENTO PadRight(' ', 55, ' ') + // LOCAL PAGAMENTO 2 '01' + // IDENTIF. TIPO DE INSCRIÇÃO DO SACADOR/AVALISTA PadRight(Sacado.SacadoAvalista.CNPJCPF, 15, '0') + // NÚMERO DE INSCRIÇÃO DO SACADOR/AVALISTA space(31) + // COMPLEMENTO DO REGISTRO IntToStrZero(aRemessa.Count + 1 , 6); // Nº SEQÜENCIAL DO REGISTRO NO ARQUIVO aRemessa.Add(UpperCase(wLinha)); wLinha := MontaInstrucoesCNAB400(ACBrTitulo, aRemessa.Count ); if not(wLinha = EmptyStr) then aRemessa.Add(UpperCase(wLinha)); //Result := DoMontaInstrucoes2(Result); // opcional end else {Carteira com registro} begin wLinha:= '1' + // 1 a 1 - IDENTIFICAÇÃO DO REGISTRO TRANSAÇÃO PadLeft(ATipoCedente,2,'0') + // TIPO DE INSCRIÇÃO DA EMPRESA PadLeft(OnlyNumber(LCPFCNPJBeneciciario),14,'0') + // Nº DE INSCRIÇÃO DA EMPRESA (CPF/CGC) PadLeft(OnlyNumber(Cedente.Agencia), 4, '0') + // AGÊNCIA MANTENEDORA DA CONTA '00' + // COMPLEMENTO DE REGISTRO PadLeft(OnlyNumber(Cedente.Conta), 5, '0') + // NÚMERO DA CONTA CORRENTE DA EMPRESA PadRight(Cedente.ContaDigito, 1) + // DÍGITO DE AUTO CONFERÊNCIA AG/CONTA EMPRESA space(4) + // COMPLEMENTO DE REGISTRO '0000' + // CÓD.INSTRUÇÃO/ALEGAÇÃO A SER CANCELADA PadRight(SeuNumero, 25, ' ') + // IDENTIFICAÇÃO DO TÍTULO NA EMPRESA PadLeft(NossoNumero, 8, '0') + // IDENTIFICAÇÃO DO TÍTULO NO BANCO '0000000000000' + // QUANTIDADE DE MOEDA VARIÁVEL PadLeft(Carteira,3,' ') + // NÚMERO DA CARTEIRA NO BANCO space(21) + // IDENTIFICAÇÃO DA OPERAÇÃO NO BANCO 'I' + // CÓDIGO DA CARTEIRA ATipoOcorrencia + // IDENTIFICAÇÃO DA OCORRÊNCIA PadRight(NumeroDocumento, 10, ' ') + // Nº DO DOCUMENTO DE COBRANÇA (DUPL.,NP ETC.) FormatDateTime('ddmmyy', Vencimento) + // DATA DE VENCIMENTO DO TÍTULO IntToStrZero( round( ValorDocumento * 100), 13) + // VALOR NOMINAL DO TÍTULO IntToStrZero(ACBrBanco.Numero, 3) + // Nº DO BANCO NA CÂMARA DE COMPENSAÇÃO '00000' + // AGÊNCIA ONDE O TÍTULO SERÁ COBRADO PadLeft(ATipoEspecieDoc, 2, '0') + // ESPÉCIE DO TÍTULO ATipoAceite + // IDENTIFICAÇÃO DE TITILO ACEITO OU NÃO ACEITO FormatDateTime('ddmmyy', DataDocumento) + // DATA DA EMISSÃO DO TÍTULO PadLeft(trim(ACBrStr(Instrucao1)), 2, '0') + // 1ª INSTRUÇÃO PadLeft(trim(ACBrStr(Instrucao2)), 2, '0') + // 2ª INSTRUÇÃO IntToStrZero( round(ValorMoraJuros * 100 ), 13) + // VALOR DE MORA POR DIA DE ATRASO ADataDesconto + // DATA LIMITE PARA CONCESSÃO DE DESCONTO IfThen(ValorDesconto > 0, IntToStrZero( round(ValorDesconto * 100), 13), PadLeft('', 13, '0')) + // VALOR DO DESCONTO A SER CONCEDIDO IntToStrZero( round(ValorIOF * 100), 13) + // VALOR DO I.O.F. RECOLHIDO P/ NOTAS SEGURO IntToStrZero( round(ValorAbatimento * 100), 13) + // VALOR DO ABATIMENTO A SER CONCEDIDO {Dados do sacado} PadLeft(ATipoSacado, 2, '0') + // IDENTIFICAÇÃO DO TIPO DE INSCRIÇÃO/SACADO PadLeft(OnlyNumber(Sacado.CNPJCPF), 14, '0') + // Nº DE INSCRIÇÃO DO SACADO (CPF/CGC) PadRight(Sacado.NomeSacado, 30, ' ') + // NOME DO SACADO space(10) + // BRANCOS(COMPLEMENTO DE REGISTRO) PadRight(Sacado.Logradouro + ' '+ Sacado.Numero + ' ' + Sacado.Complemento , 40, ' ') + // RUA, NÚMERO E COMPLEMENTO DO SACADO PadRight(Sacado.Bairro, 12, ' ') + // BAIRRO DO SACADO PadLeft(OnlyNumber(Sacado.CEP), 8, '0') + // CEP DO SACADO PadRight(Sacado.Cidade, 15, ' ') + // CIDADE DO SACADO PadRight(Sacado.UF, 2, ' ') + // UF DO SACADO {Dados do sacador/avalista} PadRight(Sacado.SacadoAvalista.NomeAvalista, 30, ' ') + // NOME DO SACADOR/AVALISTA space(4) + // COMPLEMENTO DO REGISTRO ADataMoraJuros + // DATA DE MORA IfThen((DataProtestoNegativacao <> 0) and (DataProtestoNegativacao > Vencimento), PadLeft(DiasProtestoNegativacao , 2, '0'), '00')+ // PRAZO space(1) + // BRANCOS IntToStrZero(aRemessa.Count + 1, 6); // Nº SEQÜENCIAL DO REGISTRO NO ARQUIVO iSequencia := aRemessa.Count + 1; aRemessa.Add(UpperCase(wLinha)); //Registro Complemento Detalhe - Multa if PercentualMulta > 0 then begin inc( iSequencia ); wLinhaMulta:= '2' + // Tipo de registro - 2 OPCIONAL – COMPLEMENTO DETALHE - MULTA IfThen(MultaValorFixo,'1','2') + // Cocidgo da Multa 1- Cobrar Multa Valor Fixo / 2- Percentual / 0-Não cobrar multa ifThen((DataMulta > 0), FormatDateTime('ddmmyyyy', DataMulta), Poem_Zeros('',8)) + // Data da Multa 9(008) IntToStrZero( round(PercentualMulta * 100 ), 13) + // Valor/Percentual 9(013) space(371) + // Complemento IntToStrZero(iSequencia , 6); // Sequencial aRemessa.Add(UpperCase(wLinhaMulta)); end; {Registro Híbrido - Bolecode} if (NaoEstaVazio(ACBrBoleto.Cedente.PIX.Chave)) then begin wLinha := '3' + // 001 a 001 - Identificação do registro bolecode (3) PadRight(IfThen(QrCode.txId = '', ACBrBoleto.Cedente.PIX.Chave, ''), 77, ' ') + // 002 a 078 - Chave Pix (opicional) PadRight(QrCode.txId, 64, ' ') + // 079 a 142 - ID DA URL DO QR CODE PIX (opcional) PadRight('', 252, ' ') + // 143 a 394 - Brancos IntToStrZero(ARemessa.Count + 1, 6); iSequencia := aRemessa.Count + 1; // 395 a 400 - Número sequencial do registro ARemessa.Text:= ARemessa.Text + UpperCase(wLinha); end; //OPCIONAL – COBRANÇA E-MAIL E/OU DADOS DO SACADOR AVALISTA if (Sacado.Email <> '') or (Sacado.SacadoAvalista.CNPJCPF <> '') then begin inc( iSequencia ); wLinhaMulta:= '5' + // 001 - 001 Tipo de registro - 5 IDENTIFICAÇÃO DO REGISTRO TRANSAÇÃO PadRight(Sacado.Email, 120, ' ') + // 002 - 121 ENDEREÇO DE E-MAIL ENDEREÇO DE E-MAIL DO PAGADOR PadLeft(ATipoSacadoAvalista, 2, '0') + // 122 - 123 CÓDIGO DE INSCRIÇÃO IDENT. DO TIPO DE INSCRIÇÃO DO SACADOR/AVALISTA PadLeft(OnlyNumber(Sacado.SacadoAvalista.CNPJCPF), 14, '0') + // 124 - 137 NÚMERO DE INSCRIÇÃO NÚMERO DE INSCRIÇÃO DO SACADOR AVALISTA PadRight(Sacado.SacadoAvalista.Logradouro + ' ' + Sacado.SacadoAvalista.Numero + ' ' + Sacado.SacadoAvalista.Complemento , 40, ' ') + // 138 - 177 RUA, Nº E COMPLEMENTO DO SACADOR AVALISTA PadRight(Sacado.SacadoAvalista.Bairro, 12, ' ') + // 178 - 189 BAIRRO DO SACADOR AVALISTA PadLeft(OnlyNumber(Sacado.SacadoAvalista.CEP), 8, '0') + // 190 - 197 CEP DO SACADOR AVALISTA PadRight(Sacado.SacadoAvalista.Cidade, 15, ' ') + // 198 - 212 CIDADE DO SACADOR AVALISTA PadRight(Sacado.SacadoAvalista.UF, 2, ' ') + // 213 - 214 UF (ESTADO) DO SACADOR AVALISTA space(139) + // 215 - 353 Brancos //para se operar com mais de um desconto (depende de cadastramento prévio do indicador 19.0 pelo Itaú, conforme Item 5) IfThen(ValorDesconto2>0, // Alternativamente este campo poderá ter dois outros usos (SACADOR/AVALISTA ou 2 e 3 descontos) FormatDateTime('ddmmyy', DataDesconto2), // 354 - 359 Data do 2º desconto (DDMMAA) space(6)) + IfThen(ValorDesconto2>0, IntToStrZero(round(ValorDesconto2 * 100), 13), // 360 - 372 Valor do 2º desconto space(13)) + IfThen(ValorDesconto3>0, FormatDateTime('ddmmyy', DataDesconto3), // 373 - 378 Data do 3º desconto (DDMMAA) space(6)) + IfThen(ValorDesconto3>0, IntToStrZero(round(ValorDesconto3 * 100), 13), // 379 - 391 Valor do 3º desconto space(13)) + space(3) + // 392 - 394 COMPLEMENTO DE REGISTRO IntToStrZero(iSequencia , 6); // 395 - 400 Sequencial aRemessa.Add(UpperCase(wLinhaMulta)); end; end; end; end; end; Observação, já passei pela homologação do banco com essas modificações e já realizamos testes de pagamento do QRCode do PIX e o cliente já está utilizando este processo. Lembrando que no itau existe 2 opções de Pix por aquivo de remessa. 1° é aonde informo a chave pix na identificação 3 e o banco que é responsavel por gerar o pix(copia e cola) e depois só pego essa informação no retorno e vinculo a impressão do boleto. 2° gero a location vazia e mando no arquivo de remessa, como mencionei acima, desta forma não tem a necessidade de pegar o pix(copia e cola) no retorno do boleto. No meu caso utilizei a opção 2.
  3. Olá, no boleto tem que gerar o pix copia e cola em cima da location. Abaixo comando que utilizei ACBrPixCD1.GerarQRCodeDinamico('sua location');
  4. Olá, Galera, realizei a implementação do metodo POST da Location do itau, segue abaixo o link
  5. No Banco do Itau, existe um EndPoint chamado /loc aonde o mesmo é gerado uma location vazia para que depois possa ser anexada junto com o arquivo de remessa(CNAB400) Abaixo o Link da documentação da API https://devportal.itau.com.br/nossas-apis/itau-ep9-gtw-pix-recebimentos-ext-v2#tag/Location Após algumas analises, verifiquei que no ACBrPIXCD não existia esta implementação, dito isso, realizei a implementação do mesmo, porem no momento apenas do metodo POST(/loc) para criação de location. A Implementação foi realizada na unit ACBrPIXPSPItau Abaixo o código implementado na unit do Itau function TACBrPSPItau.CriarLocation(ATypeLocation : String;out ARetJSON : String): Boolean; var Body, ep: String; RespostaHttp: AnsiString; ResultCode: Integer; AURL : String; js: TACBrJSONObject; begin if (UpperCase(ATypeLocation) = '') or (UpperCase(ATypeLocation) <> 'COB') and (UpperCase(ATypeLocation) <> 'COBV') then raise EACBrPSPException.CreateFmt( ACBrStr(sErroPropriedadeNaoDefinida), ['ATypeLocation']); if (NivelLog > 1) then RegistrarLog('CriarLocation'+ATypeLocation); Body := '{"tipoCob": "'+ATypeLocation+'"}'; Clear; PrepararHTTP; ep := ChttpMethodPOST; ConfigurarBody(ep, cItauPathAPIPixLocation, Body); WriteStrToStream(Http.Document, Body); Http.MimeType := CContentTypeApplicationJSon; ConfigurarAutenticacao(ep, cItauPathAPIPixLocation); if (ACBrPixCD.Ambiente = ambProducao) then AURL := cItauURLProducao + cItauPathAPIPix + cItauPathAPIPixLocation else begin VerificarAutenticacao; AURL := cItauURLSandbox + cItauPathAPIPix + cItauPathAPIPixLocation; end; TransmitirHttp(ChttpMethodPOST, AURL, ResultCode, RespostaHttp); Result := (ResultCode = HTTP_CREATED); if (ResultCode = HTTP_CREATED) then begin ARetJSON := String(RespostaHttp); js := TACBrJSONObject.Parse(RespostaHttp); try RegistrarLog('id - '+js.AsString['id']); RegistrarLog('location - '+js.AsString['location']); RegistrarLog('tipoCob - '+js.AsString['tipoCob']); RegistrarLog('criacao - '+js.AsString['criacao']); finally js.Free; end; end else DispararExcecao(EACBrPixHttpException.CreateFmt(sErroHttp, [Http.ResultCode, ChttpMethodPOST, AURL])); end; Abaixo como realizar a chamada da implementação realizada(Para método cobv). var Ok : Boolean; AJSON : String; js: TACBrJSONObject; begin Ok := ACBrPSPItau1.CriarLocation('cobv',AJSON); if OK then begin mmLocationItau.Lines.Add(''); mmLocationItau.Lines.Add('-----------------Criação da Location cobv---------------------'); js := TACBrJSONObject.Parse(AJSON); try mmLocationItau.Lines.Add('id - '+js.AsString['id']); mmLocationItau.Lines.Add('location - '+js.AsString['location']); mmLocationItau.Lines.Add('tipoCob - '+js.AsString['tipoCob']); mmLocationItau.Lines.Add('criacao - '+js.AsString['criacao']); finally js.Free; end; mmLocationItau.Lines.Add('-----------------Fim da Criação da Location cobv---------------------'); end; Abaixo como realizar a chamada da implementação realizada(Para método cob). var Ok : Boolean; AJSON : String; js: TACBrJSONObject; begin Ok := ACBrPSPItau1.CriarLocation('cob',AJSON); if OK then begin mmLocationItau.Lines.Add(''); mmLocationItau.Lines.Add('-----------------Criação da Location cob---------------------'); js := TACBrJSONObject.Parse(AJSON); try mmLocationItau.Lines.Add('id - '+js.AsString['id']); mmLocationItau.Lines.Add('location - '+js.AsString['location']); mmLocationItau.Lines.Add('tipoCob - '+js.AsString['tipoCob']); mmLocationItau.Lines.Add('criacao - '+js.AsString['criacao']); finally js.Free; end; mmLocationItau.Lines.Add('-----------------Fim da Criação da Location cob---------------------'); end; Em Anexo tem a unit do Itau e do projeto PIXCDTeste, aonde implementei uma aba nova para criação da location. ACBrPIXPSPItau.pasFrPrincipal.dfmFrPrincipal.pas OBS: Todos os testes acima, junto com a implementação já foram realizados em Produção. Qualquer duvida estou a disposição, obrigado.
  6. Boa tarde, @Vinicius Pereira Eu criei 2 tipos de relatórios utilizando o RLReport e o QuickRep. No caso coloquei um image de cada componente e utilizei o seguinte código no beforeprint PintarQRCode(oQrCode, imgQRCode1.Picture.Bitmap, qrUTF8BOM); PintarQRCode(oQrCode, imgQRCode.Picture.Bitmap, qrUTF8BOM); Aonde tem "oQrCode" é o pix copia e cola.
  7. Bom dia, Apenas um complemento sobre o PIX (Santander) Em algumas maquinas tive que colocar 2 dll, pois não conseguia Gerar o Token. Estava retornando erro 500 As dll que coloquei foram as libcrypto-1_1.dll e libssl-1_1.dll Após colocar as dll na pasta aonde executa o sistema a cobrança foi gerada com sucesso. Abaixo o log do erro que tinha ocorrido. 02/09/22 11:01:00:914 - Atribuindo PSP: TACBrPSPSantander, Nome: ACBrPSPSantander1 02/09/22 11:01:00:914 - Atribuindo PSP: Nil 02/09/22 11:01:00:914 - Atribuindo PSP: TACBrPSPSantander, Nome: ACBrPSPSantander1 02/09/22 11:01:00:914 - CriarCobrancaImediata( C0C823B10C9349A28FC7F93BDBD262D2 ) 02/09/22 11:01:00:914 - PrepararHTTP 02/09/22 11:01:00:914 - Autenticar 02/09/22 11:01:00:914 - LimparHTTP 02/09/22 11:01:00:914 - TransmitirHttp( POST, https://trust-pix.santander.com.br/oauth/token?grant_type=client_credentials ) 02/09/22 11:01:00:914 - ConfigurarHTTP 02/09/22 11:01:00:914 - ConfigurarProxy 02/09/22 11:01:00:914 - ConfigurarTimeOut 02/09/22 11:01:00:914 - ConfigurarHeaders( POST, https://trust-pix.santander.com.br/oauth/token?grant_type=client_credentials ) 02/09/22 11:01:00:914 - Req.Headers: Accept-Encoding: gzip, compress, deflate 02/09/22 11:01:00:914 - Req.Body: client_id=Ga0MdcJh2woZPfiJFhQuJwSs9tFq7z7A&client_secret=XRhiDEwcpCp4GCvr 02/09/22 11:01:03:254 - ResultCode: 500 - 02/09/22 11:01:03:254 - Resp.Headers: POST /oauth/token?grant_type=client_credentials HTTP/1.0 Host: trust-pix.santander.com.br Keep-Alive: 300 Connection: keep-alive User-Agent: Mozilla/4.0 (compatible; Synapse) Content-Type: application/x-www-form-urlencoded Content-Length: 73 Accept-Encoding: gzip, compress, deflate 02/09/22 11:01:03:254 - Resp.Body: 02/09/22 11:01:03:254 - EACBrPixHttpException: Erro HTTP: 500, Metodo: POST, URL: https://trust-pix.santander.com.br/oauth/token?grant_type=client_credentials 02/09/22 11:01:08:263 - ConsultarCobrancaImediata( C0C823B10C9349A28FC7F93BDBD262D2, 0 ) 02/09/22 11:01:08:263 - PrepararHTTP 02/09/22 11:01:08:263 - Autenticar 02/09/22 11:01:08:263 - LimparHTTP 02/09/22 11:01:08:263 - TransmitirHttp( POST, https://trust-pix.santander.com.br/oauth/token?grant_type=client_credentials ) 02/09/22 11:01:08:263 - ConfigurarHTTP 02/09/22 11:01:08:263 - ConfigurarProxy 02/09/22 11:01:08:263 - ConfigurarTimeOut 02/09/22 11:01:08:263 - ConfigurarHeaders( POST, https://trust-pix.santander.com.br/oauth/token?grant_type=client_credentials ) 02/09/22 11:01:08:263 - Req.Headers: Accept-Encoding: gzip, compress, deflate 02/09/22 11:01:08:263 - Req.Body: client_id=Ga0MdcJh2woZPfiJFhQuJwSs9tFq7z7A&client_secret=XRhiDEwcpCp4GCvr 02/09/22 11:01:08:310 - ResultCode: 500 - 02/09/22 11:01:08:310 - Resp.Headers: POST /oauth/token?grant_type=client_credentials HTTP/1.0 Host: trust-pix.santander.com.br Keep-Alive: 300 Connection: keep-alive User-Agent: Mozilla/4.0 (compatible; Synapse) Content-Type: application/x-www-form-urlencoded Content-Length: 73 Accept-Encoding: gzip, compress, deflate
  8. Boa tarde, Valeu @EliasCesar @Vinicius Pereira Pega as alterações que teve e da um retorno se conseguiu resolver o seu problema tambem.
  9. Boa tarde, O Erro retornando 0 é por conta do timeout, que no meu caso estava 300, por padrão deixei 9000(Que é o padrão do ACbr), pois as vezes a requisição pode demorar um pouco e caso estiver 300 poderá retornar código 0. OBS: Neste caso a cobrança é criada. Para criar cobranças no Santander é obrigatório preencher o TXID. Toda nova cobrança deverá ser gerado um novo txid. Cobrança Criada. Consulta da cobrança, após o pagamento(Em Produção) Solicitando devolução do PIX. Consultando Devolução. OBS: Até o presente momento o santander não tem cancelamento de cobranças geradas.
  10. Testei com o demo, porem ocorre o erro abaixo. pelo postman da erro 500 vou estudar mais um pouco aqui e volto a informar. log.txt
  11. Bom dia, Segue a unit alterada e o Log. Estou anexando o Log antes da Alteração e o Log do erro atual. O Erro que está ocorrendo agora o mesmo ocorre no Postman, estou em contato com o suporte do santander para tentar resolve-lo. ACBrPIXPSPSantander.pas Log Erro Atual.txt Log antes da Alteração.txt
  12. Boa noite @Vinicius Pereira Consegui resolver 1 dos problemas, porem agora estou tendo o retorno abaixo: { "type": "https://pix.bcb.gov.br/api/v2/error/NaoEncontrado", "title": "Não Encontrado", "status": 404, "detail": "Entidade não encontrada." } O Erro anterior era por conta que não estava passando o certificado digital que foi cadastrado no momento de cadastrar a API. Consegui resolver implementando o método abaixo na unit ACBrPIXPSPSantander, após isso compilei o ACBr novamente para criar as propriedades e conseguir manipular. Feito isso, foi possível gerar o Token, porem estou com problema agora na criação da cobrança, entrei em contato com o suporte do Santander, porem até agora nada. Caso tenha algum retorno irei reportar o andamento da implantação. Até o momento, essas foram as únicas mudanças necessárias @EliasCesar
  13. Boa noite @Vinicius Pereira Conseguiu resolver o seu problema ? Pois estou com a mesmo problema. Caso sim, poderia compartilhar qual foi a solução ?
  14. Boa noite, Finalizar tópico, estava revendo o processo e vi que tinha uma validação, no caso só leva a informação caso o COD_MOD, seja 66. Obrigado.
  15. Boa noite, Ao Gerar o bloco C500 com as novas alterações que houve a coluna FIN_DOCe não está sendo gerando, mesmo passando a informação para o componente. Abaixo um exemplo básico de como está sendo realizado. with RegistroC500New do begin FIN_DOCe := fedcNormal; end; Ao Analisar o processo por completo, verifiquei que não está implementado o processo na unit "ACBrEFDBloco_C_Class", em procedure TBloco_C.WriteRegistroC500(RegC001: TRegistroC001); Existe uma variável vFin_DOCe do tipo string, porem ela não está recebendo nenhum valor. Após alimentar a variável a informação começou a sair no arquivo *.txt Antes da Alteração: Após a alteração: OBS: O ACBr foi atualizado e instalado na data de hoje (03/02/2020). Realizei este processo, pois não consegui fazer com que a informação fosse alimentada, caso exista outra maneira de alimentar a coluna do bloco, poderiam me auxiliar ?
×
×
  • 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...