Nhận thông báo sự kiện thời gian thực cho tích hợp Zonos của bạn.
Webhooks cung cấp một cách để Zonos chủ động thông báo cho các hệ thống bên ngoài của bạn bất cứ khi nào các sự kiện nhất định xảy ra. Khi sự kiện được đăng ký xảy ra, Zonos sẽ gửi một yêu cầu HTTP POST đến URL webhook bạn chỉ định. Phần thân của yêu cầu sẽ chứa chi tiết sự kiện, cho phép hệ thống của bạn xử lý sự kiện theo chương trình.
Webhooks rất hữu ích cho việc tích hợp Zonos với các nền tảng khác, kích hoạt các quy trình công việc tự động và giữ dữ liệu được đồng bộ hóa trên các hệ thống theo thời gian thực. Ví dụ: bạn có thể sử dụng webhooks để:
Cập nhật hệ thống quản lý đơn hàng của bạn khi tạo đơn hàng trong Zonos
Thông báo cho nhà cung cấp dịch vụ hoàn tất đơn hàng của bạn khi lô hàng bị hủy
Ghi lại các thay đổi trạng thái của các đơn hàng quốc tế cho mục đích kiểm toán
Tất cả các loại webhook có sẵn được bao gồm trong enum WebhookType. Các ví dụ về payload cho mỗi loại có thể được tìm thấy trong hướng dẫn Các Loại Sự Kiện của chúng tôi.
Quan trọng: Lưu lại giá trị secret khi bạn tạo webhook — giá trị này chỉ được trả về ở đây, và bạn sẽ cần nó để xác minh chữ ký webhook. Xem Xác minh chữ ký webhook bên dưới.
Mỗi yêu cầu webhook mà Zonos gửi đều bao gồm một header zonos-signature để bạn có thể xác nhận rằng yêu cầu thực sự đến từ Zonos và payload không bị thay đổi trong quá trình truyền tải.
timestamp — thời điểm yêu cầu được ký, tính bằng mili giây theo Unix epoch.
hmac — chữ ký HMAC-SHA256 của phần thân yêu cầu JSON gốc, được tính bằng secret của webhook làm khóa và mã hóa Base64.
Để xác minh một yêu cầu:
Phân tích các giá trị timestamp và hmac từ header zonos-signature.
Tính chữ ký HMAC-SHA256 của riêng bạn trên phần thân yêu cầu thô, chưa được phân tích, sử dụng secret bạn nhận được khi tạo webhook.
So sánh chữ ký bạn tính được với giá trị hmac bằng cách so sánh thời gian không đổi (constant-time comparison), và từ chối yêu cầu nếu chúng không khớp.
Tùy chọn, từ chối các yêu cầu có timestamp cũ hơn vài phút để phòng chống việc phát lại (replay) của một yêu cầu đã bị chặn. Zonos không tự áp đặt giới hạn thời gian gửi, vì vậy việc kiểm tra này là tùy thuộc vào bạn.
Lưu ý: Nếu bạn đã cấu hình các header tùy chỉnh cho webhook của mình, chúng cũng sẽ được bao gồm nguyên văn trong mọi yêu cầu cùng với zonos-signature.
Webhooks
Lắng nghe các sự kiện bằng webhooks
Nhận thông báo sự kiện thời gian thực cho tích hợp Zonos của bạn.
Webhooks cung cấp một cách để Zonos chủ động thông báo cho các hệ thống bên ngoài của bạn bất cứ khi nào các sự kiện nhất định xảy ra. Khi sự kiện được đăng ký xảy ra, Zonos sẽ gửi một yêu cầu HTTP POST đến URL webhook bạn chỉ định. Phần thân của yêu cầu sẽ chứa chi tiết sự kiện, cho phép hệ thống của bạn xử lý sự kiện theo chương trình.
Webhooks rất hữu ích cho việc tích hợp Zonos với các nền tảng khác, kích hoạt các quy trình công việc tự động và giữ dữ liệu được đồng bộ hóa trên các hệ thống theo thời gian thực. Ví dụ: bạn có thể sử dụng webhooks để:
Các loại webhook
Tất cả các loại webhook có sẵn được bao gồm trong enum
WebhookType. Các ví dụ về payload cho mỗi loại có thể được tìm thấy trong hướng dẫn Các Loại Sự Kiện của chúng tôi.Tạo webhooks
Để tạo webhook qua API:
mutation WebhookCreate($input: WebhookCreateInput!) {webhookCreate(input: $input) {idurltypestatussecretheaders {key}}}Chỉnh sửa chi tiết webhook
Để chỉnh sửa webhook hiện có qua API:
mutation WebhookUpdate($input: WebhookUpdateInput!) {webhookUpdate(input: $input) {idurltypestatus}}Xác minh chữ ký webhook
Mỗi yêu cầu webhook mà Zonos gửi đều bao gồm một header
zonos-signatuređể bạn có thể xác nhận rằng yêu cầu thực sự đến từ Zonos và payload không bị thay đổi trong quá trình truyền tải.Giá trị header có định dạng:
timestamp— thời điểm yêu cầu được ký, tính bằng mili giây theo Unix epoch.hmac— chữ ký HMAC-SHA256 của phần thân yêu cầu JSON gốc, được tính bằng secret của webhook làm khóa và mã hóa Base64.Để xác minh một yêu cầu:
timestampvàhmactừ headerzonos-signature.hmacbằng cách so sánh thời gian không đổi (constant-time comparison), và từ chối yêu cầu nếu chúng không khớp.timestampcũ hơn vài phút để phòng chống việc phát lại (replay) của một yêu cầu đã bị chặn. Zonos không tự áp đặt giới hạn thời gian gửi, vì vậy việc kiểm tra này là tùy thuộc vào bạn.const crypto = require('crypto');function verifyZonosWebhook(rawBody, signatureHeader, secret) {const [timestampPart, hmacPart] = signatureHeader.split(',');const receivedHmac = hmacPart.split('=')[1];const expectedHmac = crypto.createHmac('sha256', secret).update(rawBody).digest('base64');const receivedBuffer = Buffer.from(receivedHmac);const expectedBuffer = Buffer.from(expectedHmac);if (receivedBuffer.length !== expectedBuffer.length) {return false;}return crypto.timingSafeEqual(receivedBuffer, expectedBuffer);}Xem nhật ký webhook
Để xem nhật ký webhook qua API:
query WebhookLogs($first: Int$after: String$filter: WebhookLogsFilterInput) {webhookLogs(first: $first, after: $after, filter: $filter) {edges {node {idtypeurlcreatedAtresponseStatus}}}}WebhookCreateInput WebhookLogsFilterInput WebhookUpdateInput
webhookCreate webhookUpdate
Trang này có hữu ích không?