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;
}
}