コンテンツにスキップ

One-Time Password(OTP) API

One-Time Password(OTP)認証システムは、ゲームにOTP認証を適用できるように、OTP送信OTP検証で構成されたAPIを提供します。

URL

サーバー 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
URL /otp/send
  • リクエストヘッダー
フィールド タイプ
コンテンツタイプ application/json
認証 bearer
トピック Hive Console > Notification > SMS OTP > 送信情報設定で登録または修正した送信ID
  • OTP SMSを直接送信する際にコールバックが必要です

    OTPでOTP SMSを直接送信するのではなく、アプリ開発会社が直接送信する場合は、送信に必要な情報をコールバックで受け取れます。Hive Console > Notification > SMS OTP > 送信情報設定直接送信を選択すると、登録したコールバックURLに以下のデータがRequest BodyにJSON形式で渡されます。設定方法は直接送信を参照してください。コールバックリクエストの例送信されるデータもあわせて確認してください。

  • リクエストボディ

フィールド タイプ 必須 説明
to 文字列 O 受信者の電話番号
toCountryNo 文字列 O 受信者の国コード
retry ブール X このフィールドは、同じ受信者に対してこのAPIを使用してOTP SMSを送信する試行の存在を示します。このフィールドが空白のままにされている場合、過去5分間に同じ受信者に対してこのAPIが2回以上呼び出された場合はtrueに設定され、そうでない場合はfalseに設定されます。
lookup ブール X このフィールドは、toが電話番号の有効な形式であるかどうかを確認するかどうかを示し、デフォルト値はfalseです。trueの場合、APIの応答時間は検証プロセスのために約250ms〜2000msになりますが、falseの場合は通常200ms以内です。
lang 文字列 X これは言語コードで、デフォルト値はenです。
有効な言語コード:
  • ko
  • en
  • ja
  • zh-cn
  • zh-tw
  • zh-hans
  • zh-hant
  • de
  • fr
  • ru
  • es
  • pt
  • id
  • th
  • vi
  • it
  • tr
  • ar
  • レスポンスヘッダー
フィールド タイプ
コンテンツタイプ application/json
  • レスポンスボディ
フィールド タイプ 説明
otp 文字列 OTP番号
provider 文字列 SMSプロバイダー
expiry 文字列 OTPの有効期限
expiryTimestamp Long OTP有効時間のタイムスタンプ(秒単位)
  • リクエストサンプル

次の例は、Topicヘッダーと受信者情報を含めてOTP SMS送信APIを呼び出すときに使用します。

//sample 1
curl --location 'https://otp.qpyou.cn/otp/send' 
--header 'Authorization: Bearer AUTH_TOKNE_VALUE' 
--header 'Topic: testTopicName' 
--header 'Content-Type: application/json' 
--data '{
    "to" : "01012345678",
    "toCountryNo" : "82",
    "lang" : "ko"
}'
//sample 2
curl --location 'https://otp.qpyou.cn/otp/send' 
--header 'Authorization: Bearer AUTH_TOKNE_VALUE' 
--header 'Topic: testTopicName' 
--header 'Content-Type: application/json' 
--data '{
    "to" : "01012345678",
    "toCountryNo" : "82",
    "lang" : "ko",
    "retry" : true,
    "lookup" : true
}'
  • レスポンスサンプル

OTP SMS送信リクエストが正常に処理されると、次のようなレスポンス本文を受け取ります。

{
    "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 文字列 はい SMSプロバイダー、直接送信には固定値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 > Notification > SMS OTP > 送信情報設定に登録した送信IDを確認してください。

{
    "id" : 42202,
    "error" : "NO_TOPIC",
    "reason" : "No such 'Topic' Data"
}

同じOTPが重複して生成された場合

同じリクエストを同じ区間内で2回送信すると、同じOTPが生成されます。このとき、1回目のリクエストは成功し、2回目のリクエストはDUPLICATE_OTP_EXISTSで失敗します。現在の区間が終了した後、次の区間で同じリクエストを再送信してください。

{
    "id" : 40902,
    "error" : "DUPLICATE_OTP_EXISTS",
    "reason" : "Already sent OTP to this phone number."
}

24時間送信上限を超過した場合

同じ電話番号に対して24時間の間に許可された送信回数を超えると、このエラーが発生します。この上限は固定値ではありません。以下の例のレスポンスメッセージに含まれる回数は、設定した上限値を示す例です。Hive Console > Notification > SMS OTP > 送信情報設定で1日の送信上限を確認してください。

{
    "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
トピック Hive Console > Notification > 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
}