錯誤碼
建單時,ST Pay 依以下順序檢查,同時違反多項時只回傳第一個:
簽章 → 時間戳 → 來源 IP → 商戶狀態 → 必填欄位與格式 → callback_url 的環境與位址 → 單筆上下限 → 商戶單號重複 →(代收)同一會員待審批單上限 →(代收)收款帳戶與尾數分配 /(代付)餘額。
在這之前:本文不是 JSON 物件或 Content-Type 不是 application/json,直接回 invalid_parameter;沒送 api_identity 或 sign 回 invalid_signature。
code | HTTP | message | 原因與處理方式 |
|---|---|---|---|
invalid_signature | 401 | 簽章驗證失敗 | api_identity 錯誤、憑證已停用,或簽章不符。請依簽章的範例核對程式,並確認使用對應環境的憑證。欄位值送成數字或布林會回這個或 invalid_parameter,所有值請以字串送出;沒送 api_identity 或 sign 也是。 |
timestamp_expired | 400 | 請求時間與伺服器時間相差超過 5 分鐘,請校正您的伺服器時間(伺服器目前時間:yyyy-MM-dd HH:mm:ss) | timestamp 與 ST Pay 伺服器時間相差超過 5 分鐘(過去或未來都算)。訊息附上伺服器目前時間,可據此看出差距;請開啟 NTP 校正伺服器時間,並在送出當下才取時間簽章。 |
ip_not_allowed | 403 | 來源 IP 不在白名單 | 請確認伺服器實際的出口 IP,並請 ST Pay 加入白名單;加入後約 1 分鐘生效。來源 IP 不在任何白名單時,請求在閘道就被擋下:回 HTTP 403,本文是 HTML 而不是 JSON,處理方式相同。 |
merchant_disabled | 403 | 商戶已停用 | 商戶停用期間不能建單,請聯繫 ST Pay。 |
permission_denied | 403 | 無此操作權限 | 通常是 /api/v1/ 底下的路徑拼錯。用 GET,或路徑不在 /api/v1/ 底下時,閘道直接回 HTTP 404(本文不是 JSON)。 |
missing_parameter | 400 | 缺少必填欄位 | 必填欄位沒送、為 null 或空字串;callback_url 全是空白;銀行轉帳代付缺少銀行欄位;查單沒送任何單號。 |
invalid_parameter | 400 | 欄位值不合法 | 欄位值的格式、長度、字元或列舉值不合法;欄位值不是字串;本文不是合法的 JSON 物件,或 Content-Type 不是 application/json;callback_url 格式不合(規則見 Callback 網址);FPS 代付帶了銀行欄位;銀行代碼不在清單內。 |
invalid_amount | 400 | 金額格式不正確 | 金額為 0、負數、超過 2 位小數(照字面算,1000.500 也算 3 位)、大於 9999999999999999.99,或不是數字。 |
missing_member_identity | 400 | 請提供會員唯一識別或真實姓名 | 代收建單時 merchant_user_id 與 payer_name 都沒送。 |
invalid_callback_url | 400 | Callback 網址不符合規定:不可為本機或內網位址 | 建單的 callback_url 主機是本機、內網位址、內部網域、非標準的 IP 寫法。見 Callback 網址。格式錯誤(不是網址、超過 500 字元、含空白或其他格式規則,見同一節)回 invalid_parameter。 |
amount_out_of_range | 422 | 金額超出限額 | 原始金額或代付金額超出單筆上下限。 |
merchant_order_no_duplicate | 409 | 商戶單號重複 | 見重複請求與結果確認。 |
user_active_orders_limit | 422 | 有效訂單已達上限 | 同一會員已有 10 張待審批的代收單。請等其中的單完成或到期後再建立。 |
channel_full | 422 | 通道已滿,請輸入其他金額再試 | 同一通道、同一原始金額的辨識尾數已全部被待審批單占用。請付款人換一個金額再試。 |
no_available_card | 422 | 通道已滿,請輸入其他金額再試 | 該通道目前沒有可用的收款帳戶。可稍後再試或改用另一個通道;持續發生請聯繫 ST Pay。 |
insufficient_balance | 422 | 商戶餘額不足 | 代付建單時,可用餘額小於代付金額加手續費。 |
order_not_found | 404 | 查無此單 | 訂單不存在、不屬於您,或已超過保存期限被刪除。 |
query_conflict | 400 | 訂單號與商戶單號指向不同訂單 | 查單時同時送了兩個單號,但它們不是同一張單。 |
internal_error | 500 | 系統錯誤,請以商戶單號查單確認結果 | ST Pay 內部錯誤,訂單可能已建立也可能沒有。不要直接當作失敗,請以商戶單號查單確認。 |
channel_full 與 no_available_card 的 message 相同,請以 code 區分。
收到 invalid_parameter、invalid_signature 等錯誤又找不出原因時,請提供 api_identity、商戶單號(查單則提供查詢的單號)與發生時間(UTC+8),請 ST Pay 對接窗口查詢 API 錯誤紀錄,可查到是哪一欄有問題或簽章失敗的原因。ST Pay 只記錄 api_identity 正確的請求;api_identity 本身錯誤時查不到,請先核對。