沙箱通過 kuko_test_ 密鑰進入,不產生真實資金。訂單、退款、錢包和 Webhook 與正式環境隔離。
建議覆蓋的場景
- 創建訂單並打開
checkout_url。 - 完成一次成功支付並驗證
payment.succeeded簽名。 - 對同一個
out_trade_no重複下單,確認返回同一筆訂單。 - 模擬接收端返回 500,確認 Webhook 被重投且
event_id不變。 - 發起全額與部分退款,並查詢退款最終狀態。
- 使用錯誤密鑰、錯誤金額與超過限流的請求驗證錯誤處理。
測試卡號
沙箱收銀台是 KukoPay 自己的測試表單。有效期填任意未來日期,安全碼填任意 3 位數字(American Express 為 4 位)。表單只接受下列測試卡號;卡號只在瀏覽器裏用來選擇測試結果,不會發送到服務器,也請不要在沙箱中輸入真實卡號。
| 卡號 | 卡組織 | 結果 |
|---|---|---|
4242 4242 4242 4242 | Visa | 支付成功 |
5555 5555 5555 4444 | Mastercard | 支付成功 |
3782 822463 10005 | American Express | 支付成功 |
6200 0000 0000 0005 | 銀聯 | 支付成功 |
4000 0000 0000 3220 | Visa | 需要 3D Secure 驗證,在驗證頁選擇成功或失敗 |
4000 0000 0000 0002 | Visa | 被發卡行拒絕(card_declined) |
4000 0000 0000 9995 | Visa | 餘額不足(insufficient_funds) |
4000 0000 0000 0069 | Visa | 卡已過期(expired_card) |
4000 0000 0000 0127 | Visa | 安全碼錯誤(incorrect_cvc) |
4000 0000 0000 0119 | Visa | 處理出錯(processing_error) |
支付失敗後,同一個 checkout_url 仍然可以繼續支付:收銀台會提示失敗原因(沙箱中附帶上表的錯誤碼),並換一筆新的支付讓買家重試,訂單保持 pending。
錢包與 3D Secure
選擇支付寶、微信支付、PayPal、Apple Pay 或 Google Pay 後點擊支付,收銀台會打開一個測試授權頁;需要 3D Secure 的測試卡會打開測試驗證頁。在頁面上選擇「授權 / 完成驗證」或「拒絕 / 驗證失敗」,會自動回到收銀台:
- 授權成功:訂單變為
paid,發出payment.succeeded。即使買家在授權頁直接關閉瀏覽器,訂單也會入賬。 - 拒絕或驗證失敗:訂單保持
pending,買家回到收銀台後可以換一種方式重新支付。 - 買家沒有完成授權就回到收銀台:原來那筆支付會先被取消,再換一筆新的,之後在舊授權頁上的操作不會再扣款。
用這幾種情況驗證你的回跳頁面和 Webhook 處理:跳回 return_url 不代表已付款,請以 Webhook 或查詢訂單接口的結果為準。
切換正式環境時,只替換服務端密鑰。不要把正式密鑰提交到源碼倉庫,也不要在前端構建變量中暴露它。