розетки — ZKTeco set RFID карта с переполнением стека SetUser

В настоящее время я работаю над проектом с системой управления посещаемостью с использованием устройств посещаемости, подключенных к локальной сети, и мне принадлежит модель SC700 компании ZKTeco. К сожалению, устройство не реализовано с веб-сервером, поэтому единственный способ взаимодействия — это использование UDP-порта 4370. Это также означает, что я не могу использовать эту замечательную библиотеку. https://github.com/cobisja/tad-php

Проект на заказ, написан на PHP (Codeigniter 3), и я использовал библиотеку dnaextrim из github (https://github.com/dnaextrim/php_zklib) взаимодействовать с устройствами. Пока все хорошо, все отлично работает, кроме функциональности SetUser. Я могу установить нового пользователя с идентификатором, именем, паролем, ролью из моего приложения на устройстве, но я не могу установить RFID карты, которую он собирается использовать.

Функция создает строку длиной 74 символа и отправляет ее на устройство, как показано ниже

function zksetuser($self, $uid, $userid, $name, $password, $role, $card) {
$command = CMD_SET_USER;
//$command_string = str_pad(chr( $uid ), 2, chr(0)).chr($role).str_pad($password, 8, chr(0)).str_pad($name, 28, chr(0)).str_pad(chr(1), 9, chr(0)).str_pad($userid, 8, chr(0)).str_repeat(chr(0),16);
$byte1 = chr((int) ($uid % 256));
$byte2 = chr((int) ($uid >> 8));

$command_string = $byte1 . $byte2 . chr($role) . str_pad($password, 8, chr(0)) . str_pad($name, 24, chr(0)) . str_pad($card, 13, chr(0)) . str_pad($userid, 8, chr(0)) . str_repeat(chr(0), 16);

$chksum = 0;
$session_id = $self->session_id;

$u = unpack('H2h1/H2h2/H2h3/H2h4/H2h5/H2h6/H2h7/H2h8', substr($self->data_recv, 0, 8));
$reply_id = hexdec($u['h8'] . $u['h7']);

$buf = $self->createHeader($command, $chksum, $session_id, $reply_id, $command_string);

socket_sendto($self->zkclient, $buf, strlen($buf), 0, $self->ip, $self->port);

try {
@socket_recvfrom($self->zkclient, $self->data_recv, 1024, 0, $self->ip, $self->port);

$u = unpack('H2h1/H2h2/H2h3/H2h4/H2h5/H2h6', substr($self->data_recv, 0, 8));

$self->session_id = hexdec($u['h6'] . $u['h5']);
return substr($self->data_recv, 8);
} catch (ErrorException $e) {
return FALSE;
} catch (exception $e) {
return False;
}
}

Параметр $ card реализован мной, поэтому я могу передать номер RFID карты, но проблема в том, что устройство «конвертирует» отправленный мною RFID в другой номер! Я не могу понять, какие манипуляции он выполняет для этого преобразования или что я должен сделать, чтобы сопоставить пользователя с его картой RFID.

Кто-нибудь решал это раньше с ZKTeco SC700 с использованием PHP?

2

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]