muscobytes/laravel-cdek-webhook

Create endpoint in your Laravel application for CDEK with zero effort.

1.0.5 2023-05-30 06:51 UTC

This package is auto-updated.

Last update: 2024-11-30 02:13:50 UTC


README

Установка

composer require muscobytes/laravel-cdek-webhook

Настройка

Настройка пакета заключается в определении URL для обработки запросов от CDEK. Это можно сделать двумя способами: установка переменной через файл .env или определение переменной в файле config/cdek.php.

.env

В файл .env необходимо добавить следующую строку:

CDEK_WEBHOOK_URL=/api/cdek/webhook

config/cdek.php

Для определения URL посредством файла конфигурации необходимо опубликовать файл конфигурации:

php artisan vendor:publish --provider="Muscobytes\CdekWebhook\CdekWebhookServiceProvider" --tag="config"

В файле config/cdek.php необходимо определить значение для ключа webhook_url:

<?php
return [
    'webhook_url' => env('CDEK_WEBHOOK_URL', '/api/cdek/webhook')
];

Использование

При выполнении запроса на URL, определенный в настройках, будет инициирован вызов одного из событий:

  • DownloadPhotoEvent::class
  • OrderStatusEvent::class
  • PrealertEvent::class
  • PrintFormEvent::class

Для каждого из вышеперечисленных событий вы можете создать собственный обработчик события.

Например, для события DownloadPhotoEvent::class:

php artisan make:listener DownloadPhotoListener

В созданном файле app/Listeners/DownloadPhotoListener.php необходимо определить метод handle:

<?php

namespace App\Listeners;

use App\Jobs\CreateOrderFromPostingJob;
use Muscobytes\OzonSeller\Events\DownloadPhotoEvent;

class DownloadPhotoEventListener
{
    public function handle(
        DownloadPhotoEvent $event
    ): void
    {
        /** @var \Muscobytes\CdekWebhook\Messages\DownloadPhotoMessage $message */
        $message = $event->getMessage();
        // Ваш код
    }
}

В свойстве $message объекта DownloadPhotoEvent находится DTO с данными запроса от СДЭК.

Набор свойств DTO соответствует набору полей, описанных в документации СДЭК.

Для того чтобы зарегистрировать обработчик события, необходимо добавить в массив $listen класс события и присвоить ему класс обработчика события в файле app/Providers/EventServiceProvider.php:

class EventServiceProvider extends ServiceProvider
{
    protected $listen = [
        Registered::class => [
            SendEmailVerificationNotification::class,
        ],
        OrderStatusEvent::class => [
            OrderStatusEventListener::class
        ]
    ];