무료 도구 · STRIPE 테스트 카드

Stripe 테스트 카드 번호

찾는 번호는 4242 4242 4242 4242입니다. CVC는 아무 세 자리(American Express는 네 자리), 유효기간은 12/34 같은 미래 날짜, 나머지 칸은 아무 값이나 넣으면 되고, Stripe 테스트 API 키에서만 동작합니다. 아래 표에는 2026년 9월 26일 Stripe 공식 테스트 문서와 대조한 테스트 카드 119장이 있습니다. 국가별 64장을 포함해 모든 설명을 한국어로 옮겼습니다. 검색하고, 번호를 눌러 복사하고, 전체를 JSON이나 CSV로 내려받으세요. 실패 카드마다 에러 코드, 거절 코드, 웹훅 이벤트를 한 줄에 적었습니다. 공식 문서에서는 세 페이지에 흩어져 있는 정보입니다. 한국 카드 행은 없습니다. 이유는 아래에 적었습니다.

무료가입 불필요카드 119장JSON + CSV 다운로드

다른 언어:English繁體中文日本語한국어EspañolFrançaisDeutschPortuguês (Brasil)

stripe · 테스트 카드

번호를 누르면 공백 없이 복사됩니다. 아무것도 전송되지 않습니다 — 표와 다운로드 파일은 이 페이지 안에서 만들어집니다. 다운로드는 현재 필터를 따르므로 거절 카드만 따로 내보낼 수도 있습니다.

