Stripe에 0.00 양을 표시합니다.
P粉237125700
2023-07-31 14:36:38
<p>저는 사용자가 한 번의 결제로 다양한 유료 요금제를 구독하는 Stripe를 사용하고 있습니다. 결제는 성공적으로 이루어졌는데, 가장 큰 문제는 3D Secure 결제 과정(유럽에서 운영하고 있으며 3D Secure 결제 확인은 필수) 중에 사용자에게 표시되는 금액이 0,00이라는 것입니다. 이는 잘못된 것일 뿐만 아니라, 더 중요한 것은 결제하려는 사람이 혼란스러워진다는 것입니다.</p>
<pre class="brush:php;toolbar:false;">공개 기능 구매(요청 $request, 계획 $plan)
{
$user = $request->user();
$결제방법 = $request->input('결제_방법');
$encryptedSystemId = $request->input('system_id');
$encryptedBoxId = $request->input('box_id');
// 암호화된 ID를 복호화합니다.
$systemId = 암호화::decrypt($encryptedSystemId);
$boxId = 암호화::decrypt($encryptedBoxId);
// ID와 사용자 인증을 확인합니다.
$system = 시스템::findOrFail($systemId);
$box = Box::findOrFail($boxId);
$total = $계획->가격;
노력하다 {
$user->createOrGetStripeCustomer();
$user->updateDefaultPaymentMethod($결제 방법);
$user->charge($total * 100, $지불 방법, [
'메타데이터' =>
['시스템_ID' => $시스템ID,
'박스_ID' => $상자ID,
'tenant_id'=> $user->테넌트->id,
]
]); // * Stripe은 센트를 다루기 때문에 100입니다.
} 잡기(예외 $예외) {
return back()->with('error', '결제 처리 중 오류 발생: ' . $Exception->getMessage());
}
<script src="https://js.stripe.com/v3/"></script>
<스크립트>
let 스트라이프 = 스트라이프("{{ env('STRIPE_KEY') }}")
요소 = 스트라이프.요소()
스타일 = {
기본: {
색상: '#32325d',
글꼴 패밀리: '"Helvetica Neue", Helvetica, sans-serif',
글꼴 스무딩: '안티앨리어싱됨',
글꼴 크기: '16px',
'::자리 표시자': {
색상: '#aab7c4'
}
},
유효하지 않은: {
색상: '#fa755a',
아이콘색상: '#fa755a'
}
}
카드 = elements.create('카드', {
스타일: 스타일
})
카드.마운트('#카드-요소')
결제 방법 = null로 설정
$('.card-form').on('제출', function(e) {
$('#pay-btn').attr('비활성화', true)
if (결제 방법) {
true를 반환
}
스트라이프.확인카드 설정(
"{{ $intent->client_secret }}", {
결제 방법: {
카드: 카드,
결제 세부 정보: {
이름: $('.card_holder_name').val()
}
}
}
).then(함수(결과) {
if (결과.오류) {
toastr.error(
'__("대여.입력한 데이터에 오류가 있습니다! 검토
그것을 다시 시도하세요")')
$('#pay-btn').removeAttr('비활성화됨')
}또 다른 {
지불 방식 = result.setupIntent.지불_방법
$('.지불 방법').val(지불 방법)
$('.card-form').제출()
$('span.icon').removeAttr('숨김');
$('#pay-btn').attr('비활성화', true)
}
})
거짓을 반환하다
})
<div class="tab-content mt-4 " id="card-tab" style="display:none">
<form method="POST" action="{{ 경로('rentals.purchase', $plan) }}"
class="card-form mt-3 mb-3">
@csrf
<input type="hidden" name="결제_방법" 클래스="결제 방법">
<input type="hidden" name="system_id" value="{{ encrypt($system->id) }}">
<input type="hidden" name="box_id" value="{{ encrypt($box->id) }}">
<div class="mb-4">
<input class="StripeElement form-input px-4 py-3 rounded-lg w-full"
name="card_holder_name" placeholder="{{ __('rental.Cardholder"
이름') }}">
</div>
<div>
<div id="card-element"></div>
</div>
<div id="card-errors" role="alert"></div>
<div class="mt-3 text-center">
<button type="submit" class="bg-red-500 text-whitefont-bold py-2 px-4 rounded" id="pay-btn">{{ __('rental.Pay') } } {{ $plan->price }} € <span class="icon" Hidden><i class="fas fa-sync fa-spin"></i></span></button>
</div>
</양식>
</div>
그리고 이건 내가 디버깅할 때
#_originalValues: 배열:39 [▼
"ID" => "pi_3NZqdIC6ZwDjQHNX1R7KJLoO"
"개체" => "지불_의도"
"금액" => 100
"amount_capturable" => 0
"amount_details" => 배열:1 [▼
"팁" => []
]
"수취금액" => 100</pre>
<p><br /></p>
제공한 코드에 따라 SetupIntents를 사용하여 결제 방법 세부정보를 수집하고 있습니다. SetupIntents는 나중에 사용할 결제 방법 세부 정보를 수집하는 데 사용됩니다(https://stripe.com/docs/paids/save-and-reuse). 결제 방법을 수집할 때 카드에 금액이 청구되지 않으므로 3DS가 필요한 경우 금액은 0.00이 될 것으로 예상합니다.
구독 기능을 사용하시는 경우, https://stripe.com/docs/billing/subscriptions/build-subscriptions?ui=elements 가이드에 따라 결제 시 결제 수단을 수집하고 저장하셔야 합니다.
일시성 결제를 사용하는 경우, 결제와 동시에 결제 수단 정보를 수집하고 저장할 수 있습니다: https://stripe.com/docs/paids/save-during-pay.