ПланФикс API: Формирование цифровой подписи: различия между версиями
Alice (обсуждение | вклад) Нет описания правки  | 
				Alice (обсуждение | вклад)  Нет описания правки  | 
				||
| (не показано 5 промежуточных версий 2 участников) | |||
| Строка 1: | Строка 1: | ||
'''Цифровая подпись не обязательна. Т.к. обращение к API происходит с использованием SSL, обеспечивающего шифрование запроса, дополнительное подтверждение целостности запрос излишне, но при желании может использоваться.'''  | |||
Цифровая подпись формируется из строки сформированной из склейки имени функции, параметров вызова функции и ключа подписи.    | Цифровая подпись формируется из строки сформированной из склейки имени функции, параметров вызова функции и ключа подписи.    | ||
| Строка 25: | Строка 27: | ||
К примеру для XML   | |||
<?xml version="1.0" encoding="UTF-8"?> <request method="auth.login"> <account>  | <source lang="xml">  | ||
<?xml version="1.0" encoding="UTF-8"?>  | |||
  <request method="auth.login">  | |||
    <account>acc</account>  | |||
    <password>passw</password>  | |||
    <login>login</login>  | |||
</request>  | |||
</source>  | |||
Строка подписи будет:  | |||
"auth.login"+"acc"+"login"+"passw"+privateKey = auth.loginaccloginpassw..... (вместо точек ключа подписи - PrivateKey со страницы с ключами)  | |||
== Перейти ==  | |||
*[[Коды ошибок]]  | |||
*[[Список функций]]  | |||
Текущая версия от 12:16, 25 июня 2018
Цифровая подпись не обязательна. Т.к. обращение к API происходит с использованием SSL, обеспечивающего шифрование запроса, дополнительное подтверждение целостности запрос излишне, но при желании может использоваться.
Цифровая подпись формируется из строки сформированной из склейки имени функции, параметров вызова функции и ключа подписи.
Склейка параметров осуществляется по следующему принципу: на одном уровне 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>acc</account>
    <password>passw</password>
    <login>login</login>
</request>Строка подписи будет: "auth.login"+"acc"+"login"+"passw"+privateKey = auth.loginaccloginpassw..... (вместо точек ключа подписи - PrivateKey со страницы с ключами)