카드 번호재현하는 상황브랜드PaymentMethod코드와 이벤트
결제 성공 · 카드 브랜드별 · 15
임의의 3자리 · 미래의 아무 날짜 결제 성공 Visa pm_card_visa —payment_intent.succeeded
임의의 3자리 · 미래의 아무 날짜 체크카드(데빗) 결제 성공 Visa (debit) pm_card_visa_debit —payment_intent.succeeded
임의의 3자리 · 미래의 아무 날짜 결제 성공 Mastercard pm_card_mastercard —payment_intent.succeeded
임의의 3자리 · 미래의 아무 날짜 2-시리즈 BIN 카드로 결제 성공 Mastercard (2-series) — —payment_intent.succeeded
임의의 3자리 · 미래의 아무 날짜 체크카드(데빗) 결제 성공 Mastercard (debit) pm_card_mastercard_debit —payment_intent.succeeded
임의의 3자리 · 미래의 아무 날짜 선불카드 결제 성공 Mastercard (prepaid) pm_card_mastercard_prepaid —payment_intent.succeeded
임의의 4자리 · 미래의 아무 날짜 결제 성공(15자리, CVC 4자리) American Express pm_card_amex —payment_intent.succeeded
임의의 4자리 · 미래의 아무 날짜 결제 성공, 두 번째 Amex BIN American Express — —payment_intent.succeeded
임의의 3자리 · 미래의 아무 날짜 결제 성공 Discover pm_card_discover —payment_intent.succeeded
임의의 3자리 · 미래의 아무 날짜 19자리 카드 번호로 결제 성공 UnionPay (19-digit) — —payment_intent.succeeded
임의의 3자리 · 미래의 아무 날짜 결제 성공 Diners Club pm_card_diners —payment_intent.succeeded
임의의 3자리 · 미래의 아무 날짜 14자리 카드 번호로 결제 성공 Diners Club (14-digit) — —payment_intent.succeeded
임의의 3자리 · 미래의 아무 날짜 결제 성공 JCB pm_card_jcb —payment_intent.succeeded
임의의 3자리 · 미래의 아무 날짜 결제 성공 UnionPay pm_card_unionpay —payment_intent.succeeded
임의의 3자리 · 미래의 아무 날짜 프랑스 공동 브랜드 카드(Cartes Bancaires)로 결제 성공 Cartes Bancaires / Visa pm_card_visa_cartesBancaires —payment_intent.succeeded
거절 · 10
임의의 3자리 · 미래의 아무 날짜 일반 거절 Visa pm_card_visa_chargeDeclined card_declineddecline_code generic_declinepayment_intent.payment_failed
임의의 3자리 · 미래의 아무 날짜 잔액 부족으로 거절 Visa pm_card_visa_chargeDeclinedInsufficientFunds card_declineddecline_code insufficient_fundspayment_intent.payment_failed
임의의 3자리 · 미래의 아무 날짜 분실 카드로 거절 Visa pm_card_visa_chargeDeclinedLostCard card_declineddecline_code lost_cardpayment_intent.payment_failed
임의의 3자리 · 미래의 아무 날짜 도난 카드로 거절 Visa pm_card_visa_chargeDeclinedStolenCard card_declineddecline_code stolen_cardpayment_intent.payment_failed
임의의 3자리 · 미래의 아무 날짜 유효기간 만료로 거절 Visa pm_card_chargeDeclinedExpiredCard expired_cardpayment_intent.payment_failed
임의의 3자리 · 미래의 아무 날짜 CVC 불일치로 거절(CVC를 보내야 검사됨) Visa pm_card_chargeDeclinedIncorrectCvc incorrect_cvcpayment_intent.payment_failed
임의의 3자리 · 미래의 아무 날짜 처리 오류로 거절 Visa pm_card_chargeDeclinedProcessingError processing_errorpayment_intent.payment_failed
임의의 3자리 · 미래의 아무 날짜 잘못된 번호 — 일부러 Luhn 검사에 실패하는 번호 Visa — incorrect_number이벤트 없음 — API 단계 전에 거부됨
임의의 3자리 · 미래의 아무 날짜 결제 시도 한도 초과로 거절 Visa pm_card_visa_chargeDeclinedVelocityLimitExceeded card_declineddecline_code card_velocity_exceededpayment_intent.payment_failed
임의의 3자리 · 미래의 아무 날짜 Customer에 연결은 되지만 결제하면 거절 Visa pm_card_chargeCustomerFail card_declinedpayment_intent.payment_failed
Radar · 사기 방지 · 주소 확인 · 9
임의의 3자리 · 미래의 아무 날짜 최고 위험 — Radar가 항상 차단 Visa pm_card_radarBlock card_declineddecline_code generic_declinepayment_intent.payment_failed
임의의 3자리 · 미래의 아무 날짜 위험도 "highest" — 규칙에 따라 Radar가 차단할 수 있음 Visa pm_card_riskLevelHighest card_declineddecline_code generic_declinepayment_intent.payment_failed
임의의 3자리 · 미래의 아무 날짜 위험도 "elevated" — Radar가 수동 검토 대기열에 올릴 수 있음 Visa pm_card_riskLevelElevated —review.opened
임의의 3자리 · 미래의 아무 날짜 사기 분쟁 점수가 높음 Visa pm_card_highFraudDisputeScore —review.opened
임의의 3자리 · 미래의 아무 날짜 조기 사기 경고(EFW) 점수가 높음 Visa pm_card_highEfwScore —review.opened
임의의 3자리 · 미래의 아무 날짜 무료 체험 악용 — 해당 제어를 켜면 차단 Visa pm_card_freeTrialAbuseBlock card_declineddecline_code generic_declinepayment_intent.payment_failed
임의의 3자리 · 미래의 아무 날짜 CVC 검사 실패(CVC를 보낼 때만) Visa pm_card_cvcCheckFail card_declineddecline_code generic_declinepayment_intent.payment_failed
임의의 3자리 · 미래의 아무 날짜 우편번호 검사 실패(우편번호를 보낼 때만) Visa pm_card_avsZipFail card_declineddecline_code generic_declinepayment_intent.payment_failed
임의의 3자리 · 미래의 아무 날짜 우편번호와 주소 1행 검사가 모두 실패 Visa pm_card_avsFail card_declineddecline_code generic_declinepayment_intent.payment_failed
분쟁과 사기 경고 · 8
임의의 3자리 · 미래의 아무 날짜 결제 성공 후 사기(fraudulent) 분쟁 발생 Visa pm_card_createDispute —charge.dispute.created
임의의 3자리 · 미래의 아무 날짜 Discover 카드로 결제 성공 후 사기 분쟁 발생 Discover — —charge.dispute.created
임의의 3자리 · 미래의 아무 날짜 결제 성공 후 상품 미수령 분쟁 발생 Visa pm_card_createDisputeProductNotReceived —charge.dispute.created
임의의 3자리 · 미래의 아무 날짜 결제 성공 후 차지백이 아닌 문의(inquiry) 접수 Visa pm_card_createDisputeInquiry —charge.dispute.created
임의의 3자리 · 미래의 아무 날짜 결제 성공 후 조기 사기 경고 도착 Visa pm_card_createIssuerFraudRecord —radar.early_fraud_warning.created
임의의 3자리 · 미래의 아무 날짜 결제 성공 후 분쟁이 두 번 이상 발생 Visa pm_card_createMultipleDisputes —charge.dispute.created
임의의 3자리 · 미래의 아무 날짜 Visa Compelling Evidence 3.0 대상 분쟁 Visa pm_card_createCe3EligibleDispute —charge.dispute.created
임의의 3자리 · 미래의 아무 날짜 Smart Disputes 대상 분쟁 Visa pm_card_createAutoRepresentmentEligibleDispute —charge.dispute.created
환불과 잔액 반영 시점 · 4
임의의 3자리 · 미래의 아무 날짜 환불이 pending으로 시작해 나중에 성공 Visa pm_card_pendingRefund —refund.updated
임의의 3자리 · 미래의 아무 날짜 환불이 성공한 것처럼 보였다가 나중에 실패 Visa pm_card_refundFail —refund.failed
임의의 3자리 · 미래의 아무 날짜 국내 결제가 곧바로 사용 가능 잔액에 반영 Visa pm_card_bypassPending —payment_intent.succeeded
임의의 3자리 · 미래의 아무 날짜 해외 결제가 곧바로 사용 가능 잔액에 반영 Visa pm_card_bypassPendingInternational —payment_intent.succeeded
3D Secure · 9
임의의 3자리 · 미래의 아무 날짜 3DS 필수, 인증 성공 Visa (IE) pm_card_threeDSecure2Required —payment_intent.requires_action
임의의 3자리 · 미래의 아무 날짜 미국 발급 카드에서 3DS 필수, 인증 성공 Visa (US) — —payment_intent.requires_action
임의의 3자리 · 미래의 아무 날짜 3DS 인증은 성공했지만 결제는 거절 Visa pm_card_threeDSecureRequiredChargeDeclined card_declinedpayment_intent.payment_failed
임의의 3자리 · 미래의 아무 날짜 3DS 조회 자체가 오류, 결제 거절 Visa pm_card_threeDSecureRequiredProcessingError card_declinedpayment_intent.payment_failed
임의의 3자리 · 미래의 아무 날짜 3DS 지원, 기본 규칙에서는 요구되지 않음 Visa pm_card_threeDSecureOptional —payment_intent.succeeded
임의의 3자리 · 미래의 아무 날짜 3DS 지원, 시도하면 처리 오류 발생 Visa pm_card_threeDSecureOptionalProcessingError card_declinedpayment_intent.payment_failed
임의의 3자리 · 미래의 아무 날짜 향후 결제용으로 설정하기 전까지 오프세션 결제에 3DS 필요 Visa pm_card_authenticationRequiredOnSetup —payment_intent.requires_action
임의의 3자리 · 미래의 아무 날짜 설정 여부와 상관없이 모든 거래에 3DS 필요 Visa pm_card_authenticationRequired —payment_intent.requires_action
임의의 3자리 · 미래의 아무 날짜 오프세션용 설정 완료, 온세션 결제는 여전히 인증 Visa pm_card_authenticationRequiredSetupForOffSession —payment_intent.requires_action
결제 성공 · 발급 국가별 · 64
임의의 3자리 · 미래의 아무 날짜 미국에서 발급된 카드로 결제 성공 Visa pm_card_us —payment_intent.succeeded
임의의 3자리 · 미래의 아무 날짜 아르헨티나에서 발급된 카드로 결제 성공 Visa pm_card_ar —payment_intent.succeeded
임의의 3자리 · 미래의 아무 날짜 브라질에서 발급된 카드로 결제 성공 Visa pm_card_br —payment_intent.succeeded
임의의 3자리 · 미래의 아무 날짜 캐나다에서 발급된 카드로 결제 성공 Visa pm_card_ca —payment_intent.succeeded
임의의 3자리 · 미래의 아무 날짜 칠레에서 발급된 카드로 결제 성공 Visa pm_card_cl —payment_intent.succeeded
임의의 3자리 · 미래의 아무 날짜 콜롬비아에서 발급된 카드로 결제 성공 Visa pm_card_co —payment_intent.succeeded
임의의 3자리 · 미래의 아무 날짜 코스타리카에서 발급된 카드로 결제 성공 Visa pm_card_cr —payment_intent.succeeded
임의의 3자리 · 미래의 아무 날짜 에콰도르에서 발급된 카드로 결제 성공 Visa pm_card_ec —payment_intent.succeeded
임의의 3자리 · 미래의 아무 날짜 멕시코에서 발급된 카드로 결제 성공 Visa pm_card_mx —payment_intent.succeeded
임의의 3자리 · 미래의 아무 날짜 멕시코에서 발급된 카드로 결제 성공 Carnet — —payment_intent.succeeded
임의의 3자리 · 미래의 아무 날짜 파나마에서 발급된 카드로 결제 성공 Visa pm_card_pa —payment_intent.succeeded
임의의 3자리 · 미래의 아무 날짜 파라과이에서 발급된 카드로 결제 성공 Visa pm_card_py —payment_intent.succeeded
임의의 3자리 · 미래의 아무 날짜 페루에서 발급된 카드로 결제 성공 Visa pm_card_pe —payment_intent.succeeded
임의의 3자리 · 미래의 아무 날짜 우루과이에서 발급된 카드로 결제 성공 Visa pm_card_uy —payment_intent.succeeded
임의의 3자리 · 미래의 아무 날짜 아랍에미리트에서 발급된 카드로 결제 성공 Visa pm_card_ae —payment_intent.succeeded
임의의 3자리 · 미래의 아무 날짜 아랍에미리트에서 발급된 카드로 결제 성공 Mastercard pm_card_ae_mastercard —payment_intent.succeeded
임의의 3자리 · 미래의 아무 날짜 오스트리아에서 발급된 카드로 결제 성공 Visa pm_card_at —payment_intent.succeeded
임의의 3자리 · 미래의 아무 날짜 벨기에에서 발급된 카드로 결제 성공 Visa pm_card_be —payment_intent.succeeded
임의의 3자리 · 미래의 아무 날짜 불가리아에서 발급된 카드로 결제 성공 Visa pm_card_bg —payment_intent.succeeded
임의의 3자리 · 미래의 아무 날짜 벨라루스에서 발급된 카드로 결제 성공 Visa pm_card_by —payment_intent.succeeded
임의의 3자리 · 미래의 아무 날짜 크로아티아에서 발급된 카드로 결제 성공 Visa pm_card_hr —payment_intent.succeeded
임의의 3자리 · 미래의 아무 날짜 키프로스에서 발급된 카드로 결제 성공 Visa pm_card_cy —payment_intent.succeeded
임의의 3자리 · 미래의 아무 날짜 체코에서 발급된 카드로 결제 성공 Visa pm_card_cz —payment_intent.succeeded
임의의 3자리 · 미래의 아무 날짜 덴마크에서 발급된 카드로 결제 성공 Visa pm_card_dk —payment_intent.succeeded
임의의 3자리 · 미래의 아무 날짜 에스토니아에서 발급된 카드로 결제 성공 Visa pm_card_ee —payment_intent.succeeded
임의의 3자리 · 미래의 아무 날짜 핀란드에서 발급된 카드로 결제 성공 Visa pm_card_fi —payment_intent.succeeded
임의의 3자리 · 미래의 아무 날짜 프랑스에서 발급된 카드로 결제 성공 Visa pm_card_fr —payment_intent.succeeded
임의의 3자리 · 미래의 아무 날짜 독일에서 발급된 카드로 결제 성공 Visa pm_card_de —payment_intent.succeeded
임의의 3자리 · 미래의 아무 날짜 지브롤터에서 발급된 카드로 결제 성공 Visa pm_card_gi —payment_intent.succeeded
임의의 3자리 · 미래의 아무 날짜 그리스에서 발급된 카드로 결제 성공 Visa pm_card_gr —payment_intent.succeeded
임의의 3자리 · 미래의 아무 날짜 헝가리에서 발급된 카드로 결제 성공 Visa pm_card_hu —payment_intent.succeeded
임의의 3자리 · 미래의 아무 날짜 아일랜드에서 발급된 카드로 결제 성공 Visa pm_card_ie —payment_intent.succeeded
임의의 3자리 · 미래의 아무 날짜 이탈리아에서 발급된 카드로 결제 성공 Visa pm_card_it —payment_intent.succeeded
임의의 3자리 · 미래의 아무 날짜 라트비아에서 발급된 카드로 결제 성공 Visa pm_card_lv —payment_intent.succeeded
임의의 3자리 · 미래의 아무 날짜 리히텐슈타인에서 발급된 카드로 결제 성공 Visa pm_card_li —payment_intent.succeeded
임의의 3자리 · 미래의 아무 날짜 리투아니아에서 발급된 카드로 결제 성공 Visa pm_card_lt —payment_intent.succeeded
임의의 3자리 · 미래의 아무 날짜 룩셈부르크에서 발급된 카드로 결제 성공 Visa pm_card_lu —payment_intent.succeeded
임의의 3자리 · 미래의 아무 날짜 몰타에서 발급된 카드로 결제 성공 Visa pm_card_mt —payment_intent.succeeded
임의의 3자리 · 미래의 아무 날짜 네덜란드에서 발급된 카드로 결제 성공 Visa pm_card_nl —payment_intent.succeeded
임의의 3자리 · 미래의 아무 날짜 노르웨이에서 발급된 카드로 결제 성공 Visa pm_card_no —payment_intent.succeeded
임의의 3자리 · 미래의 아무 날짜 폴란드에서 발급된 카드로 결제 성공 Visa pm_card_pl —payment_intent.succeeded
임의의 3자리 · 미래의 아무 날짜 포르투갈에서 발급된 카드로 결제 성공 Visa pm_card_pt —payment_intent.succeeded
임의의 3자리 · 미래의 아무 날짜 루마니아에서 발급된 카드로 결제 성공 Visa pm_card_ro —payment_intent.succeeded
임의의 3자리 · 미래의 아무 날짜 사우디아라비아에서 발급된 카드로 결제 성공 Visa — —payment_intent.succeeded
임의의 3자리 · 미래의 아무 날짜 슬로베니아에서 발급된 카드로 결제 성공 Visa pm_card_si —payment_intent.succeeded
임의의 3자리 · 미래의 아무 날짜 슬로바키아에서 발급된 카드로 결제 성공 Visa pm_card_sk —payment_intent.succeeded
임의의 3자리 · 미래의 아무 날짜 스페인에서 발급된 카드로 결제 성공 Visa pm_card_es —payment_intent.succeeded
임의의 3자리 · 미래의 아무 날짜 스웨덴에서 발급된 카드로 결제 성공 Visa pm_card_se —payment_intent.succeeded
임의의 3자리 · 미래의 아무 날짜 스위스에서 발급된 카드로 결제 성공 Visa pm_card_ch —payment_intent.succeeded
임의의 3자리 · 미래의 아무 날짜 영국에서 발급된 카드로 결제 성공 Visa pm_card_gb —payment_intent.succeeded
임의의 3자리 · 미래의 아무 날짜 영국에서 발급된 카드로 결제 성공 Visa (debit) pm_card_gb_debit —payment_intent.succeeded
임의의 3자리 · 미래의 아무 날짜 영국에서 발급된 카드로 결제 성공 Mastercard pm_card_gb_mastercard —payment_intent.succeeded
임의의 3자리 · 미래의 아무 날짜 오스트레일리아에서 발급된 카드로 결제 성공 Visa pm_card_au —payment_intent.succeeded
임의의 3자리 · 미래의 아무 날짜 중국에서 발급된 카드로 결제 성공 Visa pm_card_cn —payment_intent.succeeded
임의의 3자리 · 미래의 아무 날짜 홍콩에서 발급된 카드로 결제 성공 Visa pm_card_hk —payment_intent.succeeded
임의의 3자리 · 미래의 아무 날짜 인도에서 발급된 카드로 결제 성공 Visa pm_card_in —payment_intent.succeeded
임의의 3자리 · 미래의 아무 날짜 일본에서 발급된 카드로 결제 성공 Visa pm_card_jp —payment_intent.succeeded
임의의 3자리 · 미래의 아무 날짜 일본에서 발급된 카드로 결제 성공 JCB pm_card_jcb —payment_intent.succeeded
임의의 3자리 · 미래의 아무 날짜 말레이시아에서 발급된 카드로 결제 성공 Visa pm_card_my —payment_intent.succeeded
임의의 3자리 · 미래의 아무 날짜 뉴질랜드에서 발급된 카드로 결제 성공 Visa pm_card_nz —payment_intent.succeeded
임의의 3자리 · 미래의 아무 날짜 싱가포르에서 발급된 카드로 결제 성공 Visa pm_card_sg —payment_intent.succeeded
임의의 3자리 · 미래의 아무 날짜 대만에서 발급된 카드로 결제 성공 Visa pm_card_tw —payment_intent.succeeded
임의의 3자리 · 미래의 아무 날짜 태국에서 발급된 카드로 결제 성공 Visa (credit) pm_card_th_credit —payment_intent.succeeded
임의의 3자리 · 미래의 아무 날짜 태국에서 발급된 카드로 결제 성공 Visa (debit) pm_card_th_debit —payment_intent.succeeded

