PHP 中 Iconomi API 中的身份验证

时间:2021-04-21 13:58:24

标签: php curl php-curl

我正在开发一个 PHP 脚本来使用 Iconomi API,但我遇到了身份验证问题。

根据documentation,您必须创建一个签名并将其附加到标题中。但是 curl_exec 函数返回 false,这意味着它失败了。

这些是说明:

<块引用>

创建请求 所有 REST 请求都必须包含以下标头:

<块引用>
  • ICN-API-KEY - 字符串形式的 API 密钥。
  • ICN-SIGN - base64 编码的签名(请参阅消息签名)。
  • ICN-TIMESTAMP - 以纪元毫秒为单位的请求时间戳。
<块引用>

签署消息 您通过使用 > prehash 字符串时间戳 + 方法 + requestPath + 正文(其中 + 表示字符串连接)上的 base64 解码密钥创建 sha512 HMAC 来生成 ICN-SIGN 标头,并对输出进行 base64 编码,其中:

<块引用>
  • 时间戳值与 ICN-TIMESTAMP 标头相同。
  • body 是请求正文字符串,如果没有请求正文(通常用于 GET 请求),则省略。
  • 方法必须总是大写

这是我的代码:

function call_iconomi_api()
{
    $url = 'https://api.iconomi.com';
    $api_key = get_field('iconomi_api_key', 'option');
    $api_secret = get_field('iconomi_api_secret', 'option');
    $timestamp = round(microtime(true) * 1000);
    $request_path = '/v1/assets';
    $message = $timestamp . 'GET' . $request_path;
    $signature = base64_encode(hash_hmac('sha512', $message, $api_secret));

    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, $url . $request_path);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($curl, CURLOPT_HTTPHEADER, array(
        'ICN-API-KEY: ' . $api_key,
        'ICN-SIGN: ' . $signature,
        'ICN-TIMESTAMP: ' . $timestamp
    ));

    $result = curl_exec($curl);

    curl_close($curl);

    return $result;
}

0 个答案:

没有答案