總結摘要
詳細介紹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 | 到期日期 |
|---|
| Visa | 4242 4242 4242 4242 | 任意3位數 | 任意未來日期 |
| Visa (債務卡) | 4000 0566 5566 5556 | 任意3位數 | 任意未來日期 |
| Mastercard | 5555 5555 5555 4444 | 任意3位數 | 任意未來日期 |
| American Express | 3782 822463 10005 | 任意4位數 | 任意未來日期 |
| Discover | 6011 1111 1111 1117 | 任意3位數 | 任意未來日期 |
| Diners Club | 3056 9300 0902 0004 | 任意3位數 | 任意未來日期 |
| JCB | 3566 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進行退款操作
- 爭議:某些測試卡會自動產生爭議,用於測試爭議處理流程
重要注意事項
⚠️ 安全提醒
絕對不要在測試模式下使用真實卡號
- 違反Stripe服務協議
- 可能導致帳戶被暫停
- 存在安全風險
確保使用正確的API密鑰
1
2
3
4
5
| // 測試環境 - 以 pk_test_ 開頭
const stripe = Stripe('pk_test_...');
// 生產環境 - 以 pk_live_ 開頭
const stripe = Stripe('pk_live_...');
|
環境隔離
- 測試數據不會影響生產環境
- 測試支付不會產生實際費用
- 測試客戶數據與真實客戶分離
🔧 開發最佳實踐
使用PaymentMethod而非直接卡號
1
2
3
4
5
| // 推薦方式
payment_method: 'pm_card_visa'
// 避免在代碼中直接使用卡號
card_number: '4242424242424242' // 不推薦
|
完整的錯誤處理
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);
}
|
日誌記錄
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測試卡號是開發支付功能的關鍵步驟。記住以下要點:
- 始終在測試模式下使用測試卡號
- 使用正確的測試API密鑰
- 測試各種支付場景和錯誤情況
- 確保環境隔離和數據安全
- 遵循最佳實踐和安全規範
通過系統性的測試,您可以確保支付功能在生產環境中穩定可靠地運行。