로컬 결제수단: 테스트 값

Stripe가 공개한 독일·프랑스·스페인 SEPA Direct Debit, 일본 Konbini, 브라질 Boleto의 테스트 값입니다. 값을 누르면 복사됩니다. 이 결제들은 processing이나 requires_action에서 기다렸다가 결과가 나오므로 마지막 열에 웹훅 이벤트 순서 전체를 적었습니다. 한국 카드와 간편결제는 고정된 테스트 값이 없어 이 표에 없습니다.

테스트 값재현하는 상황파라미터PaymentMethod코드와 이벤트
SEPA Direct Debit · 독일 (DE) · 6
PaymentIntent가 processing에서 succeeded로 sepa_debit[iban] pm_sepaDebit_success_de payment_intent.processing→ payment_intent.succeeded
PaymentIntent가 최소 3분 뒤 processing에서 succeeded로 sepa_debit[iban] pm_sepaDebit_successDelayed_de payment_intent.processing→ payment_intent.succeeded
PaymentIntent가 processing에서 requires_payment_method로 sepa_debit[iban] pm_sepaDebit_failed_de payment_intent.processing→ payment_intent.payment_failed
PaymentIntent가 최소 3분 뒤 processing에서 requires_payment_method로 sepa_debit[iban] pm_sepaDebit_failedDelayed_de payment_intent.processing→ payment_intent.payment_failed
processing에서 succeeded로 간 뒤 곧바로 분쟁 생성 sepa_debit[iban] pm_sepaDebit_disputed_de payment_intent.processing→ payment_intent.succeeded→ charge.dispute.created
insufficient_funds 실패 코드로 결제 실패 sepa_debit[iban] pm_sepaDebit_insufficientFunds_de insufficient_fundspayment_intent.processing→ payment_intent.payment_failed
SEPA Direct Debit · 프랑스 (FR) · 6
PaymentIntent가 processing에서 succeeded로 sepa_debit[iban] pm_sepaDebit_success_fr payment_intent.processing→ payment_intent.succeeded
PaymentIntent가 최소 3분 뒤 processing에서 succeeded로 sepa_debit[iban] pm_sepaDebit_successDelayed_fr payment_intent.processing→ payment_intent.succeeded
PaymentIntent가 processing에서 requires_payment_method로 sepa_debit[iban] pm_sepaDebit_failed_fr payment_intent.processing→ payment_intent.payment_failed
PaymentIntent가 최소 3분 뒤 processing에서 requires_payment_method로 sepa_debit[iban] pm_sepaDebit_failedDelayed_fr payment_intent.processing→ payment_intent.payment_failed
processing에서 succeeded로 간 뒤 곧바로 분쟁 생성 sepa_debit[iban] pm_sepaDebit_disputed_fr payment_intent.processing→ payment_intent.succeeded→ charge.dispute.created
insufficient_funds 실패 코드로 결제 실패 sepa_debit[iban] pm_sepaDebit_insufficientFunds_fr insufficient_fundspayment_intent.processing→ payment_intent.payment_failed
SEPA Direct Debit · 스페인 (ES) · 6
PaymentIntent가 processing에서 succeeded로 sepa_debit[iban] pm_sepaDebit_success_es payment_intent.processing→ payment_intent.succeeded
PaymentIntent가 최소 3분 뒤 processing에서 succeeded로 sepa_debit[iban] pm_sepaDebit_successDelayed_es payment_intent.processing→ payment_intent.succeeded
PaymentIntent가 processing에서 requires_payment_method로 sepa_debit[iban] pm_sepaDebit_failed_es payment_intent.processing→ payment_intent.payment_failed
PaymentIntent가 최소 3분 뒤 processing에서 requires_payment_method로 sepa_debit[iban] pm_sepaDebit_failedDelayed_es payment_intent.processing→ payment_intent.payment_failed
processing에서 succeeded로 간 뒤 곧바로 분쟁 생성 sepa_debit[iban] pm_sepaDebit_disputed_es payment_intent.processing→ payment_intent.succeeded→ charge.dispute.created
insufficient_funds 실패 코드로 결제 실패 sepa_debit[iban] pm_sepaDebit_insufficientFunds_es insufficient_fundspayment_intent.processing→ payment_intent.payment_failed
Konbini · 일본 (JP) · 6
{any_prefix}@{any_domain}confirmation_number 11111111110 3분 뒤 결제 성공 billing_details.email — payment_intent.requires_action→ payment_intent.succeeded
{any_prefix}succeed_immediately@{any_domain}confirmation_number 22222222220 즉시 결제 성공 billing_details.email — payment_intent.requires_action→ payment_intent.succeeded
{any_prefix}expire_immediately@{any_domain}confirmation_number 33333333330 즉시 만료 billing_details.email — payment_intent.requires_action→ payment_intent.payment_failed
{any_prefix}expire_with_delay@{any_domain}confirmation_number 44444444440 결제되지 않고 3분 뒤 만료 billing_details.email — payment_intent.requires_action→ payment_intent.payment_failed
{any_prefix}fill_never@{any_domain}confirmation_number 55555555550 결제되지 않고 지정한 expires_at에 만료 billing_details.email — payment_intent.requires_action→ payment_intent.payment_failed
PaymentIntent를 확정할 때 확인 번호가 거부됨 payment_method_options[konbini][confirmation_number] — payment_intent_konbini_rejected_confirmation_number
Boleto · 브라질 (BR) · 6
{any_prefix}@{any_domain} 3분 뒤 바우처 결제 billing_details.email — payment_intent.requires_action→ payment_intent.succeeded
{any_prefix}succeed_immediately@{any_domain} 즉시 바우처 결제 billing_details.email — payment_intent.requires_action→ payment_intent.succeeded
{any_prefix}expire_immediately@{any_domain} 미결제로 만료, 몇 초 안에 payment_failed billing_details.email — payment_intent.requires_action→ payment_intent.payment_failed
{any_prefix}expire_with_delay@{any_domain} 미결제로 약 3분 뒤 만료 billing_details.email — payment_intent.requires_action→ payment_intent.payment_failed
{any_prefix}fill_never@{any_domain} 결제되지 않고 바우처의 expires_at에 만료 billing_details.email — payment_intent.requires_action→ payment_intent.payment_failed
CNPJ 00.000.000/0000-00 세금 ID 검증을 건너뛰는 샌드박스용 CPF boleto[tax_id] — —

