这里有很多人遇到相同的问题,除了我在这里可以找到的有关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!');
}
}
我不知道为什么它不起作用,它应该可以成功,但是由于某种原因它不能...
任何帮助将不胜感激