Laravel Cashier Stripe 错误default_ payment_method

问题描述 投票:0回答:1

我需要进行用户订阅Stripe。我使用支付页面:

 public function paymentForm()
{
    $id = \request()->get('id');

    $plan = Plan::find(1);
    $intent = auth()->user()->createSetupIntent();

    return view("user.subscription", compact("plan", "intent", "id"));
}

//Post action
public function subscription(Request $request)
{
    $plan = Plan::where('slug', 'standart')->first();

    $subscription = $request->user()
        ->newSubscription($plan->slug, $plan->stripe_plan)
        ->create($request->paymentMethod);

    $subscription->ends_at = Carbon::now()->addDays(6);
    $subscription->save();

    return redirect()->to('user/payment');
}

发送表单后,我收到以下错误:尝试读取 null 上的属性“default_ payment_method”。

dd($request->paymentMethod); //pm_1OWfTrIDQRzGQKp4IDkRK2Gi

JS代码:

    <script src="https://js.stripe.com/v3/"></script>
<script>
    const stripe = Stripe('{{ env('STRIPE_KEY') }}')
    const elements = stripe.elements()
    const cardElement = elements.create('card');
    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', 'paymentMethod')
            token.setAttribute('value', setupIntent.payment_method)
            form.appendChild(token)
            form.submit();
        }
    })
</script>

数据令牌是在客户端生成的,但由于某种原因发生了错误。

stripe-payments laravel-10 laravel-cashier
1个回答
0
投票

不起作用。需要清除用户表中的字段(stripe_id,pm_type,pm_last_four)

© www.soinside.com 2019 - 2024. All rights reserved.