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

Cancelamento da assinatura no WooCommerce após reativação através do Minha conta #2

Closed leo-araujo closed 3 years ago

leo-araujo commented 4 years ago

Descrição do bug :bomb:

Ao realizar a pausa de uma assinatura no WooCommerce através do painel minha conta, se a opção Sincronismo de status das assinaturas estiver ativada, no momento da reativação da assinatura, caso a mesma já tenha passado da data de renovação, ocorrerá o cancelamento indevido da assinatura.

Exemplo: Caso eu tenha uma assinatura que renove todo dia 4, se eu realizar a pausa desta assinatura e reativa-la apenas no dia 5, ocorrerá a ativação da assinatura e cancelamento automático no mesmo instante.

Solução de contorno :warning:

Não há uma solução para contorno.

Como reproduzir :cop:

Para reproduzir, poderá seguir estes passos:

Comportamento atual

A assinatura será reativada e cancelada no mesmo momento.

Comportamento esperado

Apenas realizar a ativação da assinatura.

Impacto do problema :boom:

Clientes poderão perder assinantes por cancelamento indevido.

Prioridade :memo:

Normal:

Análise técnica:

Abaixo um print dos eventos que ocorreram na assinatura em que foi possível replicar o cenário apresentado pelo cliente:

image

Conforme o print, o problema ocorre pois quando há a reativação da assinatura, será realizada uma cobrança na Vindi, o que gera a criação de um pedido no WooCommerce. Como a criação do pedido ocorre antes do tratamento da reativação da assinatura no WooCommerce, a assinatura irá tornar ao status on hold que tendo o Sincronismo do status das assinaturas habilitado impactará no cancelamento da assinatura na Vindi.

Neste cenário o problema ocorre pois o cancelamento devido ao status On Hold foi processo apenas após a reativação da assinatura através do webhook de assinatura reativada, sendo assim, como a assinatura se encontrava com o status ativo, a assinatura foi cancelada no WooCommerce.

Proposta de correção :heavy_check_mark:

Há uma validação onde caso o status da assinatura seja diferente de "On Hold", "Pending Cancel" ou 'Cancelled' ocorrerá o cancelamento da assinatura no WooCommerce no envio do webhook de subscription_canceled.

image

Neste caso, acredito que possamos realizar uma verificação do último pedido da assinatura no tratamento do webhook de assinatura reativada, e caso o mesmo esteja com o status de pago, realizamos a atualização do status da assinatura para ativo, senão apenas mantemos o status da assinatura. Exemplo:

image

Critérios de aceite