Stripe / Laravel“此客户没有附加的付款来源或默认付款方式。”

时间:2020-01-30 01:32:25

标签: php laravel stripe-payments laravel-cashier

这里有很多人遇到相同的问题,除了我在这里可以找到的有关Stripe API有关此问题的所有帖子均来自不推荐使用的Stripe版本,并且代码似乎已经完全更改,因此他们付款方式的附件对我不起作用。我几乎是逐字逐句地直接从Laravel收银员文档中获取代码。

当前在客户端看起来像这样

    <script src="https://js.stripe.com/v3/"></script>
    <script>
        window.addEventListener('load', function() {
            const stripe = Stripe('mystripekey');

            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;

            cardButton.addEventListener('click', async (e) => {
                const { setupIntent, error } = await stripe.confirmCardSetup(
                    clientSecret, {
                        payment_method: {
                            card: cardElement,
                            billing_details: { name: cardHolderName.value }
                        }
                    }
                );
                if (error) {
                    // Display "error.message" to the user...
                } else {
                    alert("it works");
                    $("#paymentForm").submit();
                }
            });
        });
    </script>
@endsection

@section('content')
    <div class="mt-5 border border-secondary rounded container w-25">
        <h3 class="mt-3 text-left font-weight-bold">Upgrade Account</h3>
        {!! Form::open(['action' => 'PaymentController@paymentLeadUser', 'method' => 'POST', 'id' => 'paymentForm']) !!}
            @csrf
                <input value="user_premium" type="hidden">
                <label for="card-holder-name">Card Holder Name:</label>
                <input id="card-holder-name" class="w-100 mb-3" name="card-holder-name" type="text">
                <!-- Stripe Elements Placeholder -->
                <div id="card-element" class="form-control"></div>

                <button id="card-button" class="my-4 btn btn-primary"data-secret="{{ $intent->client_secret }}">
                    Upgrade to Premium
                </button>
        {!! Form::close() !!}
    </div>
@endsection

我的控制器有此代码

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Auth;

class PaymentController extends Controller
{
    public function __construct() {
        $this->middleware('auth');
    }

    public function paymentPage() {
        $user = Auth::user();
        $data = [

            'intent' => $user->createSetupIntent()

        ];

        return view('payment')->with($data);
    }

    public function paymentLeadUser(Request $request) {
        $user = auth()->user();
        $paymentMethod = $request->payment_method;

        $user->newSubscription('default', 'plan_id')->create($paymentMethod);

        return redirect('/userlanding')->with('success', 'User has subscribed successfully!');
    }
}

我不知道为什么它不起作用,它应该可以成功,但是由于某种原因它不能...

任何帮助将不胜感激

0 个答案:

没有答案