Best practices for Stripe payment integration. Use when implementing payments, subscriptions, checkout flows, or any monetization feature in games or web apps. Covers CheckoutSessions, Payment Element, subscriptions, and Connect.
게임/웹앱 수익화를 위한 Stripe 결제 통합 가이드.
수익화 유형 → 무엇을 파는가?
├─ 일회성 게임 구매 → CheckoutSessions (one-time)
├─ 인앱 구매/아이템 → CheckoutSessions + metadata
├─ 월정액 구독 → Billing API + CheckoutSessions
├─ 기부/후원 → Payment Links (가장 간단)
└─ 마켓플레이스 → Stripe Connect (destination charges)
// 서버 (Node.js)
const session = await stripe.checkout.sessions.create({
mode: 'payment', // 또는 'subscription'
line_items: [{
price_data: {
currency: 'usd',
product_data: { name: 'Game Premium' },
unit_amount: 999, // $9.99 (센트 단위!)
},
quantity: 1,
}],
success_url: 'https://eastsea.monster/thanks?session_id={CHECKOUT_SESSION_ID}',
cancel_url: 'https://eastsea.monster/games/',
});
// session.url로 리다이렉트
sk_test_ (테스트) 또는 sk_live_ (라이브)인지 명시. 라이브 모드 작업 시 항상 로그에 [LIVE] 태그 출력.unit_amount, currency 값을 수정할 때는 변경 전/후 금액을 Master에게 확인 후 실행. 센트 단위 혼동($9.99 → 999) 주의.STRIPE_WEBHOOK_SECRET 값을 로그, 응답 바디, 클라이언트 코드에 절대 출력하지 않음. 환경 변수로만 관리.stripe.refunds.create(), 구독 cancel() 등 금전 영향 작업은 실행 전 Master 명시적 승인 필수. 자동화 스크립트에서 이 작업 단독 실행 금지.