One-Time Password(OTP) API¶
One-Time Password(OTP) 驗證系統提供由 發送 OTP 與 驗證 OTP 組成的 API,可將 OTP 驗證套用至遊戲。
網址¶
| 伺服器 | URL |
|---|---|
| 生產環境 | https://otp.qpyou.cn |
| 沙盒環境 | https://sandbox-otp.qpyou.cn |
認證方法¶
若要使用 OTP 發送系統提供的 API,必須先取得驗證權杖(API KEY)。當遊戲註冊到 App Center 時,驗證權杖會自動產生。驗證權杖遵循 JSON Web Token(JWT) 規範,且沒有到期時間,因此可持續使用。
發送 OTP¶
OTP Short Message Service(SMS) 發送¶
- 基本信息
| 方法 | POST |
#### **回調數據資訊** { #callback-data }
| 名稱 | 類型 | 必填 | 描述 |
| --- | --- | --- | --- |
| expiry | 字串 | 是 | OTP 有效期(例如:2024-06-25T11:39:43.076573600+09:00[Asia/Seoul]) |
| expiryTimestamp | Long | O | OTP 到期時間戳記(毫秒) <br> (範例: `1719283183076`) |
| lang | 字串 | 否 | 語言代碼,默認為 en |
| lookup | 布林值 | 否 | 驗證 to 值是否為有效的電話號碼格式,默認為 false |
| otp | 字串 | 是 | OTP 數字 |
| provider | 字串 | 是 | 短信提供者,固定值 DIRECTSEND 用於直接發送 |
| retry | 布林值 | 否 | 重試選項 |
| serviceName | 字串 | 是 | 在發送信息設置菜單中設置的服務名稱(英文) |
| to | 字串 | 是 | 收件人電話號碼 |
| toCountryNo | 字串 | 是 | 收件人國家代碼 |
#### 錯誤回應碼
| HTTP Status | id | error | 說明 |
|-------------|-------|----------------------|---|
| 400 | 40004 | VALIDATION_FAIL | 請求本文有效性驗證失敗時發生。 |
| 400 | 40003 | INVALID_PHONE_NUMBER | 電話號碼有效性驗證失敗時發生。 |
| 422 | 42202 | NO_TOPIC | 若標頭中的 `Topic` 傳入值無效,則會發生。 |
| 409 | 40902 | DUPLICATE_OTP_EXISTS | 若偵測到在一定時間內對同一驗證對象重複請求發放 OTP,則會回傳 `DUPLICATE_OTP_EXISTS` 錯誤。請在最多 15 秒後重試。 |
| 429 | 42903 | SMS_LIMIT_EXCEEDED | 若同一號碼在 24 小時內請求次數超過設定的發送上限,則會發生。回應訊息中可能包含設定的上限值。 |
#### Topic 值無效時
若請求標頭的 `Topic` 值與在 Hive Console 中註冊的發送 ID 不一致,就會發生此錯誤。請確認 `Topic` 標頭值,以及在 <u>Hive Console > 通知 > SMS OTP > 發送資訊設定</u> 中註冊的 <b>發送 ID</b>。
```java
{
"id" : 42202,
"error" : "NO_TOPIC",
"reason" : "No such 'Topic' Data"
}
產生重複 OTP 時¶
若在同一區間內傳送兩次相同的請求,會產生相同的 OTP。此時第一個請求會成功,第二個請求則會以 DUPLICATE_OTP_EXISTS 失敗。請在目前區間結束後,於下一個區間重新傳送相同請求。
{
"id" : 40902,
"error" : "DUPLICATE_OTP_EXISTS",
"reason" : "Already sent OTP to this phone number."
}
超過 24 小時發送上限時¶
若同一電話號碼在 24 小時內超過允許的發送次數,便會發生此錯誤。此上限不是固定值。下方範例回應訊息中包含的次數,是顯示所設定上限值的範例。請在 Hive Console > 通知 > SMS OTP > 發送資訊設定 中確認每日發送上限。
{
"id" : 42903,
"error" : "SMS_LIMIT_EXCEEDED",
"reason" : "Too many requests in 24 hours. (Can not exceed 10 times)"
}
"lang" : "ko",
"retry" : true,
"lookup" : true
}' * **回應範例** OTP SMS 發送請求若已正常處理,會收到如下回應本文。java { "otp" : "123456", "provider" : "YOUR_SMS_PROVIDER", "expiry" : "2026-03-23T11:00:48.533695818+09:00", "expiryTimestamp" : 1774231248 } ```
回調範例¶
若設定為由應用程式開發商自行發送,已註冊的回呼 URL 會收到如下請求本文。
curl --location 'https://{your_callback_url}'
--header 'Content-Type: application/json'
--data '{
"to":"01012345678",
"toCountryNo":"82",
"lang":"en",
"retry":null,
"lookup":false,
"serviceName":"LocalTest",
"otp":"809881",
"provider":"DIRECTSEND",
"expiry":"2024-06-26T11:36:29.680680500+09:00[Asia/Seoul]",
"expiryTimestamp":1719369389680
}'
回調數據資訊¶
| 名稱 | 類型 | 必填 | 描述 |
|---|---|---|---|
| expiry | 字串 | 是 | OTP 有效期(例如:2024-06-25T11:39:43.076573600+09:00[Asia/Seoul]) |
| expiryTimestamp | Long | O | OTP 到期時間戳記(毫秒) (範例: 1719283183076) |
| lang | 字串 | 否 | 語言代碼,默認為 en |
| lookup | 布林值 | 否 | 驗證 to 值是否為有效的電話號碼格式,默認為 false |
| otp | 字串 | 是 | OTP 數字 |
| provider | 字串 | 是 | 短信提供者,固定值 DIRECTSEND 用於直接發送 |
| retry | 布林值 | 否 | 重試選項 |
| serviceName | 字串 | 是 | 在發送信息設置菜單中設置的服務名稱(英文) |
| to | 字串 | 是 | 收件人電話號碼 |
| toCountryNo | 字串 | 是 | 收件人國家代碼 |
錯誤回應碼¶
| HTTP Status | id | error | 說明 |
|---|---|---|---|
| 400 | 40004 | VALIDATION_FAIL | 請求本文有效性驗證失敗時發生。 |
| 400 | 40003 | INVALID_PHONE_NUMBER | 電話號碼有效性驗證失敗時發生。 |
| 422 | 42202 | NO_TOPIC | 若標頭中的 Topic 傳入值無效,則會發生。 |
| 409 | 40902 | DUPLICATE_OTP_EXISTS | 若偵測到在一定時間內對同一驗證對象重複請求發放 OTP,則會回傳 DUPLICATE_OTP_EXISTS 錯誤。請在最多 15 秒後重試。 |
| 429 | 42903 | SMS_LIMIT_EXCEEDED | 若同一號碼在 24 小時內請求次數超過設定的發送上限,則會發生。回應訊息中可能包含設定的上限值。 |
Topic 值無效時¶
若請求標頭的 Topic 值與在 Hive Console 中註冊的發送 ID 不一致,就會發生此錯誤。請確認 Topic 標頭值,以及在 Hive Console > 通知 > SMS OTP > 發送資訊設定 中註冊的 發送 ID。
產生重複 OTP 時¶
若在同一區間內傳送兩次相同的請求,會產生相同的 OTP。此時第一個請求會成功,第二個請求則會以 DUPLICATE_OTP_EXISTS 失敗。請在目前區間結束後,於下一個區間重新傳送相同請求。
{
"id" : 40902,
"error" : "DUPLICATE_OTP_EXISTS",
"reason" : "Already sent OTP to this phone number."
}
超過 24 小時發送上限時¶
若同一電話號碼在 24 小時內超過允許的發送次數,便會發生此錯誤。此上限不是固定值。下方範例回應訊息中包含的次數,是顯示所設定上限值的範例。請在 Hive Console > 通知 > SMS OTP > 發送資訊設定 中確認每日發送上限。
{
"id" : 42903,
"error" : "SMS_LIMIT_EXCEEDED",
"reason" : "Too many requests in 24 hours. (Can not exceed 10 times)"
}
驗證 OTP¶
| 方法 | POST |
|---|---|
| URL | /otp/verify |
- 請求標頭
| 欄位 | 類型 |
|---|---|
| 內容類型 | application/json |
| 授權 | bearer |
| Topic | Hive Console > 通知 > SMS OTP > 發送資訊設定 中註冊或修改的 發送 ID |
- 請求主體
| 欄位 | 類型 | 必需 | 描述 |
|---|---|---|---|
| toCountryNo | String | O | 接收國碼 |
| to | String | O | 接收電話號碼 |
| otp | 字串 | O | 收到的 OTP |
- 回應標頭
| 欄位 | 類型 |
|---|---|
| 內容類型 | application/json |
- 回應主體
| 欄位 | 類型 | 描述 |
|---|---|---|
| result | 布林值 | OTP 驗證結果 |
- 請求範例 1
以下範例示範如何傳入接收電話號碼與 OTP 號碼來驗證 OTP。
// sample 1
curl --location 'https://otp.qpyou.cn/otp/verify'
--header 'Authorization: bearer AUTH_TOKEN_VALUE'
--header 'Topic: testTopicName'
--header 'Content-Type: application/json'
--data '{
"toCountryNo" : "82",
"to" : "01036012891",
"otp" : "123456"
}'
- 回應範例
OTP 一致時,回應本文如下。