marciamagall Postado 30 Maio Postado 30 Maio Boa tarde. Estou com uma dúvida no método LerRetorno da unit ACBrBoletoRet_Santander_API. Estou testando boletos pagos com MULTA, onde o valor pago é maior que o valor original do boleto. Nos testes com boletos pagos pelo código de barras, o retorno é processado corretamente e o valor pago vem correto. Nos boletos pagos com o qrcode, via pix, o valor pago, quando existe a multa, volta com o valor original do boleto, e não vem o valor pago com multa. Vou colocar um pedaço do json de retorno como exemplo. { "_pageable": { "_moreElements": false }, "_content": [ { "returnCode": "000 - Consulta realizada com sucesso", "documentNumber": "05441657000108", "beneficiaryCode": 45485, "bankNumber": 15290, "clientNumber": "00478162A", "dueDate": "2025-05-20", "nominalValue": 483.01, "issueDate": "2025-04-22", "participantCode": "", "status": "Baixado", "statusComplement": "Via Pagamento Pix", "interestValue": 0.0, "discountValue": 0.0, "deductionValue": 0.0, "paidValue": 492.83 } ] }, Essa é a parte que volta o valor com multa e esse bloco não está sendo lido na function LerRetorno. Abaixo a parte do código de deveria ser corretamente o paidValue mas não está lendo: ( debugando o LExisteBankSlip é true, e o nindiceobj fica com o valor 1, que é exatamente esse bloco acima q coloquei do json, mas o paidvalue está dentro de um _content e isso não está no bloco de código . if LExisteBankSlip then nIndiceOBJ := strtoint(IfThen(LTotalObjetos>1,'1','0')) else nIndiceOBJ := 0; LJSONObject := LJsonArray.ItemAsJSONObject[nIndiceOBJ]; if nIndiceOBJ = 0 then begin ARetornoWS.DadosRet.TituloRet.NossoNumero := LJSONObject.AsString['bankNumber']; ARetornoWS.DadosRet.TituloRet.SeuNumero := LJSONObject.AsString['clientNumber']; if ARetornoWS.DadosRet.TituloRet.Vencimento = 0 then ARetornoWS.DadosRet.TituloRet.Vencimento := StringToDateTimeDef(LJSONObject.AsString['dueDate'], 0, 'yyyy-mm-dd'); if ARetornoWS.DadosRet.TituloRet.DataDocumento = 0 then ARetornoWS.DadosRet.TituloRet.DataDocumento := StringToDateTimeDef(LJSONObject.AsString['issueDate'], 0, 'yyyy-mm-dd'); if ARetornoWS.DadosRet.TituloRet.ValorDocumento = 0 then ARetornoWS.DadosRet.TituloRet.ValorDocumento := LJSONObject.AsFloat['nominalValue']; if NaoEstaVazio(ARetornoWS.DadosRet.TituloRet.EstadoTituloCobranca) then ARetornoWS.DadosRet.TituloRet.CodigoEstadoTituloCobranca := RetornaCodigoOcorrencia(LJSONObject.AsString['status']); end; if EstaVazio(ARetornoWS.DadosRet.TituloRet.CodigoEstadoTituloCobranca) then ARetornoWS.DadosRet.TituloRet.CodigoEstadoTituloCobranca := RetornaCodigoOcorrencia(LJSONObject.AsString['status']); ARetornoWS.DadosRet.TituloRet.ValorDesconto := LJSONObject.AsFloat['discountValue']; ARetornoWS.DadosRet.TituloRet.ValorPago := LJSONObject.AsFloat['paidValue']; ARetornoWS.DadosRet.TituloRet.ValorMoraJuros := LJSONObject.AsFloat['interestValue']; ARetornoWS.DadosRet.TituloRet.ValorAbatimento := LJSONObject.AsFloat['deductionValue']; No caso do boleto pago com codigo de barras, o valor está em outra parte do json e a função busca corretamente. A leitura do valor pago está nesse bloco abaixo para o boleto pago com código de barras: //settlementData consulta para pegar data do pagamento if (LJsonArray.ItemAsJSONObject[nIndiceOBJ].AsJSONArray['settlementData'].Count > 0) then begin if LJsonArray.ItemAsJSONObject[nIndiceOBJ].ValueExists('settlementData') then begin LJSONObject := LJsonArray.ItemAsJSONObject[nIndiceOBJ].AsJSONArray['settlementData'].ItemAsJSONObject[0]; if ARetornoWS.DadosRet.TituloRet.DataCredito = 0 then ARetornoWS.DadosRet.TituloRet.DataCredito := StringToDateTimeDef(LJSONObject.AsString['settlementCreditDate'], 0, 'yyyy-mm-dd'); if ARetornoWS.DadosRet.TituloRet.DataMovimento = 0 then ARetornoWS.DadosRet.TituloRet.DataMovimento := StringToDateTimeDef(LJSONObject.AsString['settlementDate'], 0, 'yyyy-mm-dd'); if ARetornoWS.DadosRet.TituloRet.DataBaixa = 0 then ARetornoWS.DadosRet.TituloRet.DataBaixa := StringToDateTimeDef(LJSONObject.AsString['settlementDate'], 0, 'yyyy-mm-dd'); ARetornoWS.DadosRet.TituloRet.ValorPago := LJSONObject.AsCurrency['settlementCreditedValue']; if EstaVazio(ARetornoWS.DadosRet.TituloRet.CodigoEstadoTituloCobranca) then ARetornoWS.DadosRet.TituloRet.CodigoEstadoTituloCobranca := RetornaCodigoOcorrencia(LJSONObject.AsString['status']); if EstaVazio(ARetornoWS.DadosRet.TituloRet.EstadoTituloCobranca) then ARetornoWS.DadosRet.TituloRet.EstadoTituloCobranca := LJSONObject.AsString['status']; ARetornoWS.DadosRet.TituloRet.ValorTarifa := LJSONObject.AsFloat['settlementDutyValue']; end; end; Preciso de uma ajuda, alguém já passou por isso?
Moderadores Juliomar Marchetti Postado 30 Maio Moderadores Postado 30 Maio habilita o log detalhado do componente e olhar o json que retorna pra ver se vem essa informação e só não está sendo passado ao componente Juliomar Marchetti skype: juliomar telegram: juliomar e-mail: [email protected] http://www.juliomarmarchetti.com.br
marciamagall Postado 30 Maio Autor Postado 30 Maio Ele volta sim, peguei a parte do log que retorna o valor correto pago com multa: 30/05/25 10:59:06:800 - Retorno Envio: TBoletoW_Santander_API 30/05/25 10:59:06:800 - C digo do Envio: 200 1.1 OK 30/05/25 10:59:06:801 - Retorno Envio: {"_pageable":{"_moreElements":false},"_content":[{"returnCode":"000 - Consulta realizada com sucesso","documentNumber":"05441657000108","beneficiaryCode":45485,"bankNumber":15290,"clientNumber":"00478162A","dueDate":"2025-05-20","nominalValue":483.01,"issueDate":"2025-04-22","participantCode":"","status":"Baixado","statusComplement":"Via Pagamento Pix","interestValue":0.00,"discountValue":0.00,"deductionValue":0.00,"paidValue":492.83}]}
Moderadores Juliomar Marchetti Postado 30 Maio Moderadores Postado 30 Maio 6 minutos atrás, marciamagall disse: Ele volta sim, peguei a parte do log que retorna o valor correto pago com multa: 30/05/25 10:59:06:800 - Retorno Envio: TBoletoW_Santander_API 30/05/25 10:59:06:800 - C digo do Envio: 200 1.1 OK 30/05/25 10:59:06:801 - Retorno Envio: {"_pageable":{"_moreElements":false},"_content":[{"returnCode":"000 - Consulta realizada com sucesso","documentNumber":"05441657000108","beneficiaryCode":45485,"bankNumber":15290,"clientNumber":"00478162A","dueDate":"2025-05-20","nominalValue":483.01,"issueDate":"2025-04-22","participantCode":"","status":"Baixado","statusComplement":"Via Pagamento Pix","interestValue":0.00,"discountValue":0.00,"deductionValue":0.00,"paidValue":492.83}]} Legal agora é abrir a unit modificar, testar e trazer que subimos ao svn Juliomar Marchetti skype: juliomar telegram: juliomar e-mail: [email protected] http://www.juliomarmarchetti.com.br
marciamagall Postado 2 Junho Autor Postado 2 Junho Bom dia, modifiquei a unit e testei tanto com boleto pago via pix como para boleto pago via código de barras. ACBrBoletoRet_Santander_API.pas
Consultores Alexandre de Paula Postado 2 Junho Consultores Postado 2 Junho Bom dia, Criada a TK-7156 para avaliação. Obrigado pela contribuição. Alexandre de Paula Ajude o Projeto ACBr crescer - Assine o SAC (15) 2105-0750 (15)99790-2976. Discord Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil
Recommended Posts
Crie uma conta ou entre para comentar
Você precisar ser um membro para fazer um comentário
Criar uma conta
Crie uma nova conta em nossa comunidade. É fácil!
Crie uma nova contaEntrar
Já tem uma conta? Faça o login.
Entrar Agora