Интеграция 1С-Битрикс с системой ЭДО Такском
Такском — один из аккредитованных операторов ЭДО с собственным API и сервисами для разных объёмов документооборота: от 50 до десятков тысяч документов в месяц. Компании, уже подключённые к Такском для налоговой отчётности (ФСРАР, ФНС), зачастую предпочитают использовать того же оператора для ЭДО — один договор, одна точка обслуживания. Интеграция с 1С-Битрикс позволяет автоматизировать отправку документов по событиям в интернет-магазине.
Особенности API Такском
Такском предоставляет REST API (https://edo.taxcom.ru/api/). Авторизация — через Client Credentials OAuth 2.0:
class TaxcomClient
{
private string $baseUrl = 'https://edo.taxcom.ru/api/v1';
private string $accessToken;
public function __construct(
private string $clientId,
private string $clientSecret
) {
$this->accessToken = $this->getAccessToken();
}
private function getAccessToken(): string
{
$cached = \Bitrix\Main\Data\Cache::createInstance();
if ($cached->startDataCache(3500, 'taxcom_token', '/taxcom/')) {
$response = $this->httpPost('https://auth.taxcom.ru/oauth/token', [
'grant_type' => 'client_credentials',
'client_id' => $this->clientId,
'client_secret' => $this->clientSecret,
'scope' => 'edo',
]);
$cached->endDataCache(['token' => $response['access_token']]);
return $response['access_token'];
}
$data = $cached->getVars();
return $data['token'];
}
}
Токен кешируется на 3500 секунд (чуть меньше часа жизни токена) — обычный паттерн для OAuth Client Credentials.
Создание и отправка документа
public function sendDocument(\Bitrix\Sale\Order $order): array
{
$xmlContent = $this->generateUPDXml($order);
// Шаг 1: загрузка файла
$uploadResponse = $this->apiPost('/documents/upload', [
'FileName' => "UPD_{$order->getId()}.xml",
'Content' => base64_encode($xmlContent),
'ContentType' => 'application/xml',
]);
$fileId = $uploadResponse['FileId'];
// Шаг 2: подписание (КриптоПро или облачная подпись Такском)
$signature = $this->signFile($xmlContent);
// Шаг 3: отправка документа
return $this->apiPost('/messages/send', [
'RecipientBoxId' => $this->getRecipientBoxId($order),
'Documents' => [[
'FileId' => $fileId,
'Signature' => base64_encode($signature),
'DocType' => 'UniversalTransferDocument',
'Function' => 'ДОП',
]],
]);
}
Такском поддерживает облачную подпись через сервис «Такском-Крипто» — сертификат хранится на стороне Такском, подписание происходит через API без КриптоПро на сервере. Это упрощает инфраструктуру.
Поиск BoxId контрагента
public function findRecipientBoxId(string $inn, string $kpp = ''): ?string
{
$response = $this->apiGet('/organizations/search', [
'inn' => $inn,
'kpp' => $kpp,
]);
foreach ($response['Organizations'] as $org) {
if ($org['Inn'] === $inn && ($kpp === '' || $org['Kpp'] === $kpp)) {
return $org['BoxId'];
}
}
return null;
}
При первом документе компании — поиск BoxId по ИНН/КПП, сохранение в пользовательском поле покупателя Битрикс (UF_TAXCOM_BOX_ID).
Кейс: ЭДО для медицинского дистрибьютора
Дистрибьютор медрасходников, ~400 B2B-клиентов, работает с государственными больницами и частными клиниками. Государственные учреждения часто имеют собственных ЭДО-операторов с роумингом, часть работает через Такском напрямую.
Особенность: помимо УПД, для медицинских товаров требуются акты приёмки-передачи с расширенными реквизитами (серия, срок годности, регудостоверение). Стандартный формат УПД не покрывает все поля.
Решение:
Разработан составной документ: УПД + аннотация с расширенными медицинскими реквизитами как дополнительный XML-файл в том же сообщении Такском. Оба файла подписываются одной подписью.
$documents = [
[
'FileId' => $updFileId,
'Signature' => base64_encode($updSignature),
'DocType' => 'UniversalTransferDocument',
],
[
'FileId' => $annexFileId,
'Signature' => base64_encode($annexSignature),
'DocType' => 'Attachment', // дополнение к основному документу
'Comment' => 'Медицинские реквизиты товаров',
],
];
В Битрикс реквизиты товаров (серия, срок годности) хранятся как свойства позиций заказа. При генерации XML извлекаются из \Bitrix\Sale\BasketItem::getPropertyCollection().
| Показатель | До | После |
|---|---|---|
| Среднее время отправки комплекта документов | 45 мин/заказ | Автоматически при отгрузке |
| Полнота пакета документов | Регулярные нарекания от аптек | 100% по чек-листу |
| Статус подписания | Отслеживался по звонкам | Автомониторинг, уведомления |
Мониторинг очереди документов
Для контроля документооборота — административный раздел в Битрикс с таблицей отправленных документов:
Заказ → Документ Такском → Статус → Дата подписания
Данные берутся из таблицы local_taxcom_documents + периодический polling API Такском для обновления статусов (cron каждые 10 минут).
Состав работ
- Настройка аккаунта Такском, получение Client ID/Secret
- Настройка облачной подписи или КриптоПро
- Разработка PHP-клиента Такском API
- Генерация XML-документов (УПД, Акты, составные документы)
- Справочник BoxId контрагентов в Битрикс
- Событийная отправка при смене статуса заказа
- Мониторинг статусов, административный раздел
Сроки: базовая интеграция — 3–5 недель. С составными документами и расширенными типами — 6–9 недель.







