ПланФикс API: Формирование цифровой подписи: различия между версиями
Seva (обсуждение | вклад)  (Новая страница: «Цифровая подпись формируется из строки сформированной из склейки имени функции, параметр...»)  | 
				Seva (обсуждение | вклад)  Нет описания правки  | 
				||
| Строка 12: | Строка 12: | ||
    foreach ($list as $node) {  |     foreach ($list as $node) {  | ||
       if(is_array($node)) {		     |        if(is_array($node)) {		     | ||
          $result .= implode('', $node);  |           $result .= implode('', array_map('implodeElements', $node));  | ||
       } else if(is_object($node)) {  |        } else if(is_object($node)) {  | ||
          $result .= implodeElements($node);  |           $result .= implodeElements($node);  | ||
Версия от 12:58, 29 марта 2013
Цифровая подпись формируется из строки сформированной из склейки имени функции, параметров вызова функции и ключа подписи.
Склейка параметров осуществляется по следующему принципу: на одном уровне 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 суммы - это будет являться цифровой подписью.