Stripe測試模式下的信用卡

總結摘要
詳細介紹Stripe測試模式下可用的測試信用卡號碼,包含各種卡片品牌的測試號碼、使用方法和測試場景,幫助開發者正確進行支付功能測試。

在開發支付功能時,經常會遇到這樣的錯誤訊息:

Your card was declined. Your request was in test mode, but used a non test (live) card. For a list of valid test cards, visit: https://stripe.com/docs/testing.

這個錯誤表明您在Stripe的測試模式中使用了真實的信用卡號碼。為了避免這個問題並正確測試支付功能,您需要使用Stripe提供的專用測試卡號。

什麼是Stripe測試模式

Stripe測試模式是一個安全的沙盒環境,允許開發者測試支付集成而不會處理真實的資金交易。在測試模式下:

  • 不會產生實際的費用或轉帳
  • 可以模擬各種支付場景和錯誤情況
  • 測試數據與生產數據完全隔離
  • 必須使用專用的測試API密鑰

測試卡號列表

以下是Stripe官方提供的測試卡號,這些號碼僅在測試模式下有效:

主要卡片品牌

卡片品牌測試卡號CVC到期日期
Visa4242 4242 4242 4242任意3位數任意未來日期
Visa (債務卡)4000 0566 5566 5556任意3位數任意未來日期
Mastercard5555 5555 5555 4444任意3位數任意未來日期
American Express3782 822463 10005任意4位數任意未來日期
Discover6011 1111 1111 1117任意3位數任意未來日期
Diners Club3056 9300 0902 0004任意3位數任意未來日期
JCB3566 0020 2036 0505任意3位數任意未來日期
銀聯 (UnionPay)6200 0000 0000 0005任意3位數任意未來日期

其他常用測試卡號

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
# 最常用的通用測試卡
4242 4242 4242 4242  # Visa - 成功支付

# 特定場景測試卡
4000 0000 0000 0002  # 卡片被拒絕
4000 0000 0000 9995  # 資金不足
4000 0000 0000 9987  # 遺失卡片
4000 0000 0000 9979  # 被盜卡片
4000 0000 0000 0069  # 過期卡片
4000 0000 0000 0127  # CVC錯誤

使用方法

1. 基本使用規則

使用測試卡號時,請遵循以下規則:

  • 到期日期:使用任何未來的日期,例如 12/34
  • CVC代碼
    • Visa、Mastercard、Discover、Diners Club:任意3位數字
    • American Express:任意4位數字
  • 其他字段:姓名、地址等可以使用任意值

2. 在支付表單中測試

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
<!-- 範例支付表單 -->
<form id="payment-form">
  <div>
    <label>卡號</label>
    <input type="text" placeholder="4242 4242 4242 4242">
  </div>
  <div>
    <label>到期日期</label>
    <input type="text" placeholder="12/34">
  </div>
  <div>
    <label>CVC</label>
    <input type="text" placeholder="123">
  </div>
  <div>
    <label>持卡人姓名</label>
    <input type="text" placeholder="測試用戶">
  </div>
</form>

3. 在API調用中使用

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
// 使用測試API密鑰
const stripe = Stripe('pk_test_...');

// 創建支付意圖
const paymentIntent = await stripe.createPaymentIntent({
  amount: 2000,
  currency: 'usd',
  payment_method_types: ['card'],
});

// 確認支付
const result = await stripe.confirmCardPayment(
  paymentIntent.client_secret,
  {
    payment_method: {
      card: cardElement,
      billing_details: {
        name: '測試用戶',
      },
    }
  }
);

測試場景

1. 成功支付測試

使用 4242 4242 4242 4242 可以模擬成功的支付流程:

1
2
3
4
5
6
# 使用curl測試API
curl https://api.stripe.com/v1/payment_intents \
  -u "sk_test_...:" \
  -d amount=2000 \
  -d currency=usd \
  -d payment_method=pm_card_visa

2. 支付失敗測試

測試卡號模擬場景
4000 0000 0000 0002一般卡片被拒絕
4000 0000 0000 9995資金不足
4000 0000 0000 9987遺失卡片
4000 0000 0000 9979被盜卡片

