AI 文件
這一頁是純 AI 專用文檔,適合直接把網址丟給 ChatGPT、Claude、Cursor 或其他 coding agent。
快速分享給 AI
如果你只想給 AI 一段最短指令,直接複製這段即可。
請先閱讀這份 AI 文件:https://ccpass.0800945.com/ai-docs 並依現有專案架構完成串串通登入整合。 請不要把 /oauth/token/ 誤當成 access_token API,它回傳的是 open_id、email、user_id 等會員識別資料。 如果可以,建議直接下載官方 SDK(PHP / Node / Browser)當作起點: - PHP SDK: https://ccpass.0800945.com/developer/index.php?route=sdk-download&type=php - Node SDK: https://ccpass.0800945.com/developer/index.php?route=sdk-download&type=node - Browser SDK: https://ccpass.0800945.com/developer/index.php?route=sdk-download&type=browser 若你需要乾淨 JSON 契約(避開 Cloudflare email obfuscation),請直接 fetch:https://ccpass.0800945.com/developer/index.php?route=ai-contract
一鍵複製整份 AI 提示包
這裡已經把快速指令、通用提示詞、Coding Agent 提示詞、JSON 契約與驗收清單整合成一包。
【串串通 Ccpass AI 提示包】
一、快速指令
請先閱讀這份 AI 文件:https://ccpass.0800945.com/ai-docs
並依現有專案架構完成串串通登入整合。
請不要把 /oauth/token/ 誤當成 access_token API,它回傳的是 open_id、email、user_id 等會員識別資料。
如果可以,建議直接下載官方 SDK(PHP / Node / Browser)當作起點:
- PHP SDK: https://ccpass.0800945.com/developer/index.php?route=sdk-download&type=php
- Node SDK: https://ccpass.0800945.com/developer/index.php?route=sdk-download&type=node
- Browser SDK: https://ccpass.0800945.com/developer/index.php?route=sdk-download&type=browser
若你需要乾淨 JSON 契約(避開 Cloudflare email obfuscation),請直接 fetch:https://ccpass.0800945.com/developer/index.php?route=ai-contract
二、通用提示詞
你現在要協助我把「串串通 Ccpass」登入整合到我的網站。
請先完整閱讀這份文件:
https://ccpass.0800945.com/ai-docs
系統端點:
- 授權端點:https://ccpass.0800945.com/oauth/authorize/
- Token 交換端點:https://ccpass.0800945.com/oauth/token/
- Email 發碼端點:https://ccpass.0800945.com/api/send-code/
- Email 驗證端點:https://ccpass.0800945.com/api/verify-code/
整合規則:
- 先導向 `/oauth/authorize/`(GET,瀏覽器跳轉)
- callback 會回到 `redirect_uri` 並帶回 `code`、`state`
- 後端再用 `client_id`、`client_secret`、`code` POST 呼叫 `/oauth/token/`
- `/oauth/token/` 成功時回傳 `open_id`、`email`、`user_id`、`client_id`
- 這不是標準 Bearer access token 流程
必填與時效:
- `client_secret` 只能在後端使用,前端永遠不能讀到
- `state` 必須由後端產生(建議 random_bytes(32) → bin2hex → 64 字元)、寫進 session、callback 時嚴格比對後銷毀
- `redirect_uri` 必須與 App 在後台設定的值**完全一致**(含 scheme、host、path)
- `code` 有效期限 **10 分鐘**且**只能使用一次**,過期或重用都會回 `授權碼無效/已過期/已使用。`
- Email 驗證碼為 **6 位數字**,有效期限 **5 分鐘**(300 秒)
必看重要文件:
- 整合前先看 SDK 範例(建議當起點,不要從零刻):https://ccpass.0800945.com/developer/index.php?route=sdk-download&type=php
- Callback 流程測試頁:https://ccpass.0800945.com/developer/index.php?route=callback-tester
請務必遵守:
- 不要把 `code` 寫進前端 localStorage / cookie(敏感、單次使用)
- 不要自己寫 OAuth state 產生器,要用後端內建 random_bytes
- Email 驗證的 `purpose` 預設 `register`,可用值含 `login` / `register` / `forgot_password` 等自由字串(最長 50 字元)
- 遇到 HTTP 422 表示請求格式錯;429 表示 rate limit(請讀 `Retry-After` header)
- 以 `provider=ccpass + open_id` 建立或查詢綁定資料;若 email 已存在但尚未綁定,請設計安全的合併或綁定流程
請直接提供:
- 路由設計(登入入口 / callback / 登出)
- 後端 Token 交換 service(含錯誤處理)
- 綁定資料表(建議 `provider` VARCHAR + `open_id` VARCHAR + `member_id` BIGINT + `email` VARCHAR,unique key 為 `(provider, open_id)`)
- Session / 登入狀態寫入方式
- 驗收步驟(含一個 curl 指令可成功呼叫 `/oauth/token/` 並驗證回應)
完成後請說明:
1. 實際修改了哪些檔案
2. 新增了哪些資料表或欄位
3. 如何用 curl 驗證整合成功
三、Coding Agent 提示詞
你現在是一名 coding agent,請根據這份文件直接在現有專案內完成登入整合:
https://ccpass.0800945.com/ai-docs
工作要求:
1. 先閱讀專案現有會員登入、Session、路由與資料表結構
2. 下載並參考官方 SDK 範例(PHP / Node / Browser 任一):
- PHP: https://ccpass.0800945.com/developer/index.php?route=sdk-download&type=php
- Node: https://ccpass.0800945.com/developer/index.php?route=sdk-download&type=node
- Browser: https://ccpass.0800945.com/developer/index.php?route=sdk-download&type=browser
3. 新增登入入口與 callback 路由
4. 新增後端 Token 交換 service(含 JSON 解析與錯誤處理)
5. 新增或沿用第三方綁定表,至少保存 `provider`、`open_id`、`member_id`、`email`,並把 `(provider, open_id)` 設為 unique key
6. 完成登入成功後的 Session 寫入與導頁
7. 補上 state 驗證、錯誤處理、Retry-After 讀取
重要規則:
- `/oauth/token/` 回傳的是會員識別資料(`open_id / email / user_id / client_id`),不是 access token
- `client_secret` 不能出現在前端
- `redirect_uri` 必須與 App 設定完全一致
- `state` 必須用後端 `random_bytes(32)` 產生 64 字元、寫進 session、callback 嚴格比對後銷毀
- `code` 10 分鐘內有效且只能使用一次
- Email 驗證碼 6 位數、5 分鐘內有效,`purpose` 預設 `register`
驗收方式:
- 用 curl 指令實際打 `/oauth/token/`,必須拿到 `success: true` + `data.open_id`
- 若失敗,請對照本文件「OAuth 錯誤碼表」排查
請交付:
- 實際修改了哪些檔案
- 新增了哪些資料表或欄位
- 如何設定 `client_id`、`client_secret`、`redirect_uri`
- 如何驗證整合成功(含一條 curl 指令)
四、JSON 契約
{
"platform": {
"name": "串串通 Ccpass",
"docs_url": "https://ccpass.0800945.com/ai-docs",
"base_url": "https://ccpass.0800945.com",
"sdk_downloads": {
"php": "https://ccpass.0800945.com/developer/index.php?route=sdk-download&type=php",
"node": "https://ccpass.0800945.com/developer/index.php?route=sdk-download&type=node",
"browser": "https://ccpass.0800945.com/developer/index.php?route=sdk-download&type=browser"
}
},
"oauth": {
"authorize": {
"method": "GET",
"url": "https://ccpass.0800945.com/oauth/authorize/",
"query": {
"client_id": "required, 你的 App Client ID",
"redirect_uri": "required, 必須與後台設定完全一致",
"state": "required, 後端產生的隨機字串"
},
"response": "302 redirect 回 redirect_uri,帶 query string code + state",
"code_ttl_seconds": 600,
"code_format": "64 hex chars (bin2hex(random_bytes(32)))"
},
"callback": {
"returns_query": [
"code",
"state"
],
"state_rules": "後端產生 random_bytes(32) -> bin2hex -> 64 字元;寫進 session;callback 嚴格比對後銷毀"
},
"token_exchange": {
"method": "POST",
"url": "https://ccpass.0800945.com/oauth/token/",
"content_type": "application/json",
"alt_content_type": "application/x-www-form-urlencoded",
"body": [
"client_id",
"client_secret",
"code"
],
"success_response": {
"success": true,
"data": {
"message": "授權碼交換成功。",
"open_id": "ccpass_open_id_xxx",
"email": "[email protected]",
"user_id": 123,
"client_id": "對應到你的 App"
}
},
"error_response": {
"success": false,
"message": "錯誤訊息(純字串)",
"errors": []
},
"note": "回傳會員識別資料,不是 access_token"
}
},
"email_verification": {
"send_code": {
"method": "POST",
"url": "https://ccpass.0800945.com/api/send-code/",
"content_type": "application/json",
"body": {
"email": "required, Email 地址",
"purpose": "預設 register,可用 login / register / forgot_password 等自由字串,最長 50 字元"
},
"success_response": {
"success": true,
"data": {
"message": "驗證碼已寄出,請至信箱查收。",
"purpose": "register",
"expires_in": 300
}
},
"rate_limit": "同 Email 60 秒內限制;單日發送上限。觸發時回 429 + Retry-After header"
},
"verify_code": {
"method": "POST",
"url": "https://ccpass.0800945.com/api/verify-code/",
"content_type": "application/json",
"body": {
"email": "required, Email 地址",
"code": "required, 6 位數字",
"purpose": "與寄送時相同"
},
"success_response": {
"success": true,
"data": {
"message": "驗證碼正確,可繼續下一步。",
"purpose": "register"
}
},
"note": "驗證碼錯誤次數過多將回 429"
}
},
"errors": {
"http_codes": {
"200": "成功",
"422": "缺少必要欄位 / Client Secret 錯誤 / code 無效或過期或已使用 / App 已停用",
"429": "觸發 rate limit(讀 Retry-After header)"
},
"error_format": {
"success": false,
"message": "人類可讀的錯誤訊息字串",
"errors": "欄位級錯誤陣列(通常為空)"
}
},
"binding": {
"provider": "ccpass",
"unique_key": [
"provider",
"open_id"
],
"recommended_columns": [
"member_id",
"provider",
"open_id",
"email"
],
"example_schema": "CREATE TABLE oauth_bindings (id BIGINT PK, member_id BIGINT, provider VARCHAR(32), open_id VARCHAR(128), email VARCHAR(255), created_at TIMESTAMP, UNIQUE KEY uk_provider_openid (provider, open_id))"
},
"verification": {
"curl_token_example": "curl -X POST 'https://ccpass.0800945.com/oauth/token/' -H 'Content-Type: application/json' -d '{\"client_id\":\"請先在開發者中心建立 App 取得 client_id\",\"client_secret\":\"YOUR_CLIENT_SECRET\",\"code\":\"PASTE_AUTH_CODE_HERE\"}'",
"callback_tester": "https://ccpass.0800945.com/developer/index.php?route=callback-tester"
}
}
五、驗收清單
- 能正確導向 /oauth/authorize/(瀏覽器 302 redirect)。
- callback 能收到 code 與 state,且後端會嚴格比對 state 後銷毀。
- 後端能成功呼叫 /oauth/token/ 並解析 open_id、email、user_id、client_id。
- 能查詢或建立第三方綁定資料(unique key = (provider, open_id))。
- 登入成功後能寫入本站 Session 並導向登入成功頁。
- 若需要 Email 驗證,也能正確使用 /api/send-code/ 與 /api/verify-code/。
- 可用 curl 指令打 /oauth/token/ 驗證整合(指令在下方範例區)。
- 遇到 422/429 錯誤時會讀 `Retry-After` header 並回傳合理錯誤訊息。
核心規格
| AI 文件網址 | https://ccpass.0800945.com/ai-docs |
|---|---|
| 授權端點 | https://ccpass.0800945.com/oauth/authorize/ |
| Token 交換端點 | https://ccpass.0800945.com/oauth/token/ |
| Email 發碼端點 | https://ccpass.0800945.com/api/send-code/ |
| Email 驗證端點 | https://ccpass.0800945.com/api/verify-code/ |
| 範例 Client ID | 請先在開發者中心建立 App 取得 client_id |
| 範例 Callback URL | https://your-domain.com/oauth/callback |
AI 一定要理解的規則
- 流程固定是:登入入口 -> /oauth/authorize/ -> callback 收 code/state -> 後端 /oauth/token/。
- /oauth/token/ 回傳的是會員識別資料,不是標準 access_token。
- client_secret 只能在後端保存與呼叫,前端永遠不能讀到。
- redirect_uri 必須與 App 設定完全一致(含 scheme、host、path)。
- state 必須由後端 random_bytes(32) 產生 64 字元、寫進 session、callback 嚴格比對後銷毀。
- code 有效期限 10 分鐘且只能使用一次。
- Email 驗證碼為 6 位數字,有效期限 5 分鐘。
- 建議以 provider=ccpass + open_id 建立綁定資料,unique key 為 (provider, open_id)。
- 若 email 已存在但尚未綁定,請設計安全的合併或綁定流程(不可自動合併)。
官方 SDK 下載(強烈建議當起點)
SDK 範例涵蓋 authorize redirect、state 驗證、token 交換、callback 處理 — 直接拿來改比從零刻快得多。
Request / Response 範例(真實可跑)
1. /oauth/authorize/ — 瀏覽器 GET 跳轉
用戶點「用串串通登入」時,把瀏覽器導向以下網址:
https://ccpass.0800945.com/oauth/authorize/?client_id=%E8%AB%8B%E5%85%88%E5%9C%A8%E9%96%8B%E7%99%BC%E8%80%85%E4%B8%AD%E5%BF%83%E5%BB%BA%E7%AB%8B+App+%E5%8F%96%E5%BE%97+client_id&redirect_uri=https%3A%2F%2Fyour-domain.com%2Foauth%2Fcallback&state=%3C%E5%BE%8C%E7%AB%AF%E7%94%A2%E7%94%9F%E7%9A%84+64+%E5%AD%97%E5%85%83%E9%9A%A8%E6%A9%9F%E5%AD%97%E4%B8%B2%3E
用戶登入並同意後,串串通會 302 redirect 回 `redirect_uri`,並帶 query string code=... + state=...。
2. /oauth/token/ — 後端 POST 換 token
Request JSON
{
"client_id": "請先在開發者中心建立 App 取得 client_id",
"client_secret": "YOUR_CLIENT_SECRET",
"code": "oauth_authorization_code_here"
}
curl 指令
curl -X POST 'https://ccpass.0800945.com/oauth/token/' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-d '{
"client_id": "請先在開發者中心建立 App 取得 client_id",
"client_secret": "YOUR_CLIENT_SECRET",
"code": "oauth_authorization_code_here"
}'
成功回應 (HTTP 200)
{
"success": true,
"data": {
"message": "授權碼交換成功。",
"open_id": "ccpass_open_id_a1b2c3d4e5f6g7h8",
"email": "[email protected]",
"user_id": 12345,
"client_id": "請先在開發者中心建立 App 取得 client_id"
}
}
失敗回應 (HTTP 422)
{
"success": false,
"message": "授權碼已使用。",
"errors": []
}
這不是標準 OAuth access_token。`data.open_id` 就是用戶在串串通上的唯一識別代號,請用 `open_id` 建立或查詢你自己的會員綁定資料。
3. /api/send-code/ — 寄送 Email 驗證碼
Request
{
"email": "[email protected]",
"purpose": "register"
}
curl
curl -X POST 'https://ccpass.0800945.com/api/send-code/' \
-H 'Content-Type: application/json' \
-d '{
"email": "[email protected]",
"purpose": "register"
}'
成功回應 (HTTP 200)
{
"success": true,
"data": {
"message": "驗證碼已寄出,請至信箱查收。",
"purpose": "register",
"expires_in": 300
}
}
4. /api/verify-code/ — 驗證 6 位數
Request
{
"email": "[email protected]",
"code": "123456",
"purpose": "register"
}
curl
curl -X POST 'https://ccpass.0800945.com/api/verify-code/' \
-H 'Content-Type: application/json' \
-d '{
"email": "[email protected]",
"code": "123456",
"purpose": "register"
}'
成功回應 (HTTP 200)
{
"success": true,
"data": {
"message": "驗證碼正確,可繼續下一步。",
"purpose": "register"
}
}
錯誤碼表(整合失敗先查這張表)
所有錯誤回應統一格式:{ success: false, message: "...", errors: [] }。429 時請讀 Retry-After header。
| HTTP 狀態 | 情境 | 可能訊息 | 處理建議 |
|---|---|---|---|
| 200 | 成功 | (依端點) | 保存 data 欄位並繼續。 |
| 422 | 缺少必要欄位 | `client_id、client_secret、code 皆為必填。` | 確認後端請求帶齊三個必要欄位。 |
| 422 | Client Secret 錯誤 | `Client Secret 錯誤。` | 檢查是否使用最新憑證;若剛重置過 secret 請同步更新設定。 |
| 422 | 授權碼無效 | `授權碼無效。` | 確認 code 是剛從 callback 收到、沒有被竄改。 |
| 422 | 授權碼已過期 | `授權碼已過期。` | code 10 分鐘內有效;超過就要重走 authorize。 |
| 422 | 授權碼已使用 | `授權碼已使用。` | code 只能換一次 token;重用就重走 authorize。 |
| 422 | App 已停用 | `應用已停用。` | 到開發者後台「我的應用」啟用該 App。 |
| 422 | 使用者狀態異常 | `使用者狀態異常。` | 請使用者聯絡平台客服。 |
| 429 | 觸發 rate limit | `Token 交換請求過於頻繁,請稍後再試。` | 讀取 `Retry-After` header,延後重試;檢查是否有錯誤憑證造成大量失敗。 |
Email 驗證 `purpose` 用途對照
`purpose` 是自由字串(最長 50 字元),預設 register。以下是常用值,AI 可依情境挑選。
| purpose 值 | 用途 |
|---|---|
register |
註冊流程(預設值) |
login |
登入流程 |
forgot_password |
忘記密碼 / 重設密碼 |
change_email |
更換 Email |
bind_email |
綁定 Email |
綁定資料表 Schema 參考
第三方綁定資料表建議結構(MySQL 範例)。`provider` 預留未來擴充其他 OAuth provider。
CREATE TABLE oauth_bindings ( id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT, member_id BIGINT UNSIGNED NOT NULL, provider VARCHAR(32) NOT NULL DEFAULT 'ccpass', open_id VARCHAR(128) NOT NULL, email VARCHAR(255) DEFAULT NULL, created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, UNIQUE KEY uk_provider_openid (provider, open_id), KEY idx_member (member_id) );
可直接貼給 ChatGPT / Claude 的提示詞
你現在要協助我把「串串通 Ccpass」登入整合到我的網站。 請先完整閱讀這份文件: https://ccpass.0800945.com/ai-docs 系統端點: - 授權端點:https://ccpass.0800945.com/oauth/authorize/ - Token 交換端點:https://ccpass.0800945.com/oauth/token/ - Email 發碼端點:https://ccpass.0800945.com/api/send-code/ - Email 驗證端點:https://ccpass.0800945.com/api/verify-code/ 整合規則: - 先導向 `/oauth/authorize/`(GET,瀏覽器跳轉) - callback 會回到 `redirect_uri` 並帶回 `code`、`state` - 後端再用 `client_id`、`client_secret`、`code` POST 呼叫 `/oauth/token/` - `/oauth/token/` 成功時回傳 `open_id`、`email`、`user_id`、`client_id` - 這不是標準 Bearer access token 流程 必填與時效: - `client_secret` 只能在後端使用,前端永遠不能讀到 - `state` 必須由後端產生(建議 random_bytes(32) → bin2hex → 64 字元)、寫進 session、callback 時嚴格比對後銷毀 - `redirect_uri` 必須與 App 在後台設定的值**完全一致**(含 scheme、host、path) - `code` 有效期限 **10 分鐘**且**只能使用一次**,過期或重用都會回 `授權碼無效/已過期/已使用。` - Email 驗證碼為 **6 位數字**,有效期限 **5 分鐘**(300 秒) 必看重要文件: - 整合前先看 SDK 範例(建議當起點,不要從零刻):https://ccpass.0800945.com/developer/index.php?route=sdk-download&type=php - Callback 流程測試頁:https://ccpass.0800945.com/developer/index.php?route=callback-tester 請務必遵守: - 不要把 `code` 寫進前端 localStorage / cookie(敏感、單次使用) - 不要自己寫 OAuth state 產生器,要用後端內建 random_bytes - Email 驗證的 `purpose` 預設 `register`,可用值含 `login` / `register` / `forgot_password` 等自由字串(最長 50 字元) - 遇到 HTTP 422 表示請求格式錯;429 表示 rate limit(請讀 `Retry-After` header) - 以 `provider=ccpass + open_id` 建立或查詢綁定資料;若 email 已存在但尚未綁定,請設計安全的合併或綁定流程 請直接提供: - 路由設計(登入入口 / callback / 登出) - 後端 Token 交換 service(含錯誤處理) - 綁定資料表(建議 `provider` VARCHAR + `open_id` VARCHAR + `member_id` BIGINT + `email` VARCHAR,unique key 為 `(provider, open_id)`) - Session / 登入狀態寫入方式 - 驗收步驟(含一個 curl 指令可成功呼叫 `/oauth/token/` 並驗證回應) 完成後請說明: 1. 實際修改了哪些檔案 2. 新增了哪些資料表或欄位 3. 如何用 curl 驗證整合成功
可直接貼給 Coding Agent 的提示詞
你現在是一名 coding agent,請根據這份文件直接在現有專案內完成登入整合: https://ccpass.0800945.com/ai-docs 工作要求: 1. 先閱讀專案現有會員登入、Session、路由與資料表結構 2. 下載並參考官方 SDK 範例(PHP / Node / Browser 任一): - PHP: https://ccpass.0800945.com/developer/index.php?route=sdk-download&type=php - Node: https://ccpass.0800945.com/developer/index.php?route=sdk-download&type=node - Browser: https://ccpass.0800945.com/developer/index.php?route=sdk-download&type=browser 3. 新增登入入口與 callback 路由 4. 新增後端 Token 交換 service(含 JSON 解析與錯誤處理) 5. 新增或沿用第三方綁定表,至少保存 `provider`、`open_id`、`member_id`、`email`,並把 `(provider, open_id)` 設為 unique key 6. 完成登入成功後的 Session 寫入與導頁 7. 補上 state 驗證、錯誤處理、Retry-After 讀取 重要規則: - `/oauth/token/` 回傳的是會員識別資料(`open_id / email / user_id / client_id`),不是 access token - `client_secret` 不能出現在前端 - `redirect_uri` 必須與 App 設定完全一致 - `state` 必須用後端 `random_bytes(32)` 產生 64 字元、寫進 session、callback 嚴格比對後銷毀 - `code` 10 分鐘內有效且只能使用一次 - Email 驗證碼 6 位數、5 分鐘內有效,`purpose` 預設 `register` 驗收方式: - 用 curl 指令實際打 `/oauth/token/`,必須拿到 `success: true` + `data.open_id` - 若失敗,請對照本文件「OAuth 錯誤碼表」排查 請交付: - 實際修改了哪些檔案 - 新增了哪些資料表或欄位 - 如何設定 `client_id`、`client_secret`、`redirect_uri` - 如何驗證整合成功(含一條 curl 指令)
可直接給 AI / Agent 讀的 JSON 契約
{
"platform": {
"name": "串串通 Ccpass",
"docs_url": "https://ccpass.0800945.com/ai-docs",
"base_url": "https://ccpass.0800945.com",
"sdk_downloads": {
"php": "https://ccpass.0800945.com/developer/index.php?route=sdk-download&type=php",
"node": "https://ccpass.0800945.com/developer/index.php?route=sdk-download&type=node",
"browser": "https://ccpass.0800945.com/developer/index.php?route=sdk-download&type=browser"
}
},
"oauth": {
"authorize": {
"method": "GET",
"url": "https://ccpass.0800945.com/oauth/authorize/",
"query": {
"client_id": "required, 你的 App Client ID",
"redirect_uri": "required, 必須與後台設定完全一致",
"state": "required, 後端產生的隨機字串"
},
"response": "302 redirect 回 redirect_uri,帶 query string code + state",
"code_ttl_seconds": 600,
"code_format": "64 hex chars (bin2hex(random_bytes(32)))"
},
"callback": {
"returns_query": [
"code",
"state"
],
"state_rules": "後端產生 random_bytes(32) -> bin2hex -> 64 字元;寫進 session;callback 嚴格比對後銷毀"
},
"token_exchange": {
"method": "POST",
"url": "https://ccpass.0800945.com/oauth/token/",
"content_type": "application/json",
"alt_content_type": "application/x-www-form-urlencoded",
"body": [
"client_id",
"client_secret",
"code"
],
"success_response": {
"success": true,
"data": {
"message": "授權碼交換成功。",
"open_id": "ccpass_open_id_xxx",
"email": "[email protected]",
"user_id": 123,
"client_id": "對應到你的 App"
}
},
"error_response": {
"success": false,
"message": "錯誤訊息(純字串)",
"errors": []
},
"note": "回傳會員識別資料,不是 access_token"
}
},
"email_verification": {
"send_code": {
"method": "POST",
"url": "https://ccpass.0800945.com/api/send-code/",
"content_type": "application/json",
"body": {
"email": "required, Email 地址",
"purpose": "預設 register,可用 login / register / forgot_password 等自由字串,最長 50 字元"
},
"success_response": {
"success": true,
"data": {
"message": "驗證碼已寄出,請至信箱查收。",
"purpose": "register",
"expires_in": 300
}
},
"rate_limit": "同 Email 60 秒內限制;單日發送上限。觸發時回 429 + Retry-After header"
},
"verify_code": {
"method": "POST",
"url": "https://ccpass.0800945.com/api/verify-code/",
"content_type": "application/json",
"body": {
"email": "required, Email 地址",
"code": "required, 6 位數字",
"purpose": "與寄送時相同"
},
"success_response": {
"success": true,
"data": {
"message": "驗證碼正確,可繼續下一步。",
"purpose": "register"
}
},
"note": "驗證碼錯誤次數過多將回 429"
}
},
"errors": {
"http_codes": {
"200": "成功",
"422": "缺少必要欄位 / Client Secret 錯誤 / code 無效或過期或已使用 / App 已停用",
"429": "觸發 rate limit(讀 Retry-After header)"
},
"error_format": {
"success": false,
"message": "人類可讀的錯誤訊息字串",
"errors": "欄位級錯誤陣列(通常為空)"
}
},
"binding": {
"provider": "ccpass",
"unique_key": [
"provider",
"open_id"
],
"recommended_columns": [
"member_id",
"provider",
"open_id",
"email"
],
"example_schema": "CREATE TABLE oauth_bindings (id BIGINT PK, member_id BIGINT, provider VARCHAR(32), open_id VARCHAR(128), email VARCHAR(255), created_at TIMESTAMP, UNIQUE KEY uk_provider_openid (provider, open_id))"
},
"verification": {
"curl_token_example": "curl -X POST 'https://ccpass.0800945.com/oauth/token/' -H 'Content-Type: application/json' -d '{\"client_id\":\"請先在開發者中心建立 App 取得 client_id\",\"client_secret\":\"YOUR_CLIENT_SECRET\",\"code\":\"PASTE_AUTH_CODE_HERE\"}'",
"callback_tester": "https://ccpass.0800945.com/developer/index.php?route=callback-tester"
}
}
驗收清單
- 能正確導向 /oauth/authorize/(瀏覽器 302 redirect)。
- callback 能收到 code 與 state,且後端會嚴格比對 state 後銷毀。
- 後端能成功呼叫 /oauth/token/ 並解析 open_id、email、user_id、client_id。
- 能查詢或建立第三方綁定資料(unique key = (provider, open_id))。
- 登入成功後能寫入本站 Session 並導向登入成功頁。
- 若需要 Email 驗證,也能正確使用 /api/send-code/ 與 /api/verify-code/。
- 可用 curl 指令打 /oauth/token/ 驗證整合(指令在下方範例區)。
- 遇到 422/429 錯誤時會讀 `Retry-After` header 並回傳合理錯誤訊息。