Stripe \ Exception \ InvalidRequestException此客户没有附加的付款来源或默认付款方式

时间:2020-04-08 03:18:37

标签: javascript laravel axios stripe-payments laravel-cashier

enter image description here我知道这是一个常见错误,但是在我发现的任何帖子中都找不到解决方案。

这是应该将付款方式数据传递到的控制器方法:

public function subscribe(Request $request)
    {
        $user = Auth::user();
        $paymentMethod = $request->paymentMethod;
        $plan = $request->planId;

        // 'create' method will automatically store customers payment method
        $user->newSubscription('subscription', $request->plan)->create($paymentMethod, [
            'email' => $user->email
        ]); 

        redirect()
        ->route('confirmation')
        ->with('subscriptionSuccessMessage', 'You have successfully subscribed. See you around!');
    }

当我死亡并转储付款方式:dd($paymentMethod)时,将返回空值。计划也是如此:dd($plan)

因此,似乎数据无法通过Axios正确传递到后端。

<select class="form-control" name="plan" id="plans">
            <option selected value="">Choose a plan</option>
            @foreach($plans as $planId => $planName)
                <option value="{{ $planId }}">{{ $planName }}</option>
            @endforeach
        </select>

<script>
      window.addEventListener('load', function() 
      {
        const stripe = Stripe("{{ config('services.stripe.public') }}");

        const elements = stripe.elements();
        const cardElement = elements.create('card');

        cardElement.mount('#card-element');

        const cardHolderName = document.getElementById('card-holder-name');
        const cardButton = document.getElementById('card-button');
        const clientSecret = cardButton.dataset.secret;

        const planId = document.getElementById('plans').value;

        cardButton.addEventListener('click', async (e) => {
            const { setupIntent, error } = await stripe.confirmCardSetup(
                clientSecret, {
                    payment_method: {
                        card: cardElement,
                        billing_details: { name: cardHolderName.value }
                    }
                }
            );

            if (error) {
                console.log('error', error.message);
            } else {
                console.log('success', setupIntent.payment_method);

                axios.post('/subscribe', {
                    paymentMethod: setupIntent.payment_method,
                    planId: planId
                }) 
            }
        });
        });
  </script>

我不熟悉Axios,但这不行吗?

P.S。 Axios列在我的package.json文件中。

运行dd($request)时获得的请求对象已附加

0 个答案:

没有答案