Skip to main content

Проверка доступности API Moysklad

Для того, чтобы проверить доступность API моего склада Вам нужно скрипт ниже запустить в командной строке Вашего сайта https://ВашСайт.ru/bitrix/admin/php_command_line.php?lang=ru:

$url = "https://api.moysklad.ru/api/remap/1.2/entity/product?limit=1";

echo "🚦 ОБЩАЯ ДИАГНОСТИКА ДОСТУПНОСТИ\n";
echo "🔗 URL: {$url}\n";

// === ОС и PHP ===
echo "\n🖥️ СИСТЕМНАЯ ИНФОРМАЦИЯ:\n";
echo "- ОС: " . PHP_OS . "\n";
echo "- PHP: " . PHP_VERSION . "\n";
echo "- exec() доступен: " . (function_exists('exec') ? "да" : "нет") . "\n";
echo "- shell_exec() доступен: " . (function_exists('shell_exec') ? "да" : "нет") . "\n";

// === Парсинг URL ===
$parsedUrl = parse_url($url);
if (!is_array($parsedUrl) || empty($parsedUrl['host'])) {
    echo "❌ Ошибка: невозможно распарсить хост из URL.\n";
    return;
}
$host = $parsedUrl['host'];

// === DNS ===
echo "\n🌐 DNS-ПРОВЕРКА:\n";
$dnsStart = microtime(true);
$ip = gethostbyname($host);
$dnsTime = round((microtime(true) - $dnsStart) * 1000, 2);

if ($ip === $host) {
    echo "❌ DNS: не удалось разрешить {$host} в IP.\n";
} else {
    echo "✅ DNS: {$host} → {$ip} ({$dnsTime} мс)\n";
}

// === TCP-соединение ===
echo "\n🔌 TCP-ПОРТ 443:\n";
if (function_exists('fsockopen')) {
    $errno = 0;
    $errstr = '';
    $start = microtime(true);
    $conn = @fsockopen($host, 443, $errno, $errstr, 5);
    $elapsed = round((microtime(true) - $start) * 1000, 2);
    if ($conn) {
        echo "✅ Порт 443 открыт ({$elapsed} мс)\n";
        fclose($conn);
    } else {
        echo "❌ Порт 443 закрыт или фильтруется: {$errstr} ({$errno})\n";
    }
} else {
    echo "⚠️ Расширение fsockopen недоступно.\n";
}

// === CURL ===
echo "\n📡 CURL-ПРОВЕРКА:\n";
if (function_exists('curl_init')) {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_NOBODY, true);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_TIMEOUT, 10);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);

    curl_exec($ch);
    $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    $curlErr = curl_error($ch);
    $curlErrNo = curl_errno($ch);
    $connectTime = round(curl_getinfo($ch, CURLINFO_CONNECT_TIME) * 1000, 2);
    $totalTime = round(curl_getinfo($ch, CURLINFO_TOTAL_TIME) * 1000, 2);
    curl_close($ch);

    if ($httpCode > 0) {
        echo "✅ Ответ: HTTP {$httpCode}\n";
        echo "⏱ Время соединения: {$connectTime} мс\n";
        echo "⏱ Общее время: {$totalTime} мс\n";
    } elseif (!empty($curlErr)) {
        echo "❌ CURL ошибка ({$curlErrNo}): {$curlErr}\n";
    } else {
        echo "❌ CURL: неизвестная ошибка.\n";
    }
} else {
    echo "⚠️ Расширение curl не установлено.\n";
}

// === PING (условный вывод) ===
if (function_exists('exec')) {
    $pingOutput = [];
    exec("ping -c 4 " . escapeshellarg($host), $pingOutput, $pingStatus);
    if (!empty($pingOutput) && strpos(implode("\n", $pingOutput), 'icmp_seq=') !== false) {
        echo "\n📶 PING:\n";
        echo implode("\n", $pingOutput) . "\n";
    }
}

// === Traceroute (условный вывод) ===
if (function_exists('exec')) {
    $traceroutePath = trim(shell_exec("which traceroute"));
    if (!empty($traceroutePath)) {
        $tracerouteOutput = [];
        exec("traceroute " . escapeshellarg($host), $tracerouteOutput, $trStatus);
        if (!empty($tracerouteOutput)) {
            echo "\n🛰️ TRACEROUTE:\n";
            echo implode("\n", $tracerouteOutput) . "\n";
        }
    }
}

echo "\n🟢 Диагностика завершена.\n";

Далее Вы получите данный вывод: sUMQbLsByH.png

Если в сообщении есть ошибки, то скорее всего у Вас блокировка со стороны хостинга или МоегоСклада