ПланФикс API: Формирование цифровой подписи
Цифровая подпись формируется из строки сформированной из склейки имени функции, параметров вызова функции и ключа подписи.
Склейка параметров осуществляется по следующему принципу: на одном уровне XML дерева происходит сортировка параметров по имени, затем они начинают склеиваться по очереди. Если параметр представляет собой список, то производится сортировка списка по значению и потом склейка его элементов. Если параметр является корнем поддерева, то к этому параметру применяется способ описанный выше. Так происходит до тех пор, пока не будут перебраны все элементы дерева XML.
Пример кода на php реализующий алгоритм
function implodeElements($xmlElement) {
$result = '';
$list = (array)$xmlElement;
ksort($list);
foreach ($list as $node) {
if(is_array($node)) {
$result .= implode('', array_map('implodeElements', $node));
} else if(is_object($node)) {
$result .= implodeElements($node);
} else {
$result .= $node;
}
}
return $result;
}
Полученная строка склеивается с ключом подписи. К результату склейки применяется алгоритм вычисления MD5 суммы - это будет являться цифровой подписью.
К примеру для XML
<?xml version="1.0" encoding="UTF-8"?> <request method="auth.login"> <account>main</account> <login>test</login> <password>test</password> </request>