Laravel Cashier paymentMethods()返回始终为空的对象结果

时间:2019-11-17 07:03:06

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

  • 收银机版本:^ 10.5
  • Laravel版本:^ 6.0
  • PHP版本:7.3.5
  • 数据库驱动程序和版本:

说明:

paymentMethods()总是检索带有空对象的数组。

public function userAllPaymentMethods(Request $request)
    {
        $user = User::find(5);
        $paymentMethod = $user->paymentMethods();
        return response($paymentMethod);
    }

结果: https://www.screencast.com/t/aqenaud77A

还可以使用Stripe PaymentMethod lib库。

public function userAllPaymentMethods(Request $request)
    {
        $user = User::find(5);
        \Stripe\Stripe::setApiKey('{{KEY}}');
        $paymentMethod = \Stripe\PaymentMethod::all([
            'customer' =>  $user->stripe_id,
            'type' => 'card',
        ]);

        return response($paymentMethod);
    }

结果:
https://www.screencast.com/t/X14ane7WyqS

GitHub:here

4 个答案:

答案 0 :(得分:5)

$paymentMethods = $user->paymentMethods()->map(function($paymentMethod){
        return $paymentMethod->asStripePaymentMethod();
    });

答案 1 :(得分:3)

这是一个解决方案:

$paymentMethods = [];

foreach ($user->paymentMethods() as $paymentMethod) {
    $paymentMethods[] = $paymentMethod->asStripePaymentMethod();
}

只需循环浏览付款方式,然后使用$paymentMethod->asStripePaymentMethod()即可获取用户的付款方式。

答案 2 :(得分:1)

我有同样的问题。没有时间进行深入调查。我只是意识到paymentMethod中的方法cashier/src/Billable.php不会返回任何内容。

/**
     * Get a collection of the entity's payment methods.
     *
     * @param  array  $parameters
     * @return \Illuminate\Support\Collection|\Laravel\Cashier\PaymentMethod[]
     */
    public function paymentMethods($parameters = [])
    {
        $this->assertCustomerExists();

        $parameters = array_merge(['limit' => 24], $parameters);

        // "type" is temporarily required by Stripe...
        $paymentMethods = StripePaymentMethod::all(
            ['customer' => $this->stripe_id, 'type' => 'card'] + $parameters,
            $this->stripeOptions()
        );

        return collect($paymentMethods->data)->map(function ($paymentMethod) {
            return new PaymentMethod($this, $paymentMethod);
        });
    }

return new PaymentMethod($this, $paymentMethod);这将不返回任何内容,而不是$ paymentMethod。对我来说,解决方案是用mu用户模型覆盖带区Lib的方式覆盖PaymentMethod。

答案 3 :(得分:0)

问题与条带无关,我认为您正在获取正确的数据,问题在于$ paymentMethod无法编码为JSON,这就是为什么您得到空响应的原因,请尝试添加dd($ paymentMethod);在return语句之前,然后检查结果。