我知道这是一个常见错误,但是在我发现的任何帖子中都找不到解决方案。
这是应该将付款方式数据传递到的控制器方法:
public function subscribe(Request $request)
{
$user = Auth::user();
$paymentMethod = $request->paymentMethod;
$plan = $request->planId;
// 'create' method will automatically store customers payment method
$user->newSubscription('subscription', $request->plan)->create($paymentMethod, [
'email' => $user->email
]);
redirect()
->route('confirmation')
->with('subscriptionSuccessMessage', 'You have successfully subscribed. See you around!');
}
当我死亡并转储付款方式:dd($paymentMethod)
时,将返回空值。计划也是如此:dd($plan)
。
因此,似乎数据无法通过Axios正确传递到后端。
<select class="form-control" name="plan" id="plans">
<option selected value="">Choose a plan</option>
@foreach($plans as $planId => $planName)
<option value="{{ $planId }}">{{ $planName }}</option>
@endforeach
</select>
<script>
window.addEventListener('load', function()
{
const stripe = Stripe("{{ config('services.stripe.public') }}");
const elements = stripe.elements();
const cardElement = elements.create('card');
cardElement.mount('#card-element');
const cardHolderName = document.getElementById('card-holder-name');
const cardButton = document.getElementById('card-button');
const clientSecret = cardButton.dataset.secret;
const planId = document.getElementById('plans').value;
cardButton.addEventListener('click', async (e) => {
const { setupIntent, error } = await stripe.confirmCardSetup(
clientSecret, {
payment_method: {
card: cardElement,
billing_details: { name: cardHolderName.value }
}
}
);
if (error) {
console.log('error', error.message);
} else {
console.log('success', setupIntent.payment_method);
axios.post('/subscribe', {
paymentMethod: setupIntent.payment_method,
planId: planId
})
}
});
});
</script>
我不熟悉Axios,但这不行吗?
P.S。 Axios列在我的package.json文件中。
运行dd($request)
时获得的请求对象已附加