如何解决Laravel Stripe-更改付款方式实例的ID无效
问题
因此,我希望用户能够更改其卡详细信息,例如将Visa卡更改为Mastercard。
即时通讯遇到问题,无法在updateCard方法中获得 $ paymentMethod 。这没有道理,您能帮我解决此问题吗?
此方法应该有效,因为您可以毫无问题地进行注册,在我创建的另一页上,唯一的区别是我删除了选择订阅类型。
输入的数据
卡号|到期MM / YY | CVC |邮政编码
5555555555554444 11 20 333 55555
错误
无法确定要请求的URL:Stripe \ PaymentMethod实例具有无效的ID:
<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>
后端代码(SubscriptionController.PHP)
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());
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。