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

使用 Laravel Cashier 的 3D Secure on Stripe 价格不正确

如何解决使用 Laravel Cashier 的 3D Secure on Stripe 价格不正确

我创建了一个订阅网站。我不知道为什么我的 3D Secure 确认没有优惠的价格。确认显示:0$ 和何时付款。您已成功收取 20 美元。 这是我的控制器:

public function create_checkout_session(Request $request)
{
    $this->validate($request,[
        'plan' => 'required'
    ]);

    if($request->plan !== config('app.football_price_id')) // Football
    {
        return redirect()->route('homepage');
    }

    $data = [
        'intent' => auth()->user()->createSetupIntent()
    ];

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

这是视图

@extends('layouts.app')

@section('content')
<div class="container">
    <div class="row justify-content-center">
        <div class="col-md-8">
            <div class="card">
                <div class="card-header">Payer mon abonnement</div>
                <div class="card-body">
                    <div class="text-center">
                        <img src="{{ asset('/img/secure-payment.jpg') }}" style="height: 100px;">
                    </div>
                    <form id="payment-form" action="{{ route('subscription_payments_store') }}" method="post" class="mt-4">
                        @csrf
                        <input type="hidden" name="plan" id="plan" value="{{ request('plan') }}">
                        <div class="form-group">
                            <label for="">Nom complet</label>
                            <input type="text" name="name" id="card-holder-name" class="form-control" value="" placeholder="Nom complet sur la carte">
                        </div>
                        <div class="form-group">
                            <label for="">informations de votre carte bancaires</label>
                            <div id="card-element"></div>
                        </div>

                        <button type="submit" class="btn btn-primary w-100" id="card-button" data-secret="{{ $intent->client_secret }}">Payer</button>
                    </form>
                </div>
            </div>
        </div>
    </div>
</div>

<script src="https://js.stripe.com/v3/"></script>
<script>
    const stripe = Stripe('{{ config('cashier.key') }}')

    const elements = stripe.elements()
    const cardElement = elements.create('card',{
        hidePostalCode: true
    })

    cardElement.mount('#card-element')

    const form = document.getElementById('payment-form')
    const cardBtn = document.getElementById('card-button')
    const cardHolderName = document.getElementById('card-holder-name')

    form.addEventListener('submit',async (e) => {
        e.preventDefault()

        cardBtn.disabled = true
        const { setupIntent,error } = await stripe.confirmCardSetup(
            cardBtn.dataset.secret,{
                payment_method: {
                    card: cardElement,billing_details: {
                        name: cardHolderName.value
                    }
                }
            }
        )

        if(error) {
            cardBtn.disable = false
        } else {
            let token = document.createElement('input')

            token.setAttribute('type','hidden')
            token.setAttribute('name','token')
            token.setAttribute('value',setupIntent.payment_method)

            form.appendChild(token)
            form.submit();
        }
    })
</script>
@endsection

如果有人知道这个问题。

config('app.football_price_id') 等于条带产品 ID

这是 3D Secure 的屏幕截图:http://image.noelshack.com/fichiers/2021/11/6/1616246407-capture.png

感谢您花时间阅读本文,或许能帮到我

解决方法

您是否不小心在订阅中配置了试用版?这将有助于显示您的产品、价格和订阅对象。我在您的代码中没有看到任何异常。

编辑:我看到您正在使用 stripe.confirmCardSetup。这是错误的,您应该改用 stripe.confirmCardPayment。前者用于设置新卡以备将来重复使用。

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