Код: Выделить всё
const crypto = require('crypto-js');
const merchantId = insomnia.environment.get('MERCHANT_ID');
const merchantKeyId = insomnia.environment.get('VISA_KEY');
const merchantSecretKey = insomnia.environment.get('VISA_SECRET');
const requestHost = 'apitest.cybersource.com';
const requestMethod = '/risk/v1/decisions';
// Request body
const requestBody = insomnia.request.body;
// Digest
const digest = `SHA-256=${crypto.enc.Base64.stringify(crypto.SHA256(crypto.enc.Utf8.parse(requestBody)))}`;
insomnia.environment.set("bodyDigest",digest);
// Date
// const date = new Date(Date.now()).toUTCString();
var date = 'Fri, 12 Sep 2025 17:29:42 GMT';
insomnia.environment.set("date", date);
// Signature
const string = `host: ${requestHost}\ndate: ${date}\nrequest-target: ${requestMethod}\ndigest: ${digest}\nv-c-merchant-id: ${merchantId}`;
const signature = `keyid="${merchantKeyId}", algorithm="HmacSHA256", headers="host date (request-target) digest v-c-merchant-id", signature="${crypto.enc.Base64.stringify(crypto.HmacSHA256(crypto.enc.Utf8.parse(string), crypto.enc.Base64.parse(merchantSecretKey)))}"`;
insomnia.environment.set("signature", signature);
< /code>
У меня есть следующие заголовки, а также документация Cybersource: < /p>
Content-Type: application/json
digest: SHA-256={{ _.bodyDigest }}
signature: {{ _.signature }}
v-c-date: {{ _.date }}
v-c-merchant-id: {{ _.MERCHANT_ID }}
Accept: application/json
< /code>
Но по какой -то причине я все еще получаю следующий ответ от Cybersource: < /p>
{
"response": {
"rmsg": "Authentication Failed"
}
}
Я вижу, что в документации говорится, что поле заголовка как дата , но когда я перехватил звонок, сделанный из живого терминала, я вижу, что поле заголовка-V-C-дат . Это имеет значение? Я попробовал оба. /> Я использовал песочницу, чтобы проверить мои учетные данные, и они работают в живом терминале песочницы. Я упускаю некоторые данные при создании подписи?
Подробнее здесь: https://stackoverflow.com/questions/797 ... ion-failed
Мобильная версия