HEX
Server: nginx/1.18.0
System: Linux test-ipsremont 5.4.0-214-generic #234-Ubuntu SMP Fri Mar 14 23:50:27 UTC 2025 x86_64
User: ips (1000)
PHP: 8.0.30
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Upload Files
File: /var/www/quadcode/app/Console/Commands/BitrixSender.php
<?php

namespace App\Console\Commands;

use App\Helpers\BitrixHelper;
use App\Models\BitrixQueue;
use App\Repository\BitrixQueueRepository;
use Illuminate\Console\Command;
use Symfony\Component\Console\Command\Command as CommandAlias;
use Throwable;

class BitrixSender extends Command
{

    protected $signature = 'bitrix:send';

    protected $description = 'Process bitrix queue';

    private int $errorsCount = 0;


    private function setError(BitrixQueue $bitrixQueueItem, string $error): void
    {
        $this->warn($error);
        $bitrixQueueItem->error($error);
        $this->errorsCount++;
    }

    public function handle(BitrixQueueRepository $bitrixQueueRepository, BitrixHelper $bitrixHelper): int
    {
        if (!$bitrixHelper->check()) {
            $this->error('Need to fill BITRIX24_HOST, BITRIX24_USER_ID or BITRIX24_TOKEN in .env');
        }

        $this->info('Send leads to Bitrix');

        $bitrixQueue = $bitrixQueueRepository->getNeedToSend();
        $this->line('Found items: ' . $bitrixQueue->count());
        foreach ($bitrixQueue as $bitrixQueueItem) {
            /** @var BitrixQueue $bitrixQueueItem */
            try {
                $bitrixQueueItem->inProgress();

                $data = json_decode($bitrixQueueItem->data, true);

                $data['email'] = strtolower($data['email']);
                $data['phone'] = empty($data['phone']) ? null : $data['phone'];
                if (empty($data['landing_url'])) {
                    $url = explode('://', config('app.url'));
                    $landingUrl = $url[1] ?? $url[0] . $data['referrer'];
                    $data['landing_url'] = $landingUrl;
                }

                $response = $bitrixHelper->addLead($data);

                if (!empty($response['error_description'])) {
                    $error = 'Lead error: ' . $response['error_description'];
                    $this->setError($bitrixQueueItem, $error);
                    continue;
                }

                if (empty($response['result'])) {
                    $error = 'Lead error: Empty response result';
                    $this->setError($bitrixQueueItem, $error);
                    continue;
                }

                $bitrixQueueItem->lead_id = $response['result'];
                $bitrixQueueItem->done();
            } catch (Throwable $exception) {
                $this->setError($bitrixQueueItem, $exception->getMessage());
            }
        }

        if (!empty($this->errorsCount)) {
            $this->warn('Errors count: ' . $this->errorsCount);
        }

        $this->info(PHP_EOL . 'Done');

        return CommandAlias::SUCCESS;
    }

}