<p>我正在使用Stripe,在这里用户通过一次付款订阅不同的付费计划。付款成功进行,但主要问题是在3D Secure付款过程中(我们在欧洲运营,3D Secure付款检查是强制性的),显示给用户的金额是0,00。这不仅是错误的,更重要的是,对即将进行付款的人来说是令人困惑的。</p>
公共函数purchase(Request $request, Plan $plan)
{
$user = $request->user();
$ paymentMethod = $ request - > input(' payment_method');
$encryptedSystemId = $request->input('system_id');
$encryptedBoxId = $request->input('box_id');
// 解密加密的ID
$systemId = Crypt::decrypt($encryptedSystemId);
$boxId = Crypt::decrypt($encryptedBoxId);
// 验证ID和用户授权
$system = System::findOrFail($systemId);
$box = Box::findOrFail($boxId);
$总计 = $计划->价格;
尝试 {
$user->createOrGetStripeCustomer();
$user->updateDefaultPaymentMethod($ paymentMethod);
$user->charge($total * 100, $ paymentMethod, [
'元数据' =>
['系统ID' => $系统ID,
'box_id' => $boxId,
'租户id'=> $用户->租户->id,
]
]); // * 100 因为 Stripe 处理的是美分
} catch (异常$异常) {
return back()->with('error', '处理付款时出错:' . $exception->getMessage());
}
<脚本 src="https://js.stripe.com/v3/"></script>
<脚本>
让 stripe = Stripe("{{ env('STRIPE_KEY') }}")
让元素 = stripe.elements()
让样式= {
根据: {
颜色: '#32325d',
fontFamily: '"Helvetica Neue", Helvetica, sans-serif',
fontSmoothing: '抗锯齿',
字体大小:'16px',
'::占位符': {
颜色:'#aab7c4'
}
},
无效的: {
颜色: '#fa755a',
图标颜色:'#fa755a'
}
}
让卡 = elements.create('卡', {
风格: 风格
})
卡.mount('#card-element')
让 paymentMethod = null
$('.card-form').on('提交', function(e) {
$('#pay-btn').attr('已禁用', true)
if (付款方式) {
返回真
}
stripe.confirmCardSetup(
"{{ $intent->client_secret }}", {
付款方式: {
卡: 卡,
结算明细: {
名称:$('.card_holder_name').val()
}
}
}
).then(函数(结果) {
if (结果.错误) {
toastr.错误(
'__("出租。您输入的数据有错误!请审核
然后再试一次")')
$('#pay-btn').removeAttr('已禁用')
}别的 {
paymentMethod = result.setupIntent. payment_method
$('.支付方法').val(支付方法)
$('.card-form').submit()
$('span.icon').removeAttr('隐藏');
$('#pay-btn').attr('已禁用', true)
}
})
返回错误
})
<div id="card-errors" role="alert"></div>
<div class="mt-3 text-center">
根据您提供的代码,您正在使用SetupIntents来收集付款方式的详细信息。SetupIntents用于收集用于将来使用的付款方式详细信息:https://stripe.com/docs/payments/save-and-reuse。预计如果需要3DS,则金额为0.00,因为您在收集付款方式时不会对卡片收取任何金额。
如果您正在使用订阅功能,您应该按照此指南进行操作:https://stripe.com/docs/billing/subscriptions/build-subscriptions?ui=elements,在付款时收集和保存付款方式。
如果您正在使用一次性付款,则可以在付款同时收集和保存付款方式的详细信息:https://stripe.com/docs/payments/save-during-payment。