Problema na atualização de pedidos com garantia de chargeback
Closed this issue · 1 comments
Contexto
O cliente (58d9155e0445b33014bc83a7) adiquiriu nosso produto de garantia de Chargeback e desde então nossos postback não estão fazendo a atualização correta de status dos orders deles. Os envios de postback estão normais e sendo recebidos pela plataforma.
Porém analisando as respostas do servidor deles percebe-se a anomália;
Por exemplo, pegando a transação 183365488, que não foi devidamente atualizada no sistema deles, temos dois postbacks enviados.
Fazendo o reenvio do primeiro postback (processing -> analizing, id = po_ck9c481zv0g0dws6pdpjx57fb
) recebemos 200 do servidor deles com a menssagem "ok".
Já para o segundo postback (analizing -> paid/refused, id = po_ck9c4csur0g4ywq6p1vqhq1ml
) recebemos o 200 mas com a menssagem "Order [id:507] [transactionId:183365488] can't be invoiced" (referência 1).
Pelo que pude entender isso acontece porque o Magento possui um ESTADO e um STATUS de cada order e nossos postbacks alteram os dois, sendo que o STATUS segue o padrão do Pagar.me com os status referentes a garantia de chargeback, enquanto o ESTADO tem alterações paralelas.
Uma dessas alterações acontece com nosso primeiro postback e muda o ESTADO para "payment_review" (referência 2) que o proprio módulo interpreta como não podendo receber invoice (referência 3), gerando a menssagem de "can't be invoiced".
Referência 1: Lógica de processamento do postback de analizing -> paid/refused
Referência 2: Lógica de alteração do estado do order para payment_review
Referência 3: Lógica de permitir o invoice do order
- Origem da demanda:
Caso do salesforce número: 19094324 e nessa thread do Slack. - Pontos de impactos:
Todo o transacional de nossos clientes de Magentdo com garantia de chargeback.
Atual
Quando é realizada uma compra nessa loja o order é gerado e o módulo salva o status dela como "pending_payment".
O proximo passo para essa transação seria a atualização de status quando recebem nossos postbacks, sendo o primeiro para alterar o status de processing -> analizing e o segundo de analizing -> paid/refused. Como pode ser visto na referência 1 o primeiro postback altera o ESTADO para "payment_review" (porém, como pode ser visto na imagem abaixo, isso não aparece na area de visualização do cliente).
Após essa mudança o order não pode mais ser alterado por nossos postbacks e fica parado no status "pending_payment".
E, como pode ser visto na imagem, acaba sendo necessaria a atualização manual do STATUS do order para que o sistema do cliente funcione como deveria. Sendo que nossos postbacks (id = po_ck9c481zv0g0dws6pdpjx57fb
e id = po_ck9c4csur0g4ywq6p1vqhq1ml
) foram enviados no dia 22/04/20 enquanto as atualizações na imagem só foram feitas no dia 27/04/20, gerando um atraso e um retrabalho alto para nossos clientes.
Referência 1: Lógica de alteração do estado do order para payment_review
Possível correção
Acredito que a correção seria feita através de uma atualização na lógica de alteração do estado do order para payment_review
(referência 1), cujo propósito seria justamente permitir a interpretação correta do status analyzing
pelo módulo, mas que acaba bloqueando a atualização do order posteriormente.
Assim, se faz necessario uma revisão dos possiveis ESTADOS de um order para decidir qual deve substituir o payment_review
na referência 1 mantendo o funcionamento adequado do módulo quando recebe o status analyzing
, enquanto evitando esse bloqueio de invoice.
Referência 1: Lógica de alteração do estado do order para payment_review
@LucasLyoji, muito obrigado. A longa contextualização e falta de tempo me fizeram desistir de reportar esse problema há alguns meses. Mas venho reforçar a necessidade de uma correção.
Desde que notei a incompatibilidade no uso do pending_payment, reconfigurei o MAGENTO_DESIRED_STATUS (que na verdade é state) para processing. E configurei um status customizado para authorized
. Aparentemente resolveu por hora.