如何解决在 Stripe 中更新信用卡
我尝试了一些解决方案,但无法创建正确的表单来更新信用卡。 我创建了一个特殊页面来管理信用卡更新。
另外,我想了解什么时候自动续订您的信用卡已过期或“失败”,会发生什么?订阅是否继续进行 X 次尝试?
现在,我的代码如下:
控制器
public function setupPayment(){
return view('update-card',[
'intent' => Auth::user()->createSetupIntent()
]);
}
public function updateExistingCreditCard(Request $request){
$key = \config('services.stripe.secret');
$stripe = new \Stripe\StripeClient($key);
$this->validate($request,[
'address' => 'nullable','name' => 'nullable'
]);
$user = Cashier::findBillable(Auth::user()->stripe_id);
//$user = Auth::user()->asstripeCustomer();
if($user->hasDefaultPaymentMethod()){
$stripe->customers->updateSource(
$user->stripe_id,$user->id,['name' => 'Jenny Rosen']
);
return redirect()->back()->with('success','Update.');
}
return redirect()->back()->with('danger','Error.');
}
HTML
<form id="payment-form" action="{{ route('update.new.credit.card') }}" method="POST">
@csrf
<div class="row">
<div class="col-lg-6">
<div class="card">
<div class="card-header">
{{ __('Update Card') }}
</div>
<div class="card-body">
<input id="card-holder-name" type="text">
<!-- Stripe Elements Placeholder -->
<div id="card-element"></div>
<button id="card-button" data-secret="{{ $intent->client_secret }}">
Update Payment Method
</button>
</div>
</div>
</div>
</div>
</form>
const stripe = Stripe('{{ config('cashier.key') }}');
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) {
document.getElementById('card-button').disabled = false
} else {
let token = document.createElement('input')
token.setAttribute('type','hidden')
token.setAttribute('name','token')
token.setAttribute('value',setupIntent.payment_method)
form.appendChild(token)
form.submit();
}
});
更新
在这个新代码中,通过插入元数据字段,它们被正确更新,所以我猜代码是正确的。我可能对传递给更新卡并将其默认给客户的参数有误。
$stripeCustomer = Auth::user()->asstripeCustomer();
$paymentMethod = $stripe->customers->retrieve($stripeCustomer->id)->invoice_settings->default_payment_method;
if(Auth::user()->hasDefaultPaymentMethod()){
$stripe->customers->update($stripeCustomer->id,[
['invoice_settings' => ['default_payment_method' => $paymentMethod]]
]);
return redirect()->back()->with('success','Update.');
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。