출처: Stripe 문서 — Testing(테스트 카드 전체, 국가별 표, 위치 지정 이메일, 3D Secure, 분쟁 증거 문자열. 한국어로 요청해도 영어판이 제공됨), Accept a payment using local cards in South Korea(한국 로컬 카드의 테스트 방법, 원화·100원 조건, 지원 사업장 국가), Kakao Pay, Naver Pay, PAYCO, Samsung Pay, Decline codes(generic_decline의 의미). 모두 2026년 9월 26일에 원문을 확인했습니다.

Stripe 테스트 카드 쓰는 법

세 단계입니다. 테스트 카드는 테스트 API 키에서만 받아들여지므로, 여기 있는 번호로는 실제 카드나 실제 고객에게 아무 일도 일어나지 않습니다.

  1. 테스트 키로 바꿉니다. 테스트용 publishable 키와 secret 키, 또는 샌드박스를 씁니다. Stripe 서비스 약관은 라이브 모드에서 실제 결제수단 정보로 테스트하는 것을 금지하고, 테스트 번호는 라이브 키에서 그냥 거절됩니다.
  2. 원하는 결과에 맞는 카드를 고릅니다. 단순 성공은 4242 4242 4242 4242입니다. 오류 처리를 확인하려면 보고 싶은 거절 코드가 적힌 행의 카드를 고르고, CVC는 아무 세 자리, 유효기간은 아무 미래 날짜를 넣습니다.
  3. 서버 코드에서는 PaymentMethod를 씁니다. Stripe는 API 호출에 카드 번호 대신 pm_card_visa 같은 토큰을 쓰라고 권합니다. 테스트 환경이라도 서버 코드에 카드 번호를 직접 쓰면 라이브로 넘어갈 때 PCI 준수에 문제가 될 수 있다는 이유입니다. PaymentMethod 열에 토큰이 있는 카드는 모두 그 값을 적어 두었습니다.

