我目前正在尝试实现一种方法,将人员转换为新计划。我遇到的问题是,旧计划中的优惠券会继续使用,并且不会向用户收费。每次我试图删除旧优惠券,它似乎不允许它。
protected function swapToYearlyPlan(){
$user = Auth::user();
// Tried this, doesn't work
// $user->subscription()->retrieve($user->stripe_subscription)->deleteDiscount();
// This works fine
$user->subscription('Gold Annual Plan')->swap();
// Tried this, doesn't work
//$user->subscription()->applyCoupon(NULL);
return 'Upgraded plan!';
}
思想是值得赞赏的。干杯
以下是最终起作用的内容:
protected function swapToYearlyPlan(){
$company = Auth::user()->company;
$customer = $company->subscription()->getStripeCustomer();
if($customer->subscription->discount instanceof Stripe_Object){
$customer->subscription->deleteDiscount();
}
$company->subscription("Gold Annual Plan")->swapAndInvoice();
// Dealing with GST is a whole other issue
return 'Upgraded Gold Annual plan!';
}
我在这里处理的是遗留代码,所以有很多细节还不清楚。例如,deleteDiscount
方法甚至不是Laravel Cashier的一个功能,或者至少不是我正在使用的版本。该方法包含在我的项目中的另一组代码中:vendor/stripe/stripe-php/lib/Stripe
,而Laravel Cashier位于vendor/laravel/cashier/src/Laravel/Cashier
。
总的来说,我再次发现Laravel文档缺乏冗长和示例。它说它可以处理优惠券,它展示了如何添加优惠券,但没有展示如何删除优惠券,这让我觉得它不能,这可能就是为什么必须包括其他图书馆的原因。但这都是猜测。