3. 3D安全認證測試

1
2
4000 0027 6000 3184  # 需要3D安全認證
4000 0082 6000 3178  # 3D安全認證失敗

4. 退款和爭議測試

成功支付後,您可以測試:

  • 退款:使用Stripe Dashboard或API進行退款操作
  • 爭議:某些測試卡會自動產生爭議,用於測試爭議處理流程

重要注意事項

⚠️ 安全提醒

  1. 絕對不要在測試模式下使用真實卡號

    • 違反Stripe服務協議
    • 可能導致帳戶被暫停
    • 存在安全風險
  2. 確保使用正確的API密鑰

    1
    2
    3
    4
    5
    
    // 測試環境 - 以 pk_test_ 開頭
    const stripe = Stripe('pk_test_...');
    
    // 生產環境 - 以 pk_live_ 開頭  
    const stripe = Stripe('pk_live_...');
  3. 環境隔離

    • 測試數據不會影響生產環境
    • 測試支付不會產生實際費用
    • 測試客戶數據與真實客戶分離

🔧 開發最佳實踐

  1. 使用PaymentMethod而非直接卡號

    1
    2
    3
    4
    5
    
    // 推薦方式
    payment_method: 'pm_card_visa'
    
    // 避免在代碼中直接使用卡號
    card_number: '4242424242424242'  // 不推薦
    
  2. 完整的錯誤處理

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    
    try {
      const result = await stripe.confirmCardPayment(clientSecret);
      if (result.error) {
        // 處理支付錯誤
        console.error('支付失敗:', result.error.message);
      } else {
        // 支付成功
        console.log('支付成功:', result.paymentIntent);
      }
    } catch (error) {
      console.error('API調用錯誤:', error);
    }
  3. 日誌記錄

    1
    2
    3
    
    // 記錄測試支付
    console.log('測試支付 - 卡號末四位:', '4242');
    console.log('測試環境 - API密鑰:', 'pk_test_...');

常見錯誤及解決方案

1. 使用真實卡號錯誤

錯誤訊息:

1
Your card was declined. Your request was in test mode, but used a non test (live) card.

解決方案:

  • 使用上述提供的測試卡號
  • 確認處於測試模式
  • 檢查API密鑰是否為測試密鑰

2. API密鑰混用

錯誤訊息:

1
No such payment_intent: pi_xxx

解決方案:

  • 確保前端和後端使用相同環境的API密鑰
  • 測試環境使用 pk_test_sk_test_
  • 生產環境使用 pk_live_sk_live_

3. 測試環境配置錯誤

常見問題:

  • Webhook端點配置錯誤
  • 測試數據在生產環境中不可見
  • 支付成功但無法在Dashboard中找到

解決方案:

  • 檢查Webhook URL配置
  • 確認查看正確的環境Dashboard
  • 驗證API密鑰環境一致性

進階測試功能

1. 國際卡片測試

1
2
3
4
5
# 不同國家的測試卡
4000 0036 0000 0008  # 加拿大
4000 0056 0000 0008  # 巴西  
4000 0392 0000 0008  # 日本
4000 0826 0000 0008  # 英國

2. 特殊支付方式

1
2
3
4
5
// Apple Pay測試
payment_method: 'pm_card_amex_threeDSecureRequired'

// Google Pay測試  
payment_method: 'pm_card_visa_debit'

3. 訂閱和定期支付測試

1
2
3
4
5
6
7
8
9
// 創建測試訂閱
const subscription = await stripe.subscriptions.create({
  customer: 'cus_test_...',
  items: [{
    price: 'price_test_...',
  }],
  payment_behavior: 'default_incomplete',
  expand: ['latest_invoice.payment_intent'],
});

參考資源

總結

正確使用Stripe測試卡號是開發支付功能的關鍵步驟。記住以下要點:

  1. 始終在測試模式下使用測試卡號
  2. 使用正確的測試API密鑰
  3. 測試各種支付場景和錯誤情況
  4. 確保環境隔離和數據安全
  5. 遵循最佳實踐和安全規範

通過系統性的測試,您可以確保支付功能在生產環境中穩定可靠地運行。