ปลายทางที่ลงทะเบียนแล้วจะเริ่มได้รับคำขอจากเราทันทีที่มีออเดอร์ปิด — หน้าตาของคำขอนั้น วิธีตรวจลายเซ็น และสิ่งที่ปลายทางของคุณต้องตอบกลับ อยู่ที่ Callback ที่เราส่งไปหาคุณ
ตั้งค่า Webhook
/api/v1/webhookorders:writeตั้ง เปลี่ยน หรือปิด URL ที่จะให้เราแจ้งเมื่อออเดอร์เดินมาถึงสถานะสุดท้าย · หน้านี้ว่าด้วยการลงทะเบียนปลายทางอย่างเดียว ส่วนหน้าตาของคำขอที่เรายิงไปหาคุณ วิธีตรวจลายเซ็น และนโยบายการยิงซ้ำ อยู่ที่หน้า Callback ที่เราส่งไปหาคุณ (/developers/webhooks/callback) · ปลายทางผูกกับ คีย์ API หนึ่งใบ ไม่ใช่กับบัญชี ถ้าคุณใช้หลายคีย์ต้องตั้งแยกทีละใบ
กุญแจถูกแสดงครั้งเดียว และหมุนใหม่ทุกครั้งที่ตั้งสำเร็จ
secret ถูกแสดงครั้งเดียวตรงคำตอบของการตั้งค่าเท่านั้น ไม่มีเอนด์พอยต์ไหนอ่านมันกลับได้เลย เก็บลงที่เก็บความลับของคุณทันทีที่ได้รับ ทำหายแล้วทางเดียวคือตั้งใหม่แล้วรับกุญแจใบใหม่ · ทุกครั้งที่ตั้งสำเร็จ กุญแจจะถูกหมุนใหม่เสมอ แม้จะส่ง URL เดิมเป๊ะ ๆ ก็ตาม กุญแจใบเก่าใช้ไม่ได้ทันทีตั้งแต่วินาทีนั้น — อย่ายิงคำขอนี้ซ้ำ ๆ เพียงเพื่อยืนยันว่าค่าที่ตั้งไว้ยังอยู่ เพราะมันจะทำให้ตัวตรวจฝั่งคุณที่ยังถือกุญแจใบเก่าปฏิเสธทุก payload · การปิด webhook ล้างกุญแจทิ้งไปด้วยในจังหวะเดียวกัน เปิดใหม่ทีหลัง = ได้กุญแจใบใหม่เสมอ
ตั้งปลายทางให้เสร็จก่อนเริ่มสั่งซื้อ
ตั้ง webhook หลังจากสั่งซื้อไปแล้ว จะไม่ได้รับแจ้งของออเดอร์ที่ค้างอยู่ตอนนั้น — event ที่เข้าคิวไว้ตอนที่ยังไม่มีปลายทางจะถูกทิ้งภายในรอบถัดไป และไม่ถูกส่งย้อนหลังให้เมื่อคุณตั้งปลายทางทีหลัง ไม่มีทางขอให้ส่งใหม่ได้เลย · การปิด webhook ระหว่างที่ยังมีออเดอร์ค้างอยู่ก็ให้ผลเดียวกัน · ตั้งปลายทางให้เรียบร้อยก่อนเริ่มสั่งซื้อเสมอ และถ้าเพิ่งมาตั้งทีหลัง ให้ไล่อ่านออเดอร์ที่ยังไม่ปิดของคุณเองหนึ่งรอบ
การปฏิเสธที่ด่านยืนยันตัวตนเกิดกับเอนด์พอยต์นี้ด้วย
ห้ารหัสของด่านยืนยันตัวตน — invalid_key (401) · key_revoked (401) · insufficient_scope (403) · quota_exceeded (429) · too_many_inflight (429) — เกิดได้กับทุกเอนด์พอยต์ รวมทั้งเอนด์พอยต์นี้ เพราะถูกโยนตั้งแต่ก่อนคำขอจะเดินไปถึงตรรกะของหน้านี้เลยสักบรรทัด (scope ที่ต้องมีคือค่าที่ประกาศไว้หัวหน้านี้) · แท็บคำตอบด้านบนจึงไล่เฉพาะสิ่งที่เอนด์พอยต์นี้เองตอบ ไม่ได้แปลว่าห้ารหัสนั้นเกิดที่นี่ไม่ได้ · รายละเอียดครบทุกตัวอยู่ที่ หน้าเอนด์พอยต์ตัวตน ที่เดียว ทั้ง HTTP status ของแต่ละตัว · ตัวไหนกินโควตารายวันบ้าง · header อะไรกลับมาบ้าง · และทำไม 429 สองตัวต้องรับมือคนละแบบ — จงใจไม่คัดลอกมาไว้ทุกหน้า เพราะสำเนาที่สองคือที่ที่ลืมแก้ตามในวันที่กติกาเปลี่ยน
ข้อมูลที่ต้องส่ง
Request body
| ชื่อ | ชนิด | วิธีใช้ |
|---|---|---|
| urlบังคับ | สตริง หรือ null | URL ปลายทางที่จะให้เรายิงไปหา หรือส่ง null เพื่อปิด webhookรายละเอียดและข้อควรระวัง
|
Header
| ชื่อ | ชนิด | วิธีใช้ |
|---|---|---|
| Authorizationบังคับ | string | คีย์ของคุณในรูป Bearer <คีย์> — ต้องส่งมาทุกคำขอ · ปลายทางที่ตั้งจะผูกกับคีย์ใบนี้เท่านั้น ไม่มีผลกับคีย์ใบอื่นของคุณ |
| Content-Typeบังคับ | string | ต้องเป็น application/json เพราะคำขอนี้มี bodyรายละเอียดและข้อควรระวัง
|
ข้อมูลที่ได้รับ
| ชื่อ | ชนิด | วิธีใช้ |
|---|---|---|
| url | สตริง หรือ null | URL ที่เราบันทึกไว้จริงและจะยิงไปหา รายละเอียดและข้อควรระวัง
|
| secret | สตริง | กุญแจลับสำหรับตรวจลายเซ็นของคำขอที่เราจะยิงไปหาคุณ (วิธีใช้อยู่ที่หน้า Callback) รายละเอียดและข้อควรระวัง
|
| rotated_at | สตริง ISO 8601 (UTC) | เวลาที่กุญแจใบนี้ถูกออกให้ · มีเฉพาะในคำตอบของการตั้งหรือเปลี่ยนปลายทางเหมือนกัน |
| data.reason | สตริง | ฟิลด์เดียวที่บอกได้ว่าปลายทางตกด่านไหน รายละเอียดและข้อควรระวัง
|
สถานะที่อาจได้รับ
| สถานะ | รหัส | ความหมาย |
|---|---|---|
| 200 | — | ตั้งหรือเปลี่ยนปลายทางสำเร็จ — เก็บ secret ไว้ทันทีสามคีย์ในตัวอย่างคือคำตอบทั้งหมด ไม่มีอย่างอื่นอีก รายละเอียดและข้อควรระวัง
|
| 200 | — | ปิด webhook แล้ว — จะไม่มีการแจ้งเตือนอีก ปิดด้วยการส่ง url เป็น null ตรง ๆรายละเอียดและข้อควรระวัง
|
| 400 | bad_request | body ไม่ใช่อ็อบเจกต์ JSON เช่นส่งอาร์เรย์ สตริงเปล่า ๆ ตัวเลข หรือไม่ส่ง body มาเลย รายละเอียดและข้อควรระวัง
|
| 400 | bad_request | ไม่มีคีย์ url อยู่ใน bodyเช่นส่ง {}รายละเอียดและข้อควรระวัง
|
| 400 | bad_request | url ยาวเกิน 2048 ตัวอักษรเราตรวจความยาวก่อนกฎเรื่องปลายทางทั้งหมด เพราะมันเป็นเรื่องรูปร่างของคำขอ ไม่ใช่เรื่องความปลอดภัยของปลายทาง — รหัสจึงเป็น bad_request ไม่ใช่ webhook_url_rejected |
| 400 | webhook_url_rejected | malformed — อ่านเป็น URL ไม่ได้เลยเช่น {"url": "not a url"}รายละเอียดและข้อควรระวัง
|
| 400 | webhook_url_rejected | not_https — โปรโตคอลผิดเช่นส่ง http://hooks.example.com/naxset มา · ปลายทางที่ไม่ได้ขึ้นต้นด้วย https:// ถูกปฏิเสธเสมอ ไม่มีข้อยกเว้นให้เครือข่ายภายในหรือช่วงทดสอบ |
| 400 | webhook_url_rejected | bad_port — พอร์ตอื่นที่ไม่ใช่ 443เช่นส่ง https://hooks.example.com:8443/naxset มา · เขียน :443 ชัด ๆ ได้ นอกนั้นไม่ได้ |
| 400 | webhook_url_rejected | ip_literal — ชื่อโฮสต์เป็นหมายเลข ไม่ใช่ชื่อเช่นส่ง https://203.0.113.10/hook มารายละเอียดและข้อควรระวัง
|
| 400 | webhook_url_rejected | own_domain — ชี้กลับมาที่โดเมนของร้าน หรือโดเมนที่ระบบของร้านอาศัยอยู่ด่านนี้กัน สามโดเมน ไม่ใช่แค่โดเมนของร้าน: naxset.comรายละเอียดและข้อควรระวัง
|
| 400 | webhook_url_rejected | private_host — ชื่อนั้นชี้ไปที่อยู่ภายในชื่อโฮสต์มีอยู่จริง แต่ที่อยู่ที่มันชี้ไปอย่างน้อยหนึ่งตัวอยู่ในช่วงเครือข่ายภายใน loopback link-local หรือช่วงที่สงวนไว้ รายละเอียดและข้อควรระวัง
|
| 400 | webhook_url_rejected | unresolvable — หาคำตอบที่ใช้ได้ไม่ได้ชื่อนั้นหาที่อยู่ไม่เจอ รายละเอียดและข้อควรระวัง
|