어떤 카드가 어떤 실패를 일으키고, 웹훅에는 무엇이 오나

결제 실패를 제대로 처리하려면 세 가지를 동시에 알아야 합니다. API 호출이 던지는 error.code, 카드사가 붙인 decline_code, 그리고 나중에 웹훅 엔드포인트에 도착하는 이벤트입니다. Stripe는 이 셋을 서로 다른 세 페이지에 적어 두었고, 그래서 대부분의 연동은 하나만 보고 만들어졌다가 나머지 둘에 놀랍니다. 같은 정보를 결과 하나당 한 행으로 모았습니다.

테스트 카드재현하는 상황error.codedecline_code웹훅 이벤트
4000 0000 0000 0002일반 거절card_declinedgeneric_declinepayment_intent.payment_failed
4000 0000 0000 9995잔액 부족card_declinedinsufficient_fundspayment_intent.payment_failed
4000 0000 0000 9987분실 카드card_declinedlost_cardpayment_intent.payment_failed
4000 0000 0000 9979도난 카드card_declinedstolen_cardpayment_intent.payment_failed
4000 0000 0000 6975한 카드에 결제 시도가 너무 많음card_declinedcard_velocity_exceededpayment_intent.payment_failed
4000 0000 0000 0069유효기간 만료expired_card없음payment_intent.payment_failed
4000 0000 0000 0127CVC 불일치incorrect_cvc없음payment_intent.payment_failed
4000 0000 0000 0119카드 네트워크의 처리 오류processing_error없음payment_intent.payment_failed
4242 4242 4242 4241Luhn 검사에 실패하는 번호incorrect_number없음없음 — 결제가 만들어지기 전에 거부됨
4100 0000 0000 0019Radar가 항상 차단card_declinedgeneric_declinepayment_intent.payment_failed
4000 0000 0000 9235위험도 높음, 검토 대기열로없음 — 결제는 만들어짐없음review.opened
4000 0000 0000 0101Radar의 CVC 검사 실패card_declinedgeneric_declinepayment_intent.payment_failed
4000 0000 0000 0036Radar의 우편번호 검사 실패card_declinedgeneric_declinepayment_intent.payment_failed
4000 0000 0000 0259결제 성공 후 사기 분쟁없음없음charge.dispute.created
4000 0000 0000 2685결제 성공 후 상품 미수령 분쟁없음없음charge.dispute.created
4000 0000 0000 5423결제 성공 후 조기 사기 경고없음없음radar.early_fraud_warning.created
4000 0000 0000 7726환불이 pending으로 시작해 나중에 성공없음없음refund.updated
4000 0000 0000 5126환불이 성공처럼 보였다가 나중에 실패없음없음refund.failed
4000 0000 0000 32203D Secure 인증 필요없음없음payment_intent.requires_action
4000 0084 0000 1629인증은 통과, 그래도 거절card_declined없음payment_intent.payment_failed
4000 0084 0000 12803D Secure 조회 자체가 오류card_declined없음payment_intent.payment_failed

한 표로 읽으면 두 가지 습관이 생깁니다. 첫째, card_declined는 이유가 아니라 분류입니다. 이유는 decline_code에 있습니다. 표에서 보듯 같은 card_declined라도 잔액 부족, 분실, 도난, 시도 한도 초과가 모두 다른 decline_code로 갈리고, 3D Secure 두 행처럼 decline_code가 아예 없는 경우도 있습니다. 오류 처리기가 error.code만 보고 분기하면 잔액 부족과 도난 카드가 똑같아 보이고, 그저 잔액이 모자랐던 고객에게 엉뚱한 안내를 띄우게 됩니다.

