跳轉至

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

{
    "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)"
}

驗證 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 一致時,回應本文如下。

{
    "result" : true
}