我需要进行用户订阅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_id,pm_type,pm_last_four)