Pesquisar na Comunidade
Showing results for tags 'pix automatico'.
Encontrado 1 registro
-
Resumo Na criação de recorrência do Pix Automático (POST /rec), o campo loc é serializado a partir de TACBrPIXRecSolicitadaBase.loc, que está declarado como Integer. Quando o PSP retorna um id de location maior que 2.147.483.647 (Int32), o valor é truncado para 32 bits e enviado negativo, fazendo o PSP recusar a requisição. O id de location do Itaú tem 19 dígitos (ex.: 7587166705779689739), então o problema é 100% reproduzível nesse PSP. Evidência Resposta do POST /locrec (id da location gerada pelo PSP): {"id":7587166705779689739,"location":"api.itau/rec/694b07eb-...","criacao":"2026-07-15T19:09:32.992Z","idRec":null} Corpo do POST /rec montado pelo ACBr logo em seguida: {"politicaRetentativa":"PERMITE_3R_7D","vinculo":{...},"calendario":{...},"loc":-1649719029} O loc foi de 7587166705779689739 para -1649719029, que é exatamente o truncamento para inteiro de 32 bits com sinal (os 32 bits baixos de 7587166705779689739 = -1649719029). O PSP então responde: HTTP/1.1 401 Unauthorized {"title":"Acesso Negado","status":401,"detail":"Não autorizado. Verifique se os parâmetros de acesso estão válidos..."} Como replicar Usar um PSP cujo /locrec retorne um id de location maior que Int32 (o Itaú sempre retorna, 19 dígitos). Chamar CriarLocation (epLocRec) e em seguida CriarRecorrencia (epRec) com RecorrenciaSolicitada.loc := LocationGerada.id. Observar no log (NivelLog alto) o Req.Body do /rec: o loc sai negativo. Causa Em ACBrPIXSchemasRec.pas, classe TACBrPIXRecSolicitadaBase: private fLoc: Integer; // <-- trunca ... property loc: Integer read fLoc write fLoc; // <-- trunca Há uma inconsistência interna: no ACBrPIXSchemasLocation.pas o campo id da location já é Int64 (leitura correta), mas o loc da recorrência (escrita) é Integer. Ou seja, o valor chega inteiro na leitura e é cortado ao ser atribuído/serializado na escrita. Correção sugerida Em ACBrPIXSchemasRec.pas, TACBrPIXRecSolicitadaBase: private fLoc: Int64; // era Integer ... property loc: Int64 read fLoc write fLoc; // era Integer Resultado após a correção Mesmo cenário, com o campo já como Int64 — loc vai íntegro (batendo com o id retornado no /locrec {"id":1570237648687511524,"location":"api.itau/rec/ea35652d-...","idRec":null} ... Req.Body: {"politicaRetentativa":"PERMITE_3R_7D","valor":{...},"vinculo":{...},"calendario":{...},"loc":1570237648687511524} A mudança é retrocompatível (Int64 comporta todo Integer) e alinha o tipo da escrita com o da leitura (TACBrPIXLocation.id).
- 3 replies
-
- bug report
- correção
-
(e 2 mais)
Tags:
