Stripe \ Exception \ InvalidRequestException У этого клиента нет подключенного источника платежа или способа оплаты по умолчанию - PullRequest
0 голосов
/ 08 апреля 2020

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!');
    }

Когда я d ie и дампа метода оплаты: dd($paymentMethod), ноль значение возвращается. То же самое относится и к плану: dd($plan).

Итак, похоже, данные не передаются на сервер правильно с Ax ios.

<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>

Я незнаком с Топором ios, но разве это не должно работать?

PS Ax ios указан в моем пакете. json файл.

Прилагается объект запроса, который я получаю при запуске dd($request)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...