firebase.auth를 사용하지 않고 Firestore에서 Stripe 결제를 구현하는 방법
P粉731861241
2023-09-01 22:10:29
<p>Node.js 앱에서 Stripe 결제를 사용하여 WhatsApp 사용자에게 제품을 판매하려고 합니다. </p>
<p>스트라이프 확장 프로그램(stripe/firestore-stripe-paids@0.3.3)을 설치하고 설명서의 지침을 따랐습니다. </p>
<pre class="brush:php;toolbar:false;">const docRef = DB 대기
.collection('고객')
.doc(현재사용자.uid)
.collection('checkout_sessions')
.추가하다({
가격: 'price_1GqIC8HYgolSxxxxxxxxx',
성공_URL: window.location.origin,
cancel_url: window.location.origin,
});
// 확장이 CheckoutSession을 첨부할 때까지 기다립니다.
docRef.onSnapshot((스냅) => {
const { 오류, URL } = snap.data();
if (오류) {
// 클라이언트에 오류를 표시하고 Firebase 콘솔에서 클라우드 함수 로그를 확인합니다.
Alert(`오류가 발생했습니다: ${error.message}`);
}
만약 (URL) {
// Stripe Checkout URL이 있으므로 리디렉션하겠습니다.
창.위치.할당(url);
}
});</pre>
<p>클라우드 콘솔에 다음 오류가 표시됩니다. </p>
<p><code>❗️[오류]: [maxxxxxxxxxA] 문서에 대한 Checkout 세션을 생성하지 못했습니다. 제공된 식별자에 해당 사용자 레코드가 없습니다. </code></p>
<p>Firebase 인증에서 userId를 사용해야 한다는 것을 알았지만, 함수(백엔드 서버)에서 서비스를 실행하고 있기 때문에 인증에 클라이언트/사용자가 없습니다. </p>
<p>(개별) 스트라이프 결제 링크를 만드는 다른 방법이 있나요? 클라이언트 없이 Firebase 인증을 사용할 수 있는 방법이 있나요? </p>
<p>미리 감사드립니다. </p>
<p>인증을 사용해 보았습니다.</p>
<pre class="brush:php;toolbar:false;">"firebase/auth"에서 { getAuth } 가져오기;;
const 인증 = getAuth();
const user = auth.currentUser;</pre>
<p>하지만 다음 오류가 발생합니다. <code>FirebaseError: Firebase: 소스를 통해 호스팅에 배포하지 않을 때 옵션을 제공해야 합니다. (앱/옵션 없음)</code></p>
<p>저는 이것을 시도했습니다: https://stackoverflow.com/a/74732162/21612440</p>
<p>and get<code>TypeError: 정의되지 않은 'getProvider' 속성을 읽을 수 없습니다('getProvider' 읽기)</code></p>
클라우드 기능(원칙적으로)은 현재 인증된 사용자의 컨텍스트 없이 실행됩니다. 따라서 클라우드 기능에서는 각 요청이 다른 사용자로부터 올 수 있으므로
auth.currentUser
는 거의 의미가 없습니다.그러나 여기에서 원하는 UID를 Firestore 데이터베이스에 전달할 수 있습니다
.doc(currentUser.uid)
. 따라서 다른 (안전한) 방법으로 관련 UID를 확인할 수 있는 경우 해당 값을 전달하면 Stripe 확장 프로그램이 해당사용자를 위해 이를 처리합니다.