![](/img/trans.png)
[英]How to set amount to be charged on stripe button based on number of checkboxes selected
[英]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.