Інтеграція 1С-Бітрікс з ЄМІАС: запис через API, mTLS та агенти

Зв'язка 1С-Бітрікс та ЄМІАС: від бюрократії до робочого API ЄМІАС — державна платформа охорони здоров'я Москви для поліклінік та лікарень. Інтеграція з нею дозволяє сайту медичного закладу показувати реальний розклад лікарів та приймати онлайн-записи безпосередньо в систему, минаючи реєстратуру.
Послуги, які ми пропонуємо
Показано 1 з 1Усі 1626 послуг
Інтеграція 1С-Бітрікс з ЄМІАС: запис через API, mTLS та агенти
Середній
~1-2 тижні

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

Часті запитання

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1458
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Розробка веб-сайту для компанії ФІКСПЕР
    1019
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Розробка на базі Бітрікс, Бітрікс24, 1С для компанії Development of an Online
    761
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    880
  • image_crm_dolbimby_434_0.webp
    Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    804
  • image_crm_technotorgcomplex_453_0.webp
    Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    1163

Зв'язка 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 тижнів після отримання доступу. Отримайте консультацію — оцінимо ваш проєкт індивідуально.

ЄМІАС — державна система охорони здоров'я Москви.