둘째, 어떤 결과는 응답에 아예 나타나지 않습니다. 검토 대기열에 오른 결제, 3주 뒤에 열린 분쟁, 성공에서 실패로 뒤집히는 비동기 환불은 API를 호출하는 순간에는 보이지 않습니다. 이벤트로 도착하거나, 엔드포인트를 만들지 않았다면 아예 도착하지 않습니다. 일부러 테스트할 가치가 있는 실패가 바로 이것입니다. 카드를 막아 보고, 그 이벤트로 내 시스템이 무엇을 했는지 확인하세요.

표에 다 담지 못한 각주 둘. Stripe는 CVC나 우편번호를 보내지 않으면 그 검사를 아예 건너뛰므로, 검사 실패를 재현하는 카드는 폼이 그 칸을 실제로 받지 않는 한 조용히 성공합니다. 그리고 Radar가 막은 결제에 붙는 generic_decline은 Stripe 문서에서 'Stripe Radar 또는 Adaptive Acceptance가 결제를 차단한 경우'까지 포함하는 코드로 설명됩니다. 의도된 설계입니다. 고객에게 사기로 분류됐다고 알려서는 안 되기 때문입니다.

한국 카드와 간편결제는 번호가 아니라 승인·실패 버튼으로 테스트합니다

이 표에는 한국 행이 없습니다. Stripe의 국가별 테스트 카드 표(2026-09-26 확인)는 58개국 64장인데, 대한민국(KR)은 그 목록에 없습니다. 그래서 이 페이지는 다른 언어판처럼 자국 카드를 맨 위로 올리지 않습니다. 올릴 행이 없기 때문입니다.

대신 Stripe는 한국 고객을 위한 결제수단을 따로 문서화해 두었습니다. 한국 카드사가 발급한 로컬 카드(South Korean cards), 카카오페이, 네이버페이, PAYCO, 삼성페이입니다. 다섯 가지 모두 테스트 방법이 같습니다.

  1. 테스트 중인 Checkout에서 해당 결제수단(로컬 카드라면 Local cards)을 고르고 결제를 누릅니다.
  2. Stripe가 호스팅하는 페이지로 이동하고, 거기서 결제를 승인할지 실패시킬지 고릅니다.
  3. 승인하면 PaymentIntent가 requires_action에서 succeeded로, 실패시키면 requires_action에서 requires_payment_method로 바뀝니다.

복사할 카드 번호나 테스트 값이 없는 이유가 이것입니다. 문서에 적힌 조건도 함께 알아 두세요. 모든 품목의 가격이 원화(krw)여야 하고, 최소 금액은 100원입니다. 각 결제수단의 지원 사업장 국가 목록에는 미국, 일본, 영국, 홍콩과 여러 EU 국가가 있지만 한국(KR)은 없습니다. 한국 고객에게 파는 해외 사업장을 위한 결제수단이라는 뜻입니다. 리디렉트 방식의 결제에 대해 Stripe는 최종 결과가 리디렉트 직후 확정될 수도 있고 비동기로 전달될 수도 있다고 적고 있으니, 주문 처리는 리디렉트가 아니라 웹훅을 기준으로 두세요.

한국 고객이 보는 결제 화면을 미리 보고 싶다면 Stripe가 문서화한 위치 지정 이메일을 씁니다. 이메일 로컬 파트에 +location_KR을 붙여 test+location_KR@example.com을 Checkout Session의 customer_email이나 Payment Link의 prefilled_email로 넘기면, 그 나라 고객이 보는 것과 같은 통화와 결제수단이 표시됩니다.

마지막으로, 이 페이지가 한국어로 있는 이유입니다. Stripe의 테스트 문서(docs.stripe.com/testing)는 한국어 브라우저로 열어도 영어 페이지가 옵니다. 일본어로 요청하면 일본어판이 오는 것과 다릅니다(2026-09-26 확인). 그래서 이 표는 119장 전부와 로컬 결제수단 30행의 설명을 한국어로 옮긴 판입니다. 번호, 코드, 이벤트 이름은 원문 그대로이고, 다운로드 파일은 영어입니다.

3D Secure 테스트

3D Secure는 유럽 규제가 대부분의 온라인 카드 결제에 요구하는 인증 단계이고, 잘 돌아가던 연동이 가장 자주 넘어지는 곳입니다. 정상 경로에서는 한 번도 마주치지 않기 때문입니다. 인증이 필요한 결제는 실패도 성공도 하지 않습니다. PaymentIntent가 requires_action으로 돌아오고, 프런트엔드가 Stripe.js에 제어권을 넘겨야 고객이 인증을 마칠 수 있습니다.

표의 카드 아홉 장이 이 분기를 재현합니다. 시간을 가장 많이 아껴 주는 구분은 필수(required)와 지원(supported)입니다.

  • 4000 0000 0000 3220 — 인증이 필요하고 성공합니다. 연동을 만들 때 기준으로 삼을 카드입니다. 클라이언트가 확인 단계를 실제로 호출하는지, 아니면 requires_action을 조용히 실패로 처리하는지 이 카드로 드러납니다.
  • 4000 0000 0000 3055 — 3D Secure를 지원하지만 기본 규칙에서는 요구되지 않습니다. 실수로 인증을 필수로 만들어 두지 않았는지 확인할 때 씁니다.
  • 4000 0084 0000 1629와 4000 0084 0000 1280 — 흐름이 나쁘게 끝나는 두 경우입니다. 고객이 인증을 마쳤는데 카드사가 거절하는 경우와, 조회 자체가 오류로 끝나는 경우입니다. 둘 다 card_declined로 돌아오므로, 인증이 끝났으면 결제도 끝났다고 가정하는 오류 처리기는 일어나지 않은 결제에 성공 화면을 띄웁니다.
  • 4000 0025 0000 3155와 4000 0027 6000 3184 — 저장된 카드의 경우입니다. 앞의 카드는 향후 결제용으로 설정하기 전까지 오프세션 결제에 인증이 필요하고, 뒤의 카드는 항상 필요합니다. 고객이 없는 자리에서 나중에 결제할 계획이라면, 이 두 장이 갱신 결제가 살아 있느냐 죽느냐를 가릅니다.

흔히 빠지는 함정 하나. 3D Secure를 제대로 테스트하는 것은 이 분류의 카드뿐입니다. 다른 테스트 카드도 3DS를 일으킬 수는 있지만, Stripe는 attempt_acknowledged를 돌려주며 추가 단계를 건너뜁니다. 그러면 인증 화면은 한 번도 뜨지 않고, 제대로 동작한다고 잘못 결론 내리게 됩니다. 또한 Stripe 대시보드에서 직접 만든 결제에서는 리디렉트가 일어나지 않습니다. 내 프런트엔드나 API 호출로 테스트하세요.

