Я получаю «недопустимую подпись» при попытке аутентификации с помощью Coinbase API с помощью Postman - PullRequest
0 голосов
/ 06 января 2020

Это мой скрипт предварительного запроса.

// Computes the HMAC for requests sent to the Coinbase Pro API.
//
// - Add the following code as Postman pre-request script
// - Adapt the getPatch function an the variable names according to your needs

const timestamp = Math.floor(Date.now() / 1000);

function getPath(url) {
    // URL path regex works only if your URLs look like this: {{api_url}}/resource
    // If you use hardcoded URLs or any other scheme, adapt the regex pattern!
    const matches = url.match(/.+?(\/.+?)(?:#|\?|$)/);
    return (matches && matches.length > 1) ? matches[1] : ''; 
}
 
function computeSignature(request) {
    const data      = request.data;
    const method    = request.method;
    const path      = getPath(request.url);
    const body      = (method === 'GET' || !data) ? '' : JSON.stringify(data);
    const message   = timestamp + method + path + body;
    const key       = CryptoJS.enc.Base64.parse(pm.variables.get('apiSecret'));
    const hash      = CryptoJS.HmacSHA256(message, key).toString(CryptoJS.enc.Base64);
    
    console.log(message);

    return hash;
}
 
postman.setEnvironmentVariable('hmacSignature', computeSignature(request));
postman.setEnvironmentVariable('hmacTimestamp', timestamp);

Это моя пре-га sh строка: 1578317285GET / user

Я получил скрипт предварительного запроса здесь: https://www.iopanic.com/post/coinbase_pro_hmac_postman/

Может кто-нибудь помочь мне с аутентификацией?

Спасибо.

1 Ответ

0 голосов
/ 06 января 2020

Этот сценарий предварительного запроса сработал.

// Computes the HMAC for requests sent to the Coinbase Pro API.
//
// - Add the following code as Postman pre-request script
// - Adapt the getPatch function an the variable names according to your needs

const timestamp = Math.floor(Date.now() / 1000);

function getPath(url) {
    // URL path regex works only if your URLs look like this: {{api_url}}/resource
    // If you use hardcoded URLs or any other scheme, adapt the regex pattern!
    const matches = url.match(/.+?(\/.+?)(?:#|\?|$)/);
    return (matches && matches.length > 1) ? matches[1] : ''; 
}
 
function computeSignature(request) {
    const data      = request.data;
    const method    = request.method;
    const path      = getPath(request.url);
    const body      = (method === 'GET' || !data) ? '' : JSON.stringify(data);
    const message   = timestamp + method + path + body;
    const apiSecret = pm.variables.get('apiSecret');
    const hash      = CryptoJS.HmacSHA256(message, apiSecret).toString(CryptoJS.enc.Hex);
    
    console.log(message);
    console.log(hash);

    return hash;
}
 
postman.setEnvironmentVariable('hmacSignature', computeSignature(request));
postman.setEnvironmentVariable('hmacTimestamp', timestamp);
...