Javascript Laravel Stripe-更改付款方法实例的ID无效

Javascript Laravel Stripe-更改付款方法实例的ID无效,javascript,php,laravel,stripe-payments,credit-card,Javascript,Php,Laravel,Stripe Payments,Credit Card,问题 因此,我希望用户能够更改其卡的详细信息,例如将Visa卡更改为Mastercard。 我遇到一个问题,它无法在updateCard方法中获取$paymentMethod。这没有道理,你能帮我解决这个问题吗 这个方法应该可以使用,因为你可以毫无问题地注册,在我创建的另一个页面上,唯一不同的是我删除了选择订阅类型 输入的数据 卡号|到期年月日| CVC |邮编 5555555544441112033335555555 错误 无法确定要请求的URL:Stripe\PaymentMethod实例的

问题
因此,我希望用户能够更改其卡的详细信息,例如将Visa卡更改为Mastercard。 我遇到一个问题,它无法在updateCard方法中获取$paymentMethod。这没有道理,你能帮我解决这个问题吗

这个方法应该可以使用,因为你可以毫无问题地注册,在我创建的另一个页面上,唯一不同的是我删除了选择订阅类型

输入的数据
卡号|到期年月日| CVC |邮编
5555555544441112033335555555

错误
无法确定要请求的URL:Stripe\PaymentMethod实例的ID无效:

前端代码(updateCard.blade.php)


我怀疑$paymentMethod是空的——特别是因为您似乎在客户端代码中创建了一个令牌而不是paymentMethod。我也这么认为。然而,这仍然没有意义,因为我在前端有一个与代码完全相同的表单,它仍然有效,只是我删除了对计划的选择。后端代码的唯一区别是换卡,这不起作用。您的前端代码创建并填充一个
stripeToken
变量,但不填充
paymentMethod
变量,因此我几乎可以肯定这就是问题所在。您知道如何让它运行并能够选择付款方式吗?因为我只是按照这个教程不确定-该教程似乎只允许卡片输入,而不是以前的卡片选择。您可能需要调试它。
<div class="panel panel-default credit-card-box">
                    <div class="panel-heading display-table">
                        <div class="row display-tr" >
                            <div class="display-td" >                            
                                <img class="img-responsive pull-right" src="http://i76.imgup.net/accepted_c22e0.png">
                            </div>
                        </div>                    
                    </div>
                    <div class="panel-body">
                        <div class="col-md-12">
                            <form action={{ route('card.update') }} method="post" id="paymen-form">
                                @csrf
                                <div class="row">
                                    <div class="col-md-12">
                                        <div class="form-group">
                                            <div id="card-element"></div>
                                        </div>
                                    </div>
                                </div>
                                <div class="form-group">
                                    <button id="card-button" class="btn btn-lg btn-block btn-success btn-order" data-secret="{{ $intent->client_secret }}">Update Card!</button>
                                </div>
                                <div class="row">
                                    <div class="col-md-12">
                                        <span class="payment-errors" id="card-errors" style="color: red;margin-top:10px;"></span>
                                    </div>
                                </div>
                            </form>
                        </div>
                    </div>
                </div>
<script>
    window.ParsleyConfig = {
        errorsWrapper: '<div></div>',
        errorTemplate: '<div class="alert alert-danger parsley" role="alert"></div>',
        errorClass: 'has-error',
        successClass: 'has-success'
    };
</script>
<script src="http://parsleyjs.org/dist/parsley.js"></script>
<script type="text/javascript" src="https://js.stripe.com/v2/"></script>
<script src="https://js.stripe.com/v3/"></script>
<script>
    var style = {
        base: {
            color: '#32325d',
            lineHeight: '18px',
            fontFamily: '"Helvetica Neue", Helvetica, sans-serif',
            fontSmoothing: 'antialiased',
            fontSize: '16px',
            '::placeholder': {
                color: '#aab7c4'
            }
        },
        invalid: {
            color: '#fa755a',
            iconColor: '#fa755a'
        }
    };

    const stripe = Stripe('{{ env("STRIPE_KEY") }}', { locale: 'en' }); // Create a Stripe client.
    const elements = stripe.elements(); // Create an instance of Elements.
    const card = elements.create('card', { style: style }); // Create an instance of the card Element.

    card.mount('#card-element'); // Add an instance of the card Element into the `card-element` <div>.

    card.on('change', function(event) {
        var displayError = document.getElementById('card-errors');
        if (event.error) {
            displayError.textContent = event.error.message;
        } else {
            displayError.textContent = '';
        }
    });

    // Handle form submission.
    var form = document.getElementById('payment-form');
    form.addEventListener('submit', function(event) {
        event.preventDefault();

        stripe.createToken(card).then(function(result) {
            if (result.error) {
                // Inform the user if there was an error.
                var errorElement = document.getElementById('card-errors');
                errorElement.textContent = result.error.message;
            } else {
                // Send the token to your server.
                stripeTokenHandler(result.token);
            }
        });
    });

    // Submit the form with the token ID.
    function stripeTokenHandler(token) {
        // Insert the token ID into the form so it gets submitted to the server
        var form = document.getElementById('payment-form');
        var hiddenInput = document.createElement('input');
        hiddenInput.setAttribute('type', 'hidden');
        hiddenInput.setAttribute('name', 'stripeToken');
        hiddenInput.setAttribute('value', token.id);
        form.appendChild(hiddenInput);

        // Submit the form
        form.submit();
    }
</script>
 public function updateCard(Request $request)
    {
        $user = Auth::user();
        $input = $request->all();
        $token =  $request->stripeToken;
        $paymentMethod = $request->paymentMethod;

        try {
            Stripe\Stripe::setApiKey(env('STRIPE_SECRET'));

            // error_log($input);
            // error_log($token);
            // error_log($paymentMethod);
            // dd($request);


            // $user->deletePaymentMethods();
            // $user->addPaymentMethod($paymentMethod);

            
            // $user->updateDefaultPaymentMethod($user->paymentMethods()->first()->id);
            

            $user->updateDefaultPaymentMethod($paymentMethod);

            return back()->with('success', 'Card details have been updated!');
        } catch (Exception $e) {
            return back()->with('success', $e->getMessage());
        }
    }