微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决Laravel Stripe-更改付款方式实例的ID无效

问题
因此,我希望用户能够更改其卡详细信息,例如将Visa卡更改为Mastercard。 即时通讯遇到问题,无法在updateCard方法中获得 $ paymentMethod 。这没有道理,您能帮我解决此问题吗?

方法应该有效,因为您可以毫无问题地进行注册,在我创建的另一页上,唯一的区别是我删除了选择订阅类型。

输入的数据
卡号|到期MM / YY | CVC |邮政编码
5555555555554444 11 20 333 55555

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

前端代码(updateCard.blade.PHP

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

后端代码(SubscriptionController.PHP

 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());
        }
    }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。