Авторизация
Исходящие запросы
Для верификации всех исходящих запросов необходимо выполнить несколько шагов.
- Сформировать объект -
bodyзапроса. - Добавить в объект поле
publicKey- выданный публичный ключ Firstpay. - Отсортировать в алфавитном порядке ключи в этом объекте.
- Сформировать строку вида
key=value1|key2=value2|key3=value3. - Закодировать полученную строку в base64.
- Полученную строку подписать с помощью приватного ключа мерчанта алгоритмом SHA256.
- Полученный результат также необходимо конвертировать в base64.
- В изначальный объект для запроса добавить поле
hash, у которого значение - полученный результат. - Запрос готов к отправке.
Пример кода на TS:
import {
createSign,
} from 'crypto';
const publicKey = '';
const privateKey = '';
function prepareMessage(message: IObject): string {
const res = Object
.keys(message)
.sort()
.map((key) => `${key}=${message[key]}`)
.join('|');
return Buffer.from(res).toString('base64');
}
function getSignedHash(message: IObject, privateKey: string): string {
const preparedMessage = prepareMessage(message);
const preparedPrivateKey = Buffer.from(privateKey, 'utf-8');
return createSign('SHA256')
.update(preparedMessage, 'base64')
.sign(preparedPrivateKey, 'base64');
}
const requestBody = {};
requestBody.publicKey = publicKey;
requestBody.hash = getSignedHash(requestBody, privateKey);
// Send request