Формирование подписи
Каждое сообщение в системе подписывается с целью проверки целостности передаваемых данных и верификации абонента, сформировавшего сообщение. Непосредственно данные подписи помещаются в http заголовок сообщения. Для данной цели используются параметр http-заголовка «ap-content-signature», содержащий данные индекса ключа и подписи. Параметр «ap-content-signature» может отсутствовать в ответе, если запрос не содержит подписи или подпись некорректна.
Применяемые алгоритмы:
- HMAC-SHA256 – по умолчанию;
- HMAC-SHA512.
Формат подписи – «keyindex».«messageSign», где:
- keyindex – индекс ключа или пары ключей, используемых для подписи;
- messageSign – строка содержащая подпись;
- в качестве разделителя используется символ «.» (точка).
Пример формирования подписи:
<?php
function formSignature(/* array */ $data)
{
$signature =
ALGO_KEY //1 - HMAC-SHA256, 2-MAC-SHA512
. '.'
. hash_hmac('sha256', $data , ARTPAY_SECRET1);
return $signature;
}
?>
function formSignature(message)
{
const signature = '1.' //1 - HMAC-SHA256, 2-MAC-SHA512
+ CryptoJS.HmacSHA256(message, ARTPAY_SECRET1).toString(CryptoJS.enc.Hex);
return signature;
}
Пример проверки подписи в ответе сервера:
<?php
public function checkSignature($data, $signature) : bool
{
return ($this->formSignature($data) == $signature);
}
?>