Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP中Iconomi API中的身份验证_Php_Curl_Php Curl - Fatal编程技术网

PHP中Iconomi API中的身份验证

PHP中Iconomi API中的身份验证,php,curl,php-curl,Php,Curl,Php Curl,我正在开发一个PHP脚本来使用Iconomi API,但是我在身份验证方面遇到了问题 根据,您必须创建签名并将其附加到标题中。但是,curl_exec函数返回false,这意味着它失败了 以下是说明: 创建请求 所有REST请求必须包含以下标头: ICN-API-KEY—API密钥作为字符串 ICN-SIGN—base64编码签名(请参阅为消息签名) ICN-TIMESTAMP—请求的时间戳(以毫秒为单位) 在邮件上签名 通过使用>预灰化字符串时间戳+方法+请求路径+正文(其中+表示字符串串

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

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

以下是说明:

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

  • ICN-API-KEY—API密钥作为字符串
  • ICN-SIGN—base64编码签名(请参阅为消息签名)
  • ICN-TIMESTAMP—请求的时间戳(以毫秒为单位)
在邮件上签名 通过使用>预灰化字符串时间戳+方法+请求路径+正文(其中+表示字符串串联)上的base64解码密钥创建sha512 HMAC并对输出进行base64编码,可以生成ICN-SIGN头,其中:

  • 时间戳值与ICN-timestamp头相同
  • 正文是请求正文字符串,如果没有请求正文(通常用于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;
}

您是否验证了那些
get\u field
调用返回了您最初期望的正确值?您是否在这些地方使用了静态值进行测试?密码是否已被base64解码?@CBroe,是的,$api_key和$api_secret变量以字符串形式返回正确的值(例如:1920258c97f89e708db1a442389f5359e3ac919a6c6893d10ad1387275bbcae0)