Laravel 未使用优惠券 Billing/Cashier

Laravel not applying coupon using Billing/Cashier

我正在尝试在用户创建订阅时使用优惠券。

为此,我使用以下代码:

$user = Auth::user();
if(!empty($request->coupon)){
    $user->subscription('monthly')->withCoupon($request->coupon)->create($request->stripeToken);
} else {
    $user->subscription('monthly')->create($request->stripeToken);
}

我查看了$request->coupon的价值,里面有我的优惠券。优惠券存在并且在 Stripe 中(这是通过编程方式验证的,所以我知道优惠券没问题)。

订阅是在 Stripe 中创建的,但按全额收费,不考虑优惠券。

优惠券在测试环境中,网站也在测试环境中,交易也是在测试环境中完成的。

检查是否使用 empty 函数设置对象 属性 不会产生预期的效果,因为 class 需要有 __isset 魔术方法为 empty 定义以处理不可访问的属性。

除此之外,Http\Illuminate\Request class 使用 __get 访问输入参数,这意味着 __isset 在这种情况下甚至不起作用,因为 coupon 属性 并不是真正在class 内定义的。所以你的条件几乎肯定会进入 else 块与你当前的代码(即使你有 coupon 输入参数存在)。

这就是方法 has 存在的原因,用于确定请求是否包含输入项的非空值。所以改用这个:

if ($request->has('coupon'))