2014-07-16 27 views
5

Dalla documentazione Stripe:Stripe rimborso API dopo la sottoscrizione annullata

Quando si annulla l'abbonamento, carta del cliente non verrà addebitato di nuovo, ma senza soldi saranno rimborsati sia. Se desideri richiedere il rimborso a , puoi farlo tramite il dashboard di Stripe o tramite l'API .

Ho creato un abbonamento mensile e desidero solo rimborsare la somma di denaro per il numero di giorni che non sono ancora passati entro il mese dell'abbonamento. Come posso rimborsare solo la quantità di denaro dell'abbonamento per i giorni non ancora completi con l'API Stripe?

+2

E' la metà del 2016 e che è sorprendente banda ancora non ha attuato l'integrale sottoscrizione ciclo di vita (in particolare alla fine del ciclo di vita) – DeepSpace101

risposta

4

È necessario calcolare l'importo del rimborso, quindi creare un valore da refund API call a strisce. Dopo il rimborso sarà necessario effettuare un'altra chiamata API per Subscription cancellation

3

Se si desidera consentire a Stripe di gestire i calcoli di rimborso, è possibile modificare il numero di sottoscrizioni su 0, quindi annullare il piano dopo.

+0

Per elaborare questo trucco, è necessario impostare la quantità su zero e quindi recuperare la fattura successiva per ottenere l'importo rimborsato (imminenteInvoice.total * -1). Per emettere un rimborso, prendi l'ultima fattura pagata (non la prossima) e usa l'id addebito per emettere il rimborso. – claviska

0

Dopo la ricerca per un po ', sono arrivato a questo flusso scritto in JavaScript per Node.js:

refundAndUnsubscribe = async function() { 
try { 

    // Set proration date to this moment: 
    const proration_date = Math.floor(Date.now()/1000); 

    let sub = await stripe.subscriptions.retrieve("sub_CILnalN9HpvADj"); 

    // See what the next invoice would look like with a plan switch 
    // and proration set: 
    let items = [{ 
     quantity: 0, 
     id: sub.items.data[0].id, 
     plan: "your_plan" // Switch to new plan 
    }]; 


    let invoices = await stripe.invoices.retrieveUpcoming('cus_CIP9dtlq143gq7', 'sub_CILnalN9HpvADj', { 
     subscription_items: items, 
     subscription_proration_date: proration_date 
    }); 

    //List all invoices 
    let payedInvoicesList = await stripe.invoices.list({ 
     customer: 'cus_CIP9dtlq143gq7' 
    }); 

    // Calculate the proration cost: 
    let current_prorations = []; 
    let cost = 0; 
    for (var i = 0; i < invoices.lines.data.length; i++) { 
     let invoice_item = invoices.lines.data[i]; 
     if (invoice_item.period.start == proration_date) { 
      current_prorations.push(invoice_item); 
      cost += invoice_item.amount; 
     } 
    } 

    //create a refund 
    if (cost !== 0) { 
     cost = (cost < 0) ? cost * -1 : cost //A positive integer in cents 

     let refund = await stripe.refunds.create({ 
      charge: payedInvoicesList.data[0].charge, 
      amount: cost 
     }); 
    } 

    // delete subscription 
    return stripe.subscriptions.del('sub_CILnalN9HpvADj'); 

} catch (e) { 
    console.log(e); 
} 

}