如何解决使用 Laravel Cashier 的 3D Secure on Stripe 价格不正确
我创建了一个订阅网站。我不知道为什么我的 3D Secure 确认没有优惠的价格。确认显示:0$ 和何时付款。您已成功收取 20 美元。 这是我的控制器:
public function create_checkout_session(Request $request)
{
$this->validate($request,[
'plan' => 'required'
]);
if($request->plan !== config('app.football_price_id')) // Football
{
return redirect()->route('homepage');
}
$data = [
'intent' => auth()->user()->createSetupIntent()
];
return view('subscription.payment')->with($data);
}
这是视图
@extends('layouts.app')
@section('content')
<div class="container">
<div class="row justify-content-center">
<div class="col-md-8">
<div class="card">
<div class="card-header">Payer mon abonnement</div>
<div class="card-body">
<div class="text-center">
<img src="{{ asset('/img/secure-payment.jpg') }}" style="height: 100px;">
</div>
<form id="payment-form" action="{{ route('subscription_payments_store') }}" method="post" class="mt-4">
@csrf
<input type="hidden" name="plan" id="plan" value="{{ request('plan') }}">
<div class="form-group">
<label for="">Nom complet</label>
<input type="text" name="name" id="card-holder-name" class="form-control" value="" placeholder="Nom complet sur la carte">
</div>
<div class="form-group">
<label for="">informations de votre carte bancaires</label>
<div id="card-element"></div>
</div>
<button type="submit" class="btn btn-primary w-100" id="card-button" data-secret="{{ $intent->client_secret }}">Payer</button>
</form>
</div>
</div>
</div>
</div>
</div>
<script src="https://js.stripe.com/v3/"></script>
<script>
const stripe = Stripe('{{ config('cashier.key') }}')
const elements = stripe.elements()
const cardElement = elements.create('card',{
hidePostalCode: true
})
cardElement.mount('#card-element')
const form = document.getElementById('payment-form')
const cardBtn = document.getElementById('card-button')
const cardHolderName = document.getElementById('card-holder-name')
form.addEventListener('submit',async (e) => {
e.preventDefault()
cardBtn.disabled = true
const { setupIntent,error } = await stripe.confirmCardSetup(
cardBtn.dataset.secret,{
payment_method: {
card: cardElement,billing_details: {
name: cardHolderName.value
}
}
}
)
if(error) {
cardBtn.disable = 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();
}
})
</script>
@endsection
如果有人知道这个问题。
config('app.football_price_id') 等于条带产品 ID
这是 3D Secure 的屏幕截图:http://image.noelshack.com/fichiers/2021/11/6/1616246407-capture.png
感谢您花时间阅读本文,或许能帮到我
解决方法
您是否不小心在订阅中配置了试用版?这将有助于显示您的产品、价格和订阅对象。我在您的代码中没有看到任何异常。
编辑:我看到您正在使用 stripe.confirmCardSetup
。这是错误的,您应该改用 stripe.confirmCardPayment
。前者用于设置新卡以备将来重复使用。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。