Javascript Laravel Stripe-更改付款方法实例的ID无效
问题Javascript Laravel Stripe-更改付款方法实例的ID无效,javascript,php,laravel,stripe-payments,credit-card,Javascript,Php,Laravel,Stripe Payments,Credit Card,问题 因此,我希望用户能够更改其卡的详细信息,例如将Visa卡更改为Mastercard。 我遇到一个问题,它无法在updateCard方法中获取$paymentMethod。这没有道理,你能帮我解决这个问题吗 这个方法应该可以使用,因为你可以毫无问题地注册,在我创建的另一个页面上,唯一不同的是我删除了选择订阅类型 输入的数据 卡号|到期年月日| CVC |邮编 5555555544441112033335555555 错误 无法确定要请求的URL:Stripe\PaymentMethod实例的
因此,我希望用户能够更改其卡的详细信息,例如将Visa卡更改为Mastercard。 我遇到一个问题,它无法在updateCard方法中获取$paymentMethod。这没有道理,你能帮我解决这个问题吗 这个方法应该可以使用,因为你可以毫无问题地注册,在我创建的另一个页面上,唯一不同的是我删除了选择订阅类型 输入的数据
卡号|到期年月日| CVC |邮编
5555555544441112033335555555 错误
无法确定要请求的URL:Stripe\PaymentMethod实例的ID无效: 前端代码(updateCard.blade.php)
我怀疑$paymentMethod是空的——特别是因为您似乎在客户端代码中创建了一个令牌而不是paymentMethod。我也这么认为。然而,这仍然没有意义,因为我在前端有一个与代码完全相同的表单,它仍然有效,只是我删除了对计划的选择。后端代码的唯一区别是换卡,这不起作用。您的前端代码创建并填充一个
stripeToken
变量,但不填充paymentMethod
变量,因此我几乎可以肯定这就是问题所在。您知道如何让它运行并能够选择付款方式吗?因为我只是按照这个教程不确定-该教程似乎只允许卡片输入,而不是以前的卡片选择。您可能需要调试它。
<div class="panel panel-default credit-card-box">
<div class="panel-heading display-table">
<div class="row display-tr" >
<div class="display-td" >
<img class="img-responsive pull-right" src="http://i76.imgup.net/accepted_c22e0.png">
</div>
</div>
</div>
<div class="panel-body">
<div class="col-md-12">
<form action={{ route('card.update') }} method="post" id="paymen-form">
@csrf
<div class="row">
<div class="col-md-12">
<div class="form-group">
<div id="card-element"></div>
</div>
</div>
</div>
<div class="form-group">
<button id="card-button" class="btn btn-lg btn-block btn-success btn-order" data-secret="{{ $intent->client_secret }}">Update Card!</button>
</div>
<div class="row">
<div class="col-md-12">
<span class="payment-errors" id="card-errors" style="color: red;margin-top:10px;"></span>
</div>
</div>
</form>
</div>
</div>
</div>
<script>
window.ParsleyConfig = {
errorsWrapper: '<div></div>',
errorTemplate: '<div class="alert alert-danger parsley" role="alert"></div>',
errorClass: 'has-error',
successClass: 'has-success'
};
</script>
<script src="http://parsleyjs.org/dist/parsley.js"></script>
<script type="text/javascript" src="https://js.stripe.com/v2/"></script>
<script src="https://js.stripe.com/v3/"></script>
<script>
var style = {
base: {
color: '#32325d',
lineHeight: '18px',
fontFamily: '"Helvetica Neue", Helvetica, sans-serif',
fontSmoothing: 'antialiased',
fontSize: '16px',
'::placeholder': {
color: '#aab7c4'
}
},
invalid: {
color: '#fa755a',
iconColor: '#fa755a'
}
};
const stripe = Stripe('{{ env("STRIPE_KEY") }}', { locale: 'en' }); // Create a Stripe client.
const elements = stripe.elements(); // Create an instance of Elements.
const card = elements.create('card', { style: style }); // Create an instance of the card Element.
card.mount('#card-element'); // Add an instance of the card Element into the `card-element` <div>.
card.on('change', function(event) {
var displayError = document.getElementById('card-errors');
if (event.error) {
displayError.textContent = event.error.message;
} else {
displayError.textContent = '';
}
});
// Handle form submission.
var form = document.getElementById('payment-form');
form.addEventListener('submit', function(event) {
event.preventDefault();
stripe.createToken(card).then(function(result) {
if (result.error) {
// Inform the user if there was an error.
var errorElement = document.getElementById('card-errors');
errorElement.textContent = result.error.message;
} else {
// Send the token to your server.
stripeTokenHandler(result.token);
}
});
});
// Submit the form with the token ID.
function stripeTokenHandler(token) {
// Insert the token ID into the form so it gets submitted to the server
var form = document.getElementById('payment-form');
var hiddenInput = document.createElement('input');
hiddenInput.setAttribute('type', 'hidden');
hiddenInput.setAttribute('name', 'stripeToken');
hiddenInput.setAttribute('value', token.id);
form.appendChild(hiddenInput);
// Submit the form
form.submit();
}
</script>
public function updateCard(Request $request)
{
$user = Auth::user();
$input = $request->all();
$token = $request->stripeToken;
$paymentMethod = $request->paymentMethod;
try {
Stripe\Stripe::setApiKey(env('STRIPE_SECRET'));
// error_log($input);
// error_log($token);
// error_log($paymentMethod);
// dd($request);
// $user->deletePaymentMethods();
// $user->addPaymentMethod($paymentMethod);
// $user->updateDefaultPaymentMethod($user->paymentMethods()->first()->id);
$user->updateDefaultPaymentMethod($paymentMethod);
return back()->with('success', 'Card details have been updated!');
} catch (Exception $e) {
return back()->with('success', $e->getMessage());
}
}