발급 국가별 Stripe 테스트 카드 64장

Stripe는 국가별 테스트 카드 목록을 따로 두고 있습니다. 58개국 64장이고, 각 카드는 그 나라에서 발급된 카드의 결제 성공을 재현합니다. 위 표의 마지막 분류가 이것입니다. PaymentMethod는 국가 코드를 따라갑니다 — pm_card_de, pm_card_jp, pm_card_br. 예외는 셋입니다. 멕시코 Carnet 카드와 사우디아라비아 카드에는 PaymentMethod가 없고, 일본 JCB 카드는 브랜드 분류의 JCB와 같은 pm_card_jcb를 씁니다. 미국 행은 4242 4242 4242 4242 그 자체이고, 자기 pm_card_us가 따로 있습니다.

이 카드들이 바꾸는 것은 발급 국가이고, 그것이 용도입니다. Stripe는 해외 결제 수수료를 카드 발급국 기준으로 매기며, 발급국이 미국이 아닌 카드는 테스트 환경에서도 해외 결제 수수료가 붙을 수 있다고 적고 있습니다. 수수료나 카드 발급국을 읽는 코드가 있다면 이 카드들로 돌려 보세요. 이 카드들이 테스트하지 않는 것은 인증입니다. 강력한 고객 인증(SCA) 규정은 유럽경제지역의 온라인 결제에 3D Secure를 요구하지만, Stripe는 유럽·중동 구간의 카드가 인증 없이 성공하는 결제를 재현한다고 밝힙니다. 여기 있는 독일이나 프랑스 카드로는 인증 흐름을 확인할 수 없고, 그 일은 3D Secure 분류가 합니다.

카드가 어디서 왔는지가 아니라 고객이 어디에 있는지를 재현하려면 위치 지정 이메일을 씁니다. Checkout Session, Payment Link, 가격표에서 이메일 로컬 파트에 +location_XX를 붙입니다(test+location_DE@example.com처럼). 앞 절에서 본 test+location_KR@example.com도 같은 방식입니다.

카드 표 아래에는 Stripe가 로컬 결제수단 세 가지에 대해 공개한 테스트 값이 있습니다. 독일·프랑스·스페인의 SEPA Direct Debit IBAN, 일본의 Konbini, 브라질의 Boleto입니다. 이들은 카드와 다르게 끝납니다. SEPA 이체는 processing에서 기다렸다가 성공하거나 실패하고, Konbini와 Boleto 바우처는 결제되거나 만료될 때까지 requires_action에서 기다립니다. 그래서 각 행에는 이벤트 하나가 아니라 웹훅이 받게 될 이벤트 순서 전체를 적었습니다. Konbini와 Boleto는 고객 이메일 주소로 결과가 정해지고, 샌드박스의 Boleto 테스트에서는 Stripe가 검증을 면제하는 세금 ID 000.000.000-00을 쓸 수 있습니다.

환불, 분쟁, 그리고 늦게 도착하는 것들

라이브 모드의 환불은 즉시 끝나지도 않고 성공이 보장되지도 않습니다. 성공했다고 알렸다가 몇 시간 뒤 실패하기도 하고, pending에 머물다 나중에 정리되기도 합니다. 거의 모든 테스트가 이것을 놓칩니다. 평범한 테스트 카드로는 환불이 즉시 끝나고 상태가 다시는 바뀌지 않기 때문입니다. 실제 동작을 되살리는 카드가 두 장 있습니다. 4000 0000 0000 7726은 환불을 pending으로 시작해 나중에 성공으로 옮기고, 4000 0000 0000 5126은 성공으로 알렸다가 나중에 실패합니다. 둘 다 뒤늦게 이벤트를 보냅니다. 돌려받지 못한 돈 때문에 고객이 전화하기 전에 만들어 두고 싶은 바로 그 코드 경로입니다.

분쟁은 같은 일이 느리게 일어나는 것입니다. 결제는 정상적으로 성공하고, 며칠 뒤 차지백이 나타나며, 받는 알림은 charge.dispute.created 하나뿐입니다. 4000 0000 0000 0259는 사기 분쟁을, 4000 0000 0000 2685는 상품 미수령 분쟁을, 4000 0000 0000 1976은 차지백이 아닌 문의(inquiry)를 만듭니다. 문의는 대개 에스컬레이션 없이 닫을 수 있지만 차지백은 그렇지 않으니 나눠 두는 편이 좋습니다. 4000 0000 0000 5423은 대신 조기 사기 경고를 만듭니다. 분쟁이 곧 올 것 같다고 카드 네트워크가 미리 알려 주는 신호이고, 아직 자발적으로 환불할 시간이 있다는 뜻입니다.

이벤트뿐 아니라 결과까지 재현하려면, Stripe가 테스트용으로 정해 둔 증거 문자열로 분쟁에 응답합니다. winning_evidence는 승소로, losing_evidence는 패소로 닫고, escalate_inquiry_evidence는 문의를 실제 차지백으로 올립니다. 분류되지 않은 텍스트 필드에 그대로 넣으면 됩니다.

늦게 도착하는 것의 마지막. 4000 0000 0000 0077은 결제 금액을 pending 잔액이 아니라 사용 가능 잔액에 바로 넣습니다. 결제 테스트가 아니라 장부 테스트입니다. 정산을 대사하는 코드가 있다면, 정산 기간을 기다리지 않고 제대로 도는지 확인할 수 있습니다.

JSON이나 CSV로 fixtures 내려받기

손으로 옮겨 적어야 하는 표는 언젠가 틀리게 옮겨 적는 표입니다. 페이지 위쪽의 두 다운로드 버튼은 같은 119장을 기계가 읽는 파일로 줍니다. 이 페이지를 그린 데이터에서 브라우저 안에서 만들어지므로, 내려받은 내용이 방금 읽은 표와 어긋날 수 없습니다.

JSON은 source, checked, count와 cards 배열을 가진 객체입니다. 카드마다 테스트 이름에서 참조할 수 있는 고정된 id, 번호, 브랜드, 분류, 한 줄 설명, CVC와 유효기간 규칙, 네 가지 대조 필드 — payment_method, error_code, decline_code, webhook_event — 그리고 국가별 분류 카드의 발급국 ISO 코드인 country가 들어 있습니다. 해당하지 않는 필드는 빠지는 대신 null이므로 파서가 키 누락을 따로 처리할 필요가 없습니다.

