ข้ามไปที่เนื้อหา

One-Time Password(OTP) API

ระบบการยืนยันตัวตนแบบ One-Time Password(OTP) มี API ที่ประกอบด้วย การส่ง OTP และ การตรวจสอบ OTP เพื่อให้สามารถนำการยืนยันตัวตนด้วย OTP ไปใช้กับเกมได้

URL

เซิร์ฟเวอร์ URL
ผลิต https://otp.qpyou.cn
แซนด์บ็อกซ์ https://sandbox-otp.qpyou.cn

วิธีการตรวจสอบสิทธิ์

หากต้องการใช้ API ที่ระบบส่ง OTP มีให้ คุณต้องได้รับโทเค็นยืนยันตัวตน(API KEY) ก่อน โทเค็นยืนยันตัวตนจะถูกสร้างขึ้นโดยอัตโนมัติเมื่อมีการลงทะเบียนเกมใน App Center โทเค็นยืนยันตัวตนเป็นไปตามข้อกำหนด JSON Web Token(JWT) และสามารถใช้งานได้อย่างต่อเนื่องเนื่องจากไม่มีเวลาหมดอายุ


ส่ง OTP

การส่ง OTP ทาง Short Message Service(SMS)

  • ข้อมูลพื้นฐาน
วิธีการ POST
URL /otp/send
  • ส่วนหัวของคำขอ
ฟิลด์ ประเภท
Content-Type application/json
Authorization bearer
Topic Hive Console > การแจ้งเตือน > SMS OTP > การตั้งค่าข้อมูลการส่ง รหัสการส่ง ที่ลงทะเบียนหรือแก้ไขไว้
  • ต้องมีการเรียกกลับเมื่อคุณส่ง SMS OTP โดยตรง

    หากไม่ได้ให้ระบบ OTP ส่ง OTP SMS โดยตรง แต่ให้นักพัฒนาแอปส่งเอง คุณสามารถรับข้อมูลที่จำเป็นสำหรับการส่งผ่าน callback ได้ เมื่อเลือก ส่งด้วยตนเอง ใน Hive Console > การแจ้งเตือน > SMS OTP > การตั้งค่าข้อมูลการส่ง ข้อมูลด้านล่างจะถูกส่งไปยัง callback URL ที่ลงทะเบียนไว้ในรูปแบบ JSON ใน Request Body สำหรับวิธีตั้งค่า โปรดดู ส่งด้วยตนเอง และโปรดดู ตัวอย่างคำขอ callback กับ ข้อมูลที่ส่ง ร่วมกัน.

  • เนื้อหาคำขอ

ฟิลด์ ประเภท จำเป็น คำอธิบาย
to สตริง O หมายเลขโทรศัพท์ของผู้รับ
toCountryNo สตริง O รหัสประเทศของผู้รับ
retry บูลีน X ฟิลด์นี้ระบุถึงการมีอยู่ของการทดลองส่ง OTP SMS ไปยังผู้รับเดียวกันผ่าน API นี้ หากฟิลด์นี้ถูกปล่อยว่าง จะถูกตั้งค่าเป็น true หาก API นี้ถูกเรียกมากกว่าหนึ่งครั้งสำหรับผู้รับเดียวกันภายใน 5 นาทีที่ผ่านมา และตั้งค่าเป็น false หากไม่ใช่
lookup บูลีน X ฟิลด์นี้ระบุว่าต้องการตรวจสอบว่า to อยู่ในรูปแบบที่ถูกต้องสำหรับหมายเลขโทรศัพท์หรือไม่ และค่าดีฟอลต์คือ false หากเป็น true เวลาตอบสนองของ API จะประมาณ 250ms ~ 2000ms เนื่องจากกระบวนการตรวจสอบ และโดยปกติจะอยู่ภายใน 200ms หากเป็น false
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
  • ส่วนหัวของการตอบกลับ
ฟิลด์ ประเภท
Content-Type application/json
  • เนื้อหาการตอบกลับ
ฟิลด์ ประเภท คำอธิบาย
otp สตริง หมายเลข OTP
provider สตริง ผู้ให้บริการ SMS
expiry สตริง เวลาหมดอายุของ OTP
expiryTimestamp Long ไทม์สแตมป์เวลาหมดอายุของ OTP (หน่วยวินาที)
  • ตัวอย่างคำขอ

ตัวอย่างต่อไปนี้ใช้เมื่อเรียก API ส่ง OTP SMS โดยระบุเฮดเดอร์ Topic และข้อมูลผู้รับ

//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
}

ตัวอย่างการเรียกกลับ

หากตั้งค่าให้นักพัฒนาแอปส่งเอง callback URL ที่ลงทะเบียนไว้จะได้รับ request body ดังต่อไปนี้

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[เอเชีย/โซล])
expiryTimestamp Long O ไทม์สแตมป์เวลาหมดอายุของ OTP (หน่วยมิลลิวินาที)
(ตัวอย่าง: 1719283183076)
lang สตริง ไม่ รหัสภาษา ค่าเริ่มต้นคือ en
lookup บูลีน ไม่ ตรวจสอบว่าค่าที่จะเป็นหมายเลขโทรศัพท์ที่ถูกต้องหรือไม่ ค่าเริ่มต้นคือ false
otp สตริง ใช่ หมายเลข OTP
provider สตริง ใช่ ผู้ให้บริการ SMS ค่า FIXED คือ DIRECTSEND ใช้สำหรับการส่งโดยตรง
retry บูลีน ไม่ ตัวเลือกการลองใหม่
serviceName สตริง ใช่ ชื่อบริการที่ตั้งค่าในเมนูการตั้งค่าข้อมูลการส่ง (เป็นภาษาอังกฤษ)
to สตริง ใช่ หมายเลขโทรศัพท์ผู้รับ
toCountryNo สตริง ใช่ รหัสประเทศของผู้รับ

รหัสตอบกลับข้อผิดพลาด

HTTP Status id error คำอธิบาย
400 40004 VALIDATION_FAIL เกิดขึ้นเมื่อการตรวจสอบความถูกต้องของ request body ล้มเหลว
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 ของ request header ไม่ตรงกับ รหัสการส่ง ที่ลงทะเบียนไว้ใน Hive Console ข้อผิดพลาดนี้จะเกิดขึ้น โปรดตรวจสอบค่าเฮดเดอร์ Topic และ รหัสการส่ง ที่ลงทะเบียนไว้ใน Hive Console > การแจ้งเตือน > SMS OTP > การตั้งค่าข้อมูลการส่ง.

{
    "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
  • ส่วนหัวของคำขอ
ฟิลด์ ประเภท
Content-Type application/json
Authorization bearer
Topic Hive Console > การแจ้งเตือน > SMS OTP > การตั้งค่าข้อมูลการส่ง รหัสการส่ง ที่ลงทะเบียนหรือแก้ไขไว้
  • เนื้อหาคำขอ
ฟิลด์ ประเภท จำเป็น คำอธิบาย
toCountryNo String O รหัสประเทศของผู้รับ
to String O หมายเลขโทรศัพท์ของผู้รับ
otp สตริง O OTP ที่ได้รับ
  • ส่วนหัวการตอบกลับ
ฟิลด์ ประเภท
Content-Type application/json
  • เนื้อหาการตอบกลับ
ฟิลด์ ประเภท คำอธิบาย
result boolean ผลลัพธ์การตรวจสอบ 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
}