Open devaguia opened 2 years ago
Fiz a criação de um fluxograma do funcionamento após as alterações feitas.
Nessas alteração mantemos o fluxo de renovação padrão do WooCommerce Subscriptions. Isso significa que as renovações vão continuar acontecendo normalmente, mas o plugin não vai quebrar se elas acontecerem.
O que mudamos foi a forma como o plugin da Vindi gerencia a "suspensão" das assinaturas. Criamos um novo status "waiting-payment" para disparar os eventos de cancelamento, que antes era responsabilidade do status “on-hold”.
Dessa forma, quando o Subscription criar o pedido de renovação e mudar o seu status para “on-hold”, não vai afetar o fluxo da Vindi, pois o cancelamento só será enviado mediante a mudança para o status “waiting-payment”.
Quando a Vindi enviar o webhook de “bill_created” o plugin vai adicionar os meta_values ao último pedido de renovação, e alterar o status para “waiting-payment”, que vai disparar o cancelamento para Vindi e seguir com o fluxo padrão.
Caso o WooCommerce Subscription não gere o pedido de renovação o plugin da Vindi vai fazer a renovação durante o recebimento do evento “bill_created”.
É importante ressaltar que esse comportamento é dado com a ativação da funcionalidade Sincronismo de Status das assinaturas
.
Eu fiz uma proposta que também resolve esse problema, só que nesse caso não adicionei um novo status
para não interferir no ambiente do cliente. Apenas impeço que o Woocommerce gere um novo pedido, pois a responsabilidade de criação de pedidos (entendo que deva ser exclusiva da Vindi).
Se quiser dar uma olhada, acredito que possa ser útil nesse cenário 😉
@laerte-guimaraes Não sabia que iríamos manter um desenvolvimento em paralelo.
A alteração que fiz também não interfere na sua proposta. A ideia não é deixar a responsabilidade para o Subscription, mas bindar o plugin para que, se houver alguma falha, o fluxo não parar. Hoje 90% dos chamados de suporte na nossa plataforma são referentes a esse problema, tem alguma previsão de quando essa proposta vai ser revisada e enviada? Precisamos passar essa previsão para os clientes.
Caso não forem usar, acredito que podemos fechar a minha PR #119.
A rotina de renovação automática do plugin WooCommerce Subscription está interferindo diretamente nas renovações de assinaturas realizadas pela Vindi. Isso acontece pois o plugin de assinaturas faz a renovação da assinatura, enquanto no fluxo estabelecido pela Vindi, ela deveria disparar essa ação. No fluxo correto, a assinatura só teria o status alterado para on-hold quando a vindi disparasse o evento de "bill_created", mandando assim para Vindi o cancelamento temporário da assinatura(Que estão aguardando o pagamento).
Como a renovação por padrão altera o status para on-hold, isso acaba disparando o cancelamento fora do contexto apresentado acima, gerando assim o cancelamento da assinatura na Vindi, antes da renovação.
Basicamente o problema gira entorno do status de "on-hold", por ser um status padrão e já ter um comportamento pré definido dentro do funcionamento do WooCommerce Subscription. A proposta de solução é a utilização de outro status para fazer a suspensão de assinaturas inadimplentes. Isso resolveria o problema sem alterar a regra de negócio do plugin da Vindi nem a Subscription.
Obs: Assim como o WooCommerce o plugin Subscriptions também permite a criação de novos status.