vindi / vindi-woocommerce

Plugin Vindi para pagamento recorrente no Woocommerce
https://vindi.com.br
GNU General Public License v3.0
6 stars 12 forks source link

Renovação automática do WooCommerce Subscription atrapalha o fluxo de renovação da Vindi #116

Open devaguia opened 2 years ago

devaguia commented 2 years ago

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). image (2)

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.

devaguia commented 2 years ago

Fiz a criação de um fluxograma do funcionamento após as alterações feitas. Vindi Workflow (1)

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

laerte-guimaraes commented 2 years ago

É 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 😉

devaguia commented 2 years ago

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