繁体   English   中英

如何退还 Stripe 订阅费用?

[英]How to Refund Stripe Subscription charged amount?

我正在实施一个案例,在该案例中,我需要取消客户订阅并为其退款。 我可以使用取消订阅

$sub = \Stripe\Subscription::retrieve({SUBSCRIPTION_ID});
$sub->cancel();

现在我必须退还已收取的金额

 $refund = \Stripe\Refund::create(array(
  "charge" => "{CHARGE_ID}"
));

这里CHARGE_ID是强制性的。 没有像SUBSCRIPTION_ID这样的选项。

由于它自动向客户收费,我无法存储CHARGE_ID 那么我该如何退还订阅金额呢??

请帮忙

谢谢

@Meera,我看到你解决了你的问题,我的解决方案是:
1.取消订阅后
2.使用Subscription中的subscriptionId获取所有Invoice Collection
3.从发票集合中提取第一个发票
4.使用发票中的chargeId创建退款

$subscriptionId = $objSubscription->id;
$objInvoiceCollection = \Stripe\Invoice::all([
    'subscription' => $subscriptionId
]);

if ($objInvoiceCollection->total_count === 0) {
    throw new \Exception("warning: \$subscriptionId={$subscriptionId} - no invoices found!");
} else {
    $objInvoice = current($objInvoiceCollection);
}

$chargeId = $objInvoice->charge;
$objRefund = \Stripe\Refund::create(['charge' => $chargeId]);

如果您只想退还订阅中未使用的积分,请尝试此操作

    subscription, err := c.subscription(id)
    if err != nil {
        return nil, err
    }
    cancelTime := time.Now().Unix()
    _, err = sub.Cancel(subscription.ID, &stripe.SubscriptionCancelParams{
        Prorate:    stripe.Bool(true),
        InvoiceNow: stripe.Bool(true),
    })
    if err != nil {
        return nil, err
    }

    invItr := invoice.List(&stripe.InvoiceListParams{
        Customer:     stripe.String(subscription.Customer.ID),
        Subscription: stripe.String(subscription.ID),
    })
    var (
        refundAmount int64
    )
    for _, i := range invItr.InvoiceList().Data {
        if i.Created >= cancelTime {
            refundAmount = i.Total * -1
            break
        }
    }
    if refundAmount > 0 {
        latestInvoice, err := invoice.Get(subscription.LatestInvoice.ID, nil)
        if err != nil {
            return nil, err
        }
        _, err = refund.New(&stripe.RefundParams{
            Charge: stripe.String(latestInvoice.Charge.ID),
            Amount: stripe.Int64(refundAmount),
        })
        if err != nil {
            return nil, err
        }
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM