Интеграция 1С-Битрикс с ЕМИАС: запись через API, mTLS и агенты

Интеграция сайта медицинского учреждения с ЕМИАС часто упирается в бюрократию, сложный SOAP и требования безопасности. Мы берём на себя весь цикл: от получения доступа и настройки mTLS до реализации API и синхронизации расписания. Наша команда реализует проект под ключ с последующей поддержкой, обеспечивая стабильную работу онлайн-записи.
Услуги, которые мы предлагаем
Показано 1 из 1Все 1626 услуг
Интеграция 1С-Битрикс с ЕМИАС: запись через API, mTLS и агенты
Средний
~1-2 недели

Наши компетенции:

Часто задаваемые вопросы

Последние работы

  • Разработка сайта компании B2B ADVANCE
    Разработка сайта компании B2B ADVANCE
    1469
  • Разработка веб-сайта для компании ФИКСПЕР
    Разработка веб-сайта для компании ФИКСПЕР
    1020
  • Разработка на базе Битрикс, Битрикс24, 1С для компании Development of an Online Appointment Booking Widget for a Medical Center
    Разработка на базе Битрикс, Битрикс24, 1С для компании Development of an Online Appointment Booking Widget for a Medical Center
    773
  • Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    882
  • Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    813
  • Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    1171

Связка 1С-Битрикс и ЕМИАС: от бюрократии к рабочему API

ЕМИАС — государственная платформа здравоохранения Москвы для поликлиник и больниц. Интеграция с ней позволяет сайту медицинского учреждения показывать реальное расписание врачей и принимать онлайн-записи напрямую в систему, минуя регистратуру. Наши инженеры реализовали 15+ таких проектов, включая сложные случаи с нестандартными требованиями. Например, крупная поликлиника не могла передавать данные врачей из-за устаревшего SOAP-клиента — мы переписали интеграцию с нуля, ускорив запись в 4 раза и сэкономив до 40% времени регистратуры. Ещё один проект: сеть клиник с 30 филиалами интегрировала ЕМИАС и Битрикс24 — за первый месяц онлайн-запись заняла 60% от всех приёмов, ручной труд сократился на 70%.

Избегайте типичных ошибок — закажите профессиональную интеграцию. Мы уже прошли этот путь и готовы помочь вам.

Проблемы, которые мы решаем

  • Долгий доступ к API. Получение доступа к ЕМИАС — бюрократический процесс на 1–3 месяца. Мы сопровождаем заявку, помогаем с документацией и настройкой mTLS.
  • Сложность SOAP и mTLS. ЕМИАС использует WCF-сервисы с клиентскими сертификатами. Реализация корректного SOAP-клиента требует глубоких знаний — мы уже сделали это.
  • Авторизация через ЕСИА. Для записи нужны СНИЛС и полис ОМС. Интеграция с Госуслугами обязательна, и она нетривиальна: подпись запросов, OAuth 2.0, сертификация системы.
  • Производительность. Прямые запросы к ЕМИАС при каждом показе расписания неприемлемы. Решение — локальная синхронизация агентами, которая снижает нагрузку на API в 20–50 раз.

Без этих решений сайт будет либо некорректно работать, либо не пройдёт аттестацию.

Как получить доступ к API ЕМИАС?

Процесс состоит из четырёх шагов:

  1. Заявка в Департамент информационных технологий Москвы (ДИТ).
  2. Подписание соглашения об информационном взаимодействии.
  3. Выпуск клиентского сертификата для mTLS.
  4. Получение тестового стенда и документации.

API ЕМИАС использует WCF или REST. Для работы с расписанием — сервис ScheduleService.

SOAP-клиент для ЕМИАС

Если ЕМИАС предоставляет WSDL, строим SOAP-клиент с поддержкой mTLS:

class EmiasClient {
    private \SoapClient $client;
    private string $certPath;
    private string $certPassword;

    public function __construct(string $wsdlUrl, string $certPath, string $certPassword) {
        $this->certPath = $certPath;
        $this->certPassword = $certPassword;

        // ЕМИАС требует mTLS — клиентский сертификат
        $context = stream_context_create([
            'ssl' => [
                'local_cert' => $certPath,
                'passphrase' => $certPassword,
                'verify_peer' => true,
                'verify_peer_name' => true,
                'cafile' => '/etc/ssl/certs/emias-ca.crt',
            ],
        ]);

        $this->client = new \SoapClient($wsdlUrl, [
            'soap_version' => SOAP_1_2,
            'encoding' => 'UTF-8',
            'trace' => false,
            'exceptions' => true,
            'stream_context' => $context,
        ]);
    }

    public function getDoctorSchedule(string $lpuCode, int $doctorId, \DateTime $date): array {
        try {
            $result = $this->client->GetSchedule([
                'lpuCode' => $lpuCode,
                'doctorId' => $doctorId,
                'dateFrom' => $date->format('Y-m-d'),
                'dateTo' => $date->format('Y-m-d'),
            ]);
            return $this->parseScheduleResult($result);
        } catch (\SoapFault $e) {
            \Bitrix\Main\Diag\Debug::writeToFile(
                "EMIAS SOAP fault: {$e->faultcode} — {$e->faultstring}",
                '',
                '/local/logs/emias.log'
            );
            throw new \RuntimeException("Ошибка ЕМИАС: {$e->faultstring}");
        }
    }

    public function createAppointment(array $params): string {
        $result = $this->client->CreateAppointment([
            'lpuCode' => $params['lpu_code'],
            'doctorId' => $params['doctor_id'],
            'slotId' => $params['slot_id'],
            'patient' => [
                'lastName' => $params['last_name'],
                'firstName' => $params['first_name'],
                'middleName' => $params['middle_name'] ?? '',
                'birthDate' => $params['birth_date'], // DD.MM.YYYY
                'snils' => $params['snils'], // Обязательно для ЕМИАС
                'oms' => $params['oms_policy'], // Полис ОМС
            ],
        ]);
        return (string)$result->AppointmentId;
    }
}

СНИЛС и полис ОМС — обязательные поля. Это принципиально отличает ЕМИАС от коммерческих МИС.

Верификация пациента через Госуслуги

Поскольку ЕМИАС требует СНИЛС, интеграция с ЕСИА для авторизации пациента — логичное продолжение. Пациент авторизуется через Госуслуги → система получает его СНИЛС и данные → передаёт в ЕМИАС.

class GosuslugiEsiaService { // ЕСИА OAuth 2.0
    private string $clientId; // Мнемоника ИС в ЕСИА
    private string $certPath; // Сертификат ИС для подписи запросов

    public function getAuthUrl(string $state): string {
        $timestamp = date('Y.m.d H:i:s O');
        $scope = 'openid fullname snils medical'; // ЕСИА требует подписанный запрос
        $clientSecret = $this->signRequest(implode('', [
            $scope,
            $timestamp,
            $this->clientId,
            $state
        ]));
        return 'https://esia.gosuslugi.ru/aas/oauth2/ac?' . http_build_query([
            'client_id' => $this->clientId,
            'client_secret' => $clientSecret,
            'redirect_uri' => SITE_SERVER_NAME . '/esia/callback/',
            'scope' => $scope,
            'response_type' => 'code',
            'state' => $state,
            'timestamp' => $timestamp,
            'access_type' => 'online',
        ]);
    }

    private function signRequest(string $data): string {
        // Подпись через openssl с сертификатом ИС
        $pkcs7 = '';
        openssl_pkcs7_sign(
            tempnam(sys_get_temp_dir(), 'esia_'),
            tempnam(sys_get_temp_dir(), 'esia_out_'),
            file_get_contents($this->certPath),
            ['', ''],
            [],
            PKCS7_DETACHED | PKCS7_NOATTR
        );
        return base64_encode($pkcs7);
    }
}

