pagarme/pagarme-magento

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".

Captura de tela de 2020-04-28 16-26-23

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.