CSV는 같은 열두 열을 RFC 4180 인용 규칙으로 담습니다. 스프레드시트에서 바로 열리고, pandas에서도 변환 옵션 없이 읽힙니다. 시드 스크립트나 누군가 꼭 요청하는 QA 스프레드시트에 쓰기 좋습니다. 두 파일 모두 영어입니다. 이 페이지의 한국어 설명은 화면용이고, 어느 언어판에서 내려받든 파일은 바이트 단위로 같습니다. 표 아래의 로컬 결제수단 값은 복사용이며 어느 파일에도 들어가지 않습니다.

두 다운로드 모두 적용된 필터를 따릅니다. 표를 거절 분류로 좁히고 JSON 다운로드를 누르면 119행이 아니라 10행이 나옵니다. 매개변수화된 테스트가 보통 원하는 것이 그것입니다.

test.each(fixtures.cards.filter(c => c.group === 'decline'))(
  '$id surfaces $decline_code',
  async ({ payment_method, error_code, decline_code }) => { /* … */ },
);

파일에는 출처 URL과 확인 날짜가 들어 있습니다. 날짜 없는 카드 목록은 여섯 달 뒤에 믿을 수 없는 목록이기 때문입니다. Stripe가 번호를 바꾸면, 오래된 사본을 저장소에 붙들고 있기보다 출처를 다시 확인하는 것이 정직한 해결입니다.

실제로 만들고 있는 것

재미로 테스트 카드를 찾는 사람은 없습니다. 결제를 연결하는 중이라서 여기 왔을 것이고, 결제는 더 큰 것의 한 조각입니다. 카탈로그, 고객이 고칠 수 없는 가격, 비밀 키를 가진 어딘가에서 만들어지는 세션, 주문이 결제 완료로 인정될지를 정하는 웹훅, 그리고 돈이 들어온 뒤에 일어나는 모든 일.

가장 자주 잘못되는 조각은 카드가 아니라 가격입니다. 가격을 HTML에 두고 금액을 결제 엔드포인트로 보내는 정적 사이트는 그 숫자를 브라우저에 맡기고 있고, 브라우저는 믿을 만하지 않습니다. 테스트 카드로는 절대 잡히지 않는 버그 부류입니다. 조작된 결제도 아주 잘 성공하기 때문입니다.

Clize가 Stripe Checkout 위에 만들면서 가격을 서버 쪽에 두는 이유가 이것입니다. 호스팅 스토어는 사이트와 함께 배포된 _catalog.json으로 장바구니마다 가격을 매기고, 클라이언트가 주장하는 금액은 무시합니다. 그런 모양의 문제라면 카탈로그 파일 생성기와 검사기(영문)가 있고, 고객 한 명에게 한 금액을 받기만 하면 된다면 clize pay link --amount 49가 내 Stripe 계정 없이 라이브 Stripe Checkout URL을 돌려줍니다. 그 결제는 실제 돈이니, 이 페이지의 번호들과는 멀리 떼어 두세요.

자주 묻는 질문

Stripe 테스트 카드 번호는 무엇인가요?

표준 번호는 4242 4242 4242 4242이고, 항상 성공하는 Visa 카드입니다. CVC는 아무 세 자리, 유효기간은 12/34 같은 아무 미래 날짜, 나머지 칸은 아무 값이나 넣으면 됩니다. Stripe 테스트 API 키에서만 동작하고, 라이브 키에서는 거절됩니다.

테스트 카드의 유효기간과 CVC는 무엇을 넣어야 하나요?

미래 날짜라면 무엇이든 됩니다. Stripe 문서가 드는 예가 12/34입니다. CVC는 아무 세 자리이고, American Express 카드만 네 자리입니다. CVC를 보내지 않으면 Stripe가 CVC 검사를 아예 건너뛰므로, CVC 검사 실패를 재현하는 카드도 폼에 그 칸이 없으면 성공하는 것처럼 보입니다.

Stripe 테스트 카드가 거절되는 이유는 무엇인가요?

흔한 원인은 셋입니다. 라이브 API 키로 보내고 있거나(라이브 모드는 테스트 번호를 설계상 거절하며, 이때의 decline_code가 testmode_decline입니다), 원래 거절되도록 만든 카드를 복사했거나(4000 0000 0000 0002와 거절 분류 전체가 그런 카드입니다), 4242 4242 4242 4241처럼 Luhn 검사에 실패하는 번호를 써서 결제가 만들어지기 전에 incorrect_number가 돌아온 경우입니다.

한국 카드나 카카오페이, 네이버페이 결제는 어떻게 테스트하나요?

번호로 테스트하지 않습니다. Stripe 문서에 따르면 테스트 중인 Checkout에서 한국 로컬 카드나 카카오페이, 네이버페이, PAYCO, 삼성페이를 고르고 결제를 누르면 Stripe가 호스팅하는 페이지로 이동하고, 거기서 승인하거나 실패시킬 수 있습니다. 모든 품목 가격이 원화여야 하고 최소 금액은 100원입니다.

라이브 모드에서 테스트 카드를 쓸 수 있나요?

쓸 수 없습니다. 테스트 번호는 테스트 API 키에서만 받아들여지고, 반대로 Stripe 서비스 약관은 라이브 모드에서 실제 결제수단 정보로 테스트하는 것을 금지합니다. 두 키 세트는 설정에서 확실히 분리해 두세요. 한쪽 방향의 실수는 조용하고, 다른 쪽 방향의 실수는 비쌉니다.

Stripe에서 3D Secure 결제는 어떻게 테스트하나요?

4000 0000 0000 3220을 쓰세요. 인증이 필요하고 인증에 성공하는 카드입니다. PaymentIntent가 requires_action으로 돌아오면 프런트엔드가 Stripe.js에 넘겨 고객이 인증을 마치게 해야 합니다. 3D Secure 흐름을 제대로 테스트하는 것은 3D Secure 분류의 카드뿐이고, 다른 카드는 attempt_acknowledged로 추가 단계를 건너뜁니다.

이 페이지에 입력한 내용이 어딘가로 전송되나요?

아니요. 표는 페이지와 함께 그려진 일반 HTML이고, 검색과 클릭 복사, 두 가지 다운로드는 브라우저 안에서 도는 작은 스크립트가 처리합니다. 계정도 가입도 네트워크 요청도 없으므로, 한 번 불러온 뒤에는 오프라인에서도 동작합니다.

clize pay link — 명령 하나로 라이브 결제 URL

테스트 카드가 끝났다면, 진짜 결제를 받아 보세요.

명령 하나가 Stripe 계정도, 키도, 가입 양식도 없이 라이브 Stripe Checkout 링크를 돌려줍니다. 실제 돈이니, 지금 손에 든 번호가 어느 쪽 번호인지 꼭 확인하세요.

$ npm i -g @clize/clize && clize login
$ clize pay link --amount 49 --for "invoice 1042"
[ Agent Storefront → ]