Налаштування роботи з маркуванням Честний Знак на 1С-Bitrix
Обов'язкове маркування товарів у системі «Честний Знак» торкається інтернет-магазинів на Bitrix'і, що торгують ліками, тютюном, взуттям, одягом, молочною продукцією й рядом інших категорій. Технічна сторона завдання: отримувати коди маркування від постачальників, зберігати їх у системі й передавати у ГІС МТ (ІС «Честний Знак») при продажі.
Інтеграція через модуль 1С + Bitrix
Стандартний шлях для більшості інтернет-магазинів: облік маркованих товарів ведеться в 1С, Bitrix виступає вітриною. Синхронізація через штатний модуль обміну bitrix:catalog.import.1c (CommerceML).
При такому підході коди маркування (Data Matrix) зберігаються в 1С, передаються в Bitrix разом із залишками через XML-виклад. У XML CommerceML поля для кодів маркування не стандартизовані — їх передають як додаткові реквізити товару:
<ЗначениеРеквизита>
<Наименование>КодМаркировки</Наименование>
<Значение>010460406000600021N4N57RSCBUZTJZ</Значение>
</ЗначениеРеквизита>
У Bitrix'і налаштовуєте властивість каталогу MARKING_CODE й маппінг реквізиту в параметрах обміну.
Пряма інтеграція з API Честного Знака
Для інтернет-магазинів, що працюють прямо з ГІС МТ без 1С, потрібна пряма інтеграція через API markirovka.nalog.ru. API використовує OAuth2 авторизацію з УКЕП (кваліфікована електронна підпис).
Основні методи API, які торкаються e-commerce:
-
POST /api/v3/facade/identifyDocument— перевірка коду маркування -
POST /api/v3/facade/send— сповіщення про виведення товару з обороту при продажі
У Bitrix'і реалізовуєте сервісний клас для роботи з API:
namespace Local\MarkingCode;
class ChestnyZnakClient {
private string $apiUrl = 'https://markirovka.nalog.ru/api/v3';
private \Bitrix\Main\Web\HttpClient $http;
public function verifyCode(string $code): array {
$this->http->setHeader('Authorization', 'Bearer ' . $this->getToken());
$response = $this->http->post($this->apiUrl . '/facade/identifyDocument', ['code' => $code]);
return json_decode($response, true);
}
}
Токен отримуєте через УКЕП — це вимагає криптографічної бібліотеки (КриптоПро CSP) на сервері.
Зберігання кодів маркування у Bitrix'і
Кожен екземпляр товару має унікальний код маркування. Зберігання у властивості елемента каталогу (b_iblock_element_prop_m*) не підходить — у одного товару сотні екземплярів із різними кодами.
Створюєте окремо таблицю через ORM D7:
class MarkingCodeTable extends \Bitrix\Main\Entity\DataManager {
public static function getTableName() { return 'b_local_marking_code'; }
public static function getMap() {
return [
new \Bitrix\Main\Entity\IntegerField('ID', ['primary' => true, 'autocomplete' => true]),
new \Bitrix\Main\Entity\IntegerField('PRODUCT_ID'),
new \Bitrix\Main\Entity\StringField('CODE', ['size' => 200]),
new \Bitrix\Main\Entity\StringField('STATUS'), // 'active', 'sold', 'returned'
new \Bitrix\Main\Entity\DatetimeField('CREATED_AT'),
];
}
}
При продажі товару (подія OnSaleOrderPaid) змінюєте статус коду з active на sold й відправляєте сповіщення у ГІС МТ.
Виведення з обороту при продажі
При успішній оплаті замовлення потрібно сповістити систему маркування про виведення товару з обороту. Це асинхронна операція — не блокуйте процес оформлення замовлення очікуванням відповіді від API.
Реалізуйте через агент або чергу: при OnSaleOrderPaid записуєте задачу в власну таблицю b_local_marking_queue, агент з інтервалом 1 хвилина обробляє чергу й відправляє запити у ГІС МТ.