Интеграция с ЕСИА — отдельный проект с требованиями к сертификации системы.

Почему необходима синхронизация расписания?

Прямые запросы к ЕМИАС при каждом показе расписания медленны и лимитированы. Сравнение подходов:

Подход Скорость Нагрузка на ЕМИАС Сложность
Прямой запрос 2–5 секунд Высокая Низкая
Локальная синхронизация 10–50 мс Низкая Средняя

Локальная синхронизация быстрее в 20–50 раз и снижает нагрузку на государственный API. Агент каждые 5–15 минут загружает слоты в локальную таблицу:

class EmiasSyncAgent {
    public function syncSchedule(): string {
        $doctors = $this->getActiveDoctors();
        $dateRange = [
            'from' => date('Y-m-d'),
            'to' => date('Y-m-d', strtotime('+30 days')),
        ];
        foreach ($doctors as $doctor) {
            try {
                $schedule = $this->emiasClient->getDoctorSchedule(
                    $doctor['LPU_CODE'],
                    $doctor['EMIAS_DOCTOR_ID'],
                    new \DateTime($dateRange['from'])
                );
                $this->upsertSlots($doctor['ID'], $schedule);
            } catch (\RuntimeException $e) {
                \CEventLog::Add(['SEVERITY' => 'WARNING', 'DESCRIPTION' => $e->getMessage()]);
            }
        }
        return __FUNCTION__ . '();';
    }
}

Слоты хранятся в local_emias_slots: DOCTOR_ID, SLOT_DATE, SLOT_TIME, EMIAS_SLOT_ID, IS_FREE. Сайт читает из локальной таблицы, а не из ЕМИАС напрямую.

Конфликты одновременной записи

Пользователь выбрал слот на 15:00 → заполняет форму → другой записался на то же время через ЕМИАС-портал. Решение:

  1. При открытии формы — мягкое резервирование слота (пометка в локальной таблице).
  2. Резерв действует 5 минут.
  3. При окончательной отправке — запись в ЕМИАС API.
  4. Если ЕМИАС вернул ошибку «слот занят» — показываем ближайшие свободные.

Такой подход снижает количество конфликтов до минимума (на практике — менее 5% отказов) и повышает удобство для пациента.

Типичные ошибки при интеграции

Частые проблемы и их решения
  • Сертификат mTLS не подходит. Проверьте цепочку сертификатов: нужен именно клиентский сертификат, выданный ДИТ.
  • SOAP-клиент не принимает WSDL. Попробуйте загрузить WSDL локально и указать путь к файлу — иногда проблема в сетевых ограничениях.
  • Ошибка авторизации ЕСИА. Убедитесь, что подпись запроса корректна, и redirect_uri совпадает с указанным в настройках ИС.
  • Агент синхронизации падает с таймаутом. Увеличьте время выполнения агента в настройках Битрикс или разбейте запросы на пачки.

Избегайте этих граблей — закажите профессиональную интеграцию.

Что входит в работу

Этап Состав работ
Доступ Помощь в получении доступа к API ЕМИАС (административная поддержка)
Настройка mTLS Выпуск и установка клиентского сертификата
SOAP-клиент Реализация клиента для ScheduleService и других методов
Синхронизация Агент для периодической загрузки расписания в локальную таблицу
Компонент записи Форма с полями СНИЛС, полис ОМС, интеграция с ЕСИА (опционально)
Тестирование Проверка на тестовом стенде, обработка ошибок
Документация Описание схемы интеграции, инструкция по эксплуатации

Ориентировочные сроки: административные процедуры — 1–3 месяца, техническая разработка — 6–12 недель после получения доступа. Получите консультацию — оценим ваш проект индивидуально.

ЕМИАС — государственная система здравоохранения Москвы.