Saltar al contenido

Reembolso de Stripe API después de cancelar la suscripción

Solución:

Deberá calcular el monto del reembolso y luego realizar una llamada API de reembolso a Stripe. Después del reembolso, deberá realizar otra llamada a la API para cancelar la suscripción.

Stripe se encargará de esto ahora. Puede cancelar inmediatamente la suscripción y crear una factura reembolsando el costo de la parte no utilizada del mes.

https://stripe.com/docs/api/subscriptions/cancel

Agregue la etiqueta “prorrateo” para reembolsar el costo mensual restante.

En PHP:

$subscription = StripeSubscription::retrieve(
  'SUBSCRIPTION_ID'
);

$subscription->delete([
    'prorate' => true
]);

EDITAR:

@Dobes Vandermeer comentó a continuación y señaló mi error. El método anterior en realidad no reembolsará al cliente el monto prorrateado, sino que solo creará un crédito en la cuenta que se aplicará a la próxima factura.

El siguiente código en realidad reembolsará el monto prorrateado a la tarjeta. Genera una factura prorrateada de muestra si el cliente cambió la cantidad de su suscripción a cero. Luego reembolsa el monto prorrateado de la última factura de su suscripción activa.

Los “subscription_proration_date“La etiqueta es opcional pero útil si necesita prorratear la suscripción desde un momento determinado.

// get active subscription
$subscription = StripeSubscription::retrieve(' SUBSCRIPTION_ID ');

// sample prorated invoice for a subscription with quantity of 0
$sample_subscription_item = array(
    "id"       => $subscription->items->data[0]->id,
    "plan"     => $subscription->items->data[0]->plan->id,
    "quantity" => 0,
);

$upcoming_prorated_invoice = StripeInvoice::upcoming([
    "customer"                    => $subscription->customer,
    "subscription"                => $subscription->id,
    "subscription_items"          => array($sample_subscription_item),
    "subscription_proration_date" => ' PRORATED_DATE ', // optional
]);

// find prorated amount
$prorated_amount = 0;
foreach($upcoming_prorated_invoice->lines->data as $invoice) {
    if ($invoice->type == "invoiceitem") {

        $prorated_amount = ($invoice->amount < 0) ? abs($invoice->amount) : 0;

        break;

    }
}

// find charge id on the active subscription's last invoice
$latest_invoice = StripeInvoice::retrieve($subscription->latest_invoice);
$latest_charge_id = $latest_invoice->charge;

// refund amount from last invoice charge
if ($prorated_amount > 0) {

    $refund = StripeRefund::create([
        'charge' => $latest_charge_id,
        'amount' => $prorated_amount,
    ]);

}

// delete subscription
$subscription->delete();

Si desea que Stripe se encargue de los cálculos de reembolso, puede cambiar la cantidad de suscripción a 0 y luego cancelar el plan.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *