PHP curl hash_hmac

Нужна помощь в этом... Мне нужно получить данные json из вызова API с URL-адреса. Он сказал, что вызванные потребности ..

  1. Content-Type: application/x-www-form-urlencoded
  2. ЗАГОЛОВКИ HTTP: ключ ---> APIKEY
  3. ЗАГОЛОВКИ HTTP: sig ---> Подпись HMAC-SHA1 данных POST с секретным ключом
  4. POST PARAMETER: timestamp ----> Текущая временная метка Unix

Это мой код...

$key = 'APIKEY';
$secret = 'APISECRET';

$timestamp = time(); 
$signature = hash_hmac('sha1', $timestamp, $secret);

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://www.domain.com/getticker");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_HEADER, FALSE);
curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_POSTFIELDS, "timestamp=".time());
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type: application/x-www-form-urlencoded","key: ".$key,"sig: ".$signature));
$response = curl_exec($ch);
curl_close($ch);

echo $response;

Это дало мне сообщение об ошибке {"error":"Invalid Signature!"}. Любые подсказки?


person Rain Lai    schedule 12.03.2014    source источник
comment
{ошибка: неверная подпись!}   -  person Rain Lai    schedule 12.03.2014
comment
Вы должны изменить curl_setopt($ch, CURLOPT_POSTFIELDS, "timestamp=".time()); на curl_setopt($ch, CURLOPT_POSTFIELDS, "timestamp=".$timestamp);, чтобы опубликовать то же значение, которое вы используете в подписи.   -  person ojovirtual    schedule 12.03.2014
comment
На самом деле ваша подпись неверна, вы определяете $secret_key, но используете $secret для хеширования. $signature = hash_hmac('sha1', $timestamp, $secret_key);   -  person ojovirtual    schedule 12.03.2014
comment
Я поставил первый вопрос, как будто никто не ответил на него. поэтому я попробовал второй. извините за это. просто нужно срочно исправить этот код.   -  person Rain Lai    schedule 12.03.2014


Ответы (1)


$key = 'APIKEY';
$secret_key = 'APISECRET';

$timestamp = time(); 
$signature = hash_hmac('sha1', $timestamp, $secret);

должно быть

$signature = hash_hmac('sha1', $timestamp, $secret_key);

ваш секрет $ не определен. если вы просто не вставили его, это вызовет ошибку

person bountyh    schedule 12.03.2014
comment
оппс, мой плохой. на самом деле в моем коде это $secret. не $secret_key. наверное где-то перепутал. - person Rain Lai; 12.03.2014
comment
о, хорошо, вы можете вставить немного больше кода - person bountyh; 12.03.2014
comment
я снова отредактировал вопрос, чтобы отразить то, что я сделал в своем коде, ТОП. - person Rain Lai; 12.03.2014
comment
какой именно API вы используете? - person bountyh; 12.03.2014
comment
это с fybsg.com. документация находится на docs.fyb.apiary.io. Общедоступный API не является проблемой. Частный вызвал у меня головную боль. Я хотел бы использовать функцию API getaccinfo. - person Rain Lai; 12.03.2014
comment
Я пытался найти их документацию по API, но это ужасно. - person bountyh; 12.03.2014