回傳 403/401(權限、權限範圍)
疑難排解
403
401
權限
權限範圍
事象
授權流程明明成功了,呼叫 API 卻回傳 401 或 403。
授權流程明明成功了,呼叫 API 卻回傳 401 或 403。
401 與 403 的差異
| 碼 | 意義 |
|---|---|
| 401 Unauthorized | 驗證資訊不正確、無效、過期。權杖的問題 |
| 403 Forbidden | 驗證成功了,但沒有該操作的權限。權限範圍、角色、所有權的問題 |
401 的典型情況與因應
- 權杖過期(
expired_token)→ 以刷新權杖更新 - 權杖已撤銷(使用者解除串接等)→ 重新授權流程
- Authorization 標頭的格式不正確 →
Bearer(帶半形空格)+ 權杖 - 環境搞錯(將正式權杖用於測試環境)→ 確認環境
403 的典型情況與因應
- 權限範圍不足(
insufficient_scope)→ 追加必要的權限範圍後重新授權 - 無店鋪存取權 → 確認是否未存取應用程式所串接店鋪以外的資源
- User 系權限範圍未審查(
app_not_approved)→ 申請審查(參閱另一篇文章) - 角色權限不足 → 串接時的使用者未持有必要的角色(擁有者等)
- 方案限制(
plan_limit_exceeded)→ 升級店鋪端的方案
釐清步驟
- 確認回應的
error.code與message - 將
X-RR-Request-Id記錄至日誌 - 若為 401 則呼叫
/v1/me確認權杖本身的有效性(若成功則權杖 OK,若在後段變成 403 則為權限問題) - 若為 403,確認目前權杖中包含的
scope(/v1/oauth/introspect) - 若未包含必要的權限範圍則重新授權
權限範圍的確認方法
curl -X POST https://receiptroller.io/oauth/introspect \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "token=$ACCESS_TOKEN&client_id=$CLIENT_ID&client_secret=$SECRET"
→ {
"active": true,
"scope": "store.read receipt.read",
"client_id": "...",
"exp": 1745740001
}
相關指南
發布日: 2026-04-27
更新日: 2026-07-06
標籤
API (22)
OAuth (15)
Android (10)
iOS (9)
Webhook (8)
api (7)
oauth (5)
POS串接 (4)
getting-started (4)
參考 (4)
相關文章
-
無法取得權杖(驗證錯誤)無法取得存取權杖時的原因釐清。解說 invalid_client、invalid_grant、redirect_uri_mismatch 等代表性錯誤與因應。
-
方案仍為免費而不顯示開發者入口網站ReceiptRoller 的開發者入口網站不顯示時的確認步驟。解說方案為免費時的因應方法、商業帳戶切換、顯示反映時機。
-
User 系權限範圍回傳 app_not_approved使用 User 系權限範圍時回傳 app_not_approved 錯誤時的確認步驟。解說在沙箱框架下的開發、審查申請、沙箱轉正式環境的流程。
-
Webhook 沒有送達Webhook 沒有送達接收端點時的原因釐清。依端點設定、訂閱事件、可達性、簽章驗證失敗、防火牆等順序確認的步驟。