Mar*_*cel 4 php stripe-payments laravel-4 laravel-cashier
根据 Stripe 文档,您实际上可以将优惠券应用于整个客户,但您也可以将优惠券应用于他们的订阅。我正在尝试在创建订阅后将优惠券应用于客户的订阅。我正在使用 Laravel Cashier 4.2。
这是我尝试过的:
$company = Auth::user()->company;
$customer = $company->subscription()->getStripeCustomer(); // returns a StripeGateway object
$customer->subscription->applyCoupon($input['coupon_code']);
Run Code Online (Sandbox Code Playgroud)
这是错误消息:
"Call to undefined method Stripe_Subscription::updateSubscription()"
Run Code Online (Sandbox Code Playgroud)
我可以applyCoupon()
对整个客户使用该方法,但不能对实际订阅使用......想法表示赞赏。
Stripe 文档仅显示如何从订阅中删除折扣: Discount Object。我在他们的文档中找到的唯一其他信息是:
优惠券和折扣
如果您想向某些客户提供折扣,您可以在仪表板中创建优惠券代码。优惠券有折扣百分比和持续时间,因此您可以创建优惠券,例如 10% 的终身折扣或 1 个月 50% 的折扣等。优惠券还可以附加到期日期,到期后将无法使用。以下是为用户的订阅添加折扣的示例。在本例中,我们已经创建了一张名为 50OFF1MONTH 的优惠券:
curl https://api.stripe.com/v1/customers/cus_4fdAW5ftNQow1a \ -u sk_test_4LOIhlh19aUz8yFBLwMIxnBY: \ -d coupon=50OFF1MONTH
然而,这并不是很有帮助。再一次,Laravel 的文档有点过于优雅,并且缺少有关该主题的任何信息。
我想知道我是否只需要使用新优惠券完全重新创建订阅对象......但这并不理想,因为您需要一个卡令牌。
更新1
我可以确认这实际上确实将优惠券应用于订阅本身
$user->subscription('monthly')
->withCoupon('code')
->create($creditCardToken);
Run Code Online (Sandbox Code Playgroud)
然而,问题又是如何在事后添加优惠券。
从 Cashier v11.* 开始,提供了新的便捷方法来更新底层 Stripe 订阅对象。要将优惠券应用于用户的订阅模型而不是客户模型,请在控制器中尝试以下操作:
$user->subscription('default')->updateStripeSubscription(['coupon' => $couponCode]);
Run Code Online (Sandbox Code Playgroud)
要从订阅中删除优惠券,请发送更新请求并传递空优惠券字符串。正如另一个问题中所述,设置为空字符串的优惠券会将其删除,而传递null会被忽略。
$user->subscription('default')->updateStripeSubscription(['coupon' => '']);
Run Code Online (Sandbox Code Playgroud)