-
Total de ítens
21 -
Registro em
-
Última visita
Últimos Visitantes
WashingtonFelipe's Achievements
-
BoleCode Itau (Arquivo de Remessa)
WashingtonFelipe replied to WashingtonFelipe's tópico in ACBrBoleto
Bom dia, Atualizei novamente e está correto agora, obrigado. -
BoleCode Itau (Arquivo de Remessa)
WashingtonFelipe replied to WashingtonFelipe's tópico in ACBrBoleto
Boa tarde, Fiz a atualização, conforme o print. Porem, ele está na posição errada. Está indo após a linha 5 e tem que ir antes da linha 5, pois o bolecode é referente a linha 3. Outra situação é que só pode informar a chave PIX na posição 002 a 078 - Chave Pix (opcional), caso não esteja preenchido a posição 079 a 142 - ID DA URL DO QR CODE PIX (opcional) Caso seja preenchido não pode ser informado a chave PIX(Essa foi a orientação que me deram durante a homologação). Ajustar a posição(Conforme mencionei acima) e se for utilizar a location, não posso informar a chave PIX. Precisa seguir a ordem do conteúdo. 1,2,3,4,5 ... O Problema é apenas que está na posição errada. -
BoleCode Itau (Arquivo de Remessa)
WashingtonFelipe replied to WashingtonFelipe's tópico in ACBrBoleto
Boa tarde, Sim, está atualizado. Acredito que faltou um pouco mais de informações. No Arquivo de Remessa, no registro de transação, existe as linhas que devem seguir uma ordem. O Que está acontecendo é que a linha do "Registro Híbrido - Bolecode" (Linha 3), está para gerar após "OPCIONAL – COBRANÇA E-MAIL E/OU DADOS DO SACADOR AVALISTA" (Linha 5) E no Arquivo fica 1 2 5 3 E Deveria ficar 1 2 3 5 Essa foi a correção que informei que realizei no arquivo, no caso só coloquei o "Registro Híbrido - Bolecode", para gerar antes do "OPCIONAL – COBRANÇA E-MAIL E/OU DADOS DO SACADOR AVALISTA" Como deve ficar Como está Outra alteração que fiz em "Registro Híbrido - Bolecode", em "002 a 078 - Chave Pix (opcional)" só deve ser informado nos casos em que será enviado a remessa ao banco e pegar a informação do BoleCode no retorno(PIX Copia e Cola). Caso não escolha está opção a outra opção é enviar no arquivo de remessa uma informação(Location vazia), que será vinculada junto com o boleto, porem, a linha "002 a 078 - Chave Pix (opicional)" deve ir nula, ao contrario será rejeitada no registro da remessa. Alteração Como está hj Na alteração realizada, apenas verifico se o txID é nulo, caso sim passo a chave pix, ao contrario deixo a informação nula. E Aonde está: "079 a 142 - ID DA URL DO QR CODE PIX (opcional)" Não é o ID da URL do QrCode PIX, deve ser gerado uma location vazia que será vinculada ao boleto no momento que realizar o registro e é assim que eles sabem que foi pago o boleto por PIX. Essa informação de gerar a location, não existe no ACBrPIXCD, aonde realizei a implementação e enviei as informações sobre a implementação no furum abaixo. No Caso a location "vazia", deve ser gerada pelo método ao qual foi implementado no link abaixo. Em resumo são 2 ajustes 1° Ajustar a posição da geração do PIX 2° Validar se foi passado a location do PIX, caso tenha a chave PIX tem que ir nula. Existe outra situação, porem não é necessário ajuste, que é informar com zeros a esquerda o campo abaixo, ou seja, tem que utilizar as 64 posições, porem, ao informar os dados no ACBr é só passar já com todos os zeros, por isso não passei essa informação. PadRight(QrCode.txId, 64, ' ') + // 079 a 142 - ID DA URL DO QR CODE PIX (opcional) (Tem que preencher com zeros a esquerda) - 0000000000000000000000+Numero -
BoleCode Itau (Arquivo de Remessa)
WashingtonFelipe replied to WashingtonFelipe's tópico in ACBrBoleto
Bom dia, Será possível realizar essas implementações ? Pergunto, pois estou já com 2 clientes, indo para o 3. -
Erro 400 ACBTPIXCD - Santander - Produção
WashingtonFelipe replied to Vinicius Pereira's tópico in ACBrDiversos
Bom dia, Tente colocar essas dll libcrypto-1_1.dll libssl-1_1.dll -
BoleCode Itau (Arquivo de Remessa)
WashingtonFelipe replied to WashingtonFelipe's tópico in ACBrBoleto
Boa tarde, Sim, tive que realizar algumas alterações na unit ACBrBancoItau.pas para que funcionasse o boleCode por arquivo de remessa. ACBrBancoItau.pas -
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.
-
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.
-
Erro 400 ACBTPIXCD - Santander - Produção
WashingtonFelipe replied to Vinicius Pereira's tópico in ACBrDiversos
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. -
Erro 400 ACBTPIXCD - Santander - Produção
WashingtonFelipe replied to Vinicius Pereira's tópico in ACBrDiversos
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 -
Erro 400 ACBTPIXCD - Santander - Produção
WashingtonFelipe replied to Vinicius Pereira's tópico in ACBrDiversos
Boa tarde, Valeu @EliasCesar @Vinicius Pereira Pega as alterações que teve e da um retorno se conseguiu resolver o seu problema tambem. -
WashingtonFelipe changed their profile photo
-
Erro 400 ACBTPIXCD - Santander - Produção
WashingtonFelipe replied to Vinicius Pereira's tópico in ACBrDiversos
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.