dinkbit / conekta-cashier

Laravel + Conekta = Painless subscription billing. http://laravel.com
MIT License
34 stars 22 forks source link

Actualizar tarjeta de una suscripción cancelada. #35

Open rcevs opened 6 years ago

rcevs commented 6 years ago

Cuando se intenta actualizar la tarjeta de una suscripción cancelada, Conekta regresa error.

Esto es porque el método updateSubscription() que es llamado desde updateCard() intenta crear una nueva suscripción, pero sólo tiene el parámetro 'card'.

¿De qué otra manera se puede actualizar una tarjeta de una suscripción cancelada por un pago fallido por una tarjeta vencida?

rcevs commented 6 years ago

Las tarjetas de las suscripciones canceladas no se pueden actualizar, por lo que lo resolví agregando una condición en la función updateCard de la clase ConektaGateway que revisa (antes de intentar actualizar la tarjeta de la suscripción) si la suscripción está cancelada.

Les dejo el código por si alguien se encuentra con el mismo problema.

public function updateCard($token)
    {
        $customer = $this->getConektaCustomer();

        $card = $customer->createCard(['token' => $token]);

        $customer->update(['default_card_id' => $card->id]);

        if ($customer->subscription && $customer->subscription->status !== 'canceled') {
            $customer->updateSubscription(['card' => $card->id]);

            $this->billable
                    ->setLastFourCardDigits($this->getLastFourCardDigits($customer))
                    ->setCardType($this->getCardType($customer))
                    ->saveBillableInstance();
        }

        return $card;
    }