Здесь есть несколько человек, у которых была такая же проблема, за исключением всех сообщений, которые я мог найти здесь относительно этой проблемы с Stripe API, из устаревшей версии Stripe, и код, кажется, полностью изменился, поэтому их метод оплаты не работает для меня. У меня есть почти слово в слово код непосредственно из документации кассира Laravel.
В настоящее время он выглядит так на стороне клиента;
<script src="https://js.stripe.com/v3/"></script>
<script>
window.addEventListener('load', function() {
const stripe = Stripe('mystripekey');
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;
cardButton.addEventListener('click', async (e) => {
const { setupIntent, error } = await stripe.confirmCardSetup(
clientSecret, {
payment_method: {
card: cardElement,
billing_details: { name: cardHolderName.value }
}
}
);
if (error) {
// Display "error.message" to the user...
} else {
alert("it works");
$("#paymentForm").submit();
}
});
});
</script>
@endsection
@section('content')
<div class="mt-5 border border-secondary rounded container w-25">
<h3 class="mt-3 text-left font-weight-bold">Upgrade Account</h3>
{!! Form::open(['action' => 'PaymentController@paymentLeadUser', 'method' => 'POST', 'id' => 'paymentForm']) !!}
@csrf
<input value="user_premium" type="hidden">
<label for="card-holder-name">Card Holder Name:</label>
<input id="card-holder-name" class="w-100 mb-3" name="card-holder-name" type="text">
<!-- Stripe Elements Placeholder -->
<div id="card-element" class="form-control"></div>
<button id="card-button" class="my-4 btn btn-primary"data-secret="{{ $intent->client_secret }}">
Upgrade to Premium
</button>
{!! Form::close() !!}
</div>
@endsection
Мой контроллер имеет этот код
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Auth;
class PaymentController extends Controller
{
public function __construct() {
$this->middleware('auth');
}
public function paymentPage() {
$user = Auth::user();
$data = [
'intent' => $user->createSetupIntent()
];
return view('payment')->with($data);
}
public function paymentLeadUser(Request $request) {
$user = auth()->user();
$paymentMethod = $request->payment_method;
$user->newSubscription('default', 'plan_id')->create($paymentMethod);
return redirect('/userlanding')->with('success', 'User has subscribed successfully!');
}
}
Я не знаю, почему это не работает, оно должно быть успешным, но по некоторым причинам это не так ...
Любая помощь будет принята с благодарностью