【问题标题】:Laravel not applying coupon using Billing/CashierLaravel 未使用 Billing/Cashier 应用优惠券
【发布时间】:2015-07-24 08:46:04
【问题描述】:

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

为此,我使用以下代码:

$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()?或者您可以尝试以这种方式应用您的优惠券来测试问题出在哪里:$user->subscription('monthly')->withCoupon('**with-your-code**` ')->create($request->stripeToken);

标签: php laravel laravel-5 stripe-payments laravel-cashier


【解决方案1】:

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

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

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

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

【讨论】:

  • 破解答案,谢谢。我应该手动检查 if 语句(我在发布后不久就这样做了),但是假设字符串不为空 empty 将返回 false 是合乎逻辑的。生活和学习:)
猜你喜欢
  • 2021-04-02
  • 2018-07-09
  • 1970-01-01
  • 2016-03-03
  • 2013-08-04
  • 1970-01-01
  • 2016-03-10
  • 1970-01-01
  • 2022-10-19
相关资源
最近更新 更多