Tạo mechanism webhook cho riêng mình với Laravel notification.

Tram Ho

Mở đầu

Hôm nay mình sẽ hướng dẫn cho các bạn cách tạo một webhook mechanism cho riêng mình. từ lâu chúng ta đã biểt đến và dùng chức năng webhook của github, facebook … .Đại loại là họ sẽ cho mình nhập 1 Payload URL và chọn sự kiện để khi có sự kiện đó thì github cũng send http request đến Payload URL của người dùng.

Tương tự vậy, ở demo nay chúng ta sẽ cho phép người dùng nhập webhook url của họ. và khi có 1 sự kiện nào đó trên hệ thống chúng ta thì hệ thống cũng tiến hành send http request đến url của họ (request gồm body và header).

Webhook là gì?

Cài đặt Dependencies

Đầu tiên chúng ta cần cài đặt package để cho việc gửi HTTP request. Ở đây mình dùng thư viện khá phổ biến là Guzzle:

Migrate dữ liệu

Tiếp theo chúng ta tạo bảng user. ở ví dụ demo này thì mình sẽ lưu name, email, password, api_token và đặc biệt có thêm trường webhook_url đây chính là enpoint của người dùng khi đăng ký Webhook End Point trên hệ thống của chúng ta.

Tạo model

Tiếp theo là tạo model User

Model này khá dễ hiểu rồi. mình có thêm 2 hàm getSigningKeygetWebhookUrl để lấy api_keywebhook_url

Tạo notification channels

Tiếp theo chúng ta cần tạo 1 notification channel. Thì laravel có hỗ trợ chúng ta tạo cũng như custom notification channels ở Tại đây.

Tiến hành tạo WebhookChannel

Function send là nơi chúng ta viết code để thực hiện việc send http request đến endpoint (webhook_url) của người dùng.

Tiếp theo mình tiến hành viết hàm send

Đầu tiên ,

Vậy là xong 1 notification channels. Tiếp theo mình chỉ việc gọi Webhook notification và dùng thôi.

Thực hiện notification webhook

Tiếp theo chúng ta tạo notification bằng lệnh

Tiến hành viết code.

ok. vậy là đã xong . giờ chúng ta có thể tạo các sự kiện và send notification đến endpoint mà người dùng đã đăng ký.

Kết luận

Cảm ơn các bạn đã đọc đến đây.

Tham khảo : https://laravel.com/docs/5.6/notifications#custom-channels,

Source code: https://github.com/phamtuananh1996/laravel-webhook-demo

Chia sẻ bài viết ngay

Nguồn bài viết : Viblo