首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >取消订阅后的条带API退款

取消订阅后的条带API退款
EN

Stack Overflow用户
提问于 2014-07-16 21:07:40
回答 4查看 11.8K关注 0票数 13

从Stripe文档:

当您取消订阅时,将不再收取客户卡的费用,但也不会退还任何款项。如果您想发出退款,您可以通过Stripe的仪表板或通过API。

我创建了一个每月订阅,我只想退款的金额,但尚未超过的天数内的订阅。我如何才能退款的金额,从订阅的日子还没有完成的带API?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2019-12-05 19:12:05

斯莱普现在会处理这件事。它可以立即取消订阅,并创建一张发票,将该月未使用部分的费用退还给他们。

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

添加“按比例”标签,以退还剩余的每月费用。

在PHP中:

代码语言:javascript
复制
$subscription = \Stripe\Subscription::retrieve(
  'SUBSCRIPTION_ID'
);

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

编辑:

@在下面评论并指出了我的错误。上述方法将不会实际退还客户按比例计算的金额,但只会创建一个帐户信用,该帐户将适用于下一张发票。

下面的代码实际上将退还按比例计算的金额给卡。它生成一个示例按比例分配的发票,就好像客户将他们的订阅量转换为零一样。然后,它退还按比例从上一张发票的金额,在他们的积极订阅。

"subscription_proration_date“标记是可选的,但是如果您需要从某个时间点按比例分配订阅,则非常有用。

代码语言:javascript
复制
// get active subscription
$subscription = \Stripe\Subscription::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 = \Stripe\Invoice::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 = \Stripe\Invoice::retrieve($subscription->latest_invoice);
$latest_charge_id = $latest_invoice->charge;

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

    $refund = \Stripe\Refund::create([
        'charge' => $latest_charge_id,
        'amount' => $prorated_amount,
    ]);
  
}

// delete subscription
$subscription->delete();
票数 8
EN

Stack Overflow用户

发布于 2014-07-20 10:48:01

您将需要计算退款金额,然后作出一个退款API调用到条纹。退款后,您将不得不为订阅取消再次发出API调用。

票数 5
EN

Stack Overflow用户

发布于 2018-02-14 04:16:26

在研究了一段时间之后,我来到了这个用JavaScript为Node.js编写的流:

代码语言:javascript
复制
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);
    }
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24790776

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档