Laravel不使用账单/收银员申请优惠券

时间:2015-05-13 07:34:03

标签: php laravel laravel-5 stripe-payments laravel-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中创建的,但是会以全额结算,而不会考虑优惠券。

优惠券在测试环境中,网站也是如此 - 交易在测试环境中也是如此。

1 个答案:

答案 0 :(得分:2)

检查是否使用empty函数设置了对象属性将不会产生预期的效果,因为该类需要为empty定义的__isset魔术方法才能工作不可思议的财产。

除此之外,Http\Illuminate\Request班级使用__get来访问输入参数,这意味着__isset在这种情况下甚至无法工作,因为coupon属性在类中没有真正定义。因此,您的情况几乎肯定会使用您当前的代码进入else块(即使您有coupon输入参数存在)。

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

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