Я пытаюсь интегрировать OpenX в свое приложение, и первым шагом для получения защищенных данных является проверка подлинности OAuth 1.0. Однако я застрял при подписании запроса и продолжаю получать сообщение об ошибке «Недопустимый запрос: неверная подпись от Почтальона». Как я это проверил, я вручную сгенерировал подпись и заголовок запроса, а затем вставил заголовок запроса и некоторые другие параметры в Postman для тестирования. У меня есть подпись в заголовке авторизации, и я не знаю, почему она постоянно говорит мне неправильную подпись Вот мой код.
Вот ссылка на документ OpenX: https://docs.openx.com/Content/developers/platform_api/api_auth_programmatic_sample.html
Мой текущий заголовок авторизации выглядит так:
OAuth realm="teachingaids",oauth_nonce="1243510944",oauth_timestamp="1560953361",oauth_consumer_key="d6ed96f15380b90b6d21e97642cf7953aa65ce33",oauth_signature_method="HMAC-SHA1",oauth_version="1.0",oauth_signature="ZXeYGjXZnyQ4R1FXwmijehdwvkI%3D",oauth_callback="oob"
Вот код для получения токена несанкционированного запроса:
protected function get_request_token()
{
$nonce = mt_rand();
$timestamp = time();
$signature = rawurlencode($this->generate_signature($nonce, $timestamp));
$ch = curl_init($this->api_url . '/api/index/initiate');
$header = array();
$header[] = 'Authorization: OAuth realm="' . $this->oauth_realm . '",oauth_nonce="' . $nonce . '",oauth_timestamp="' . $timestamp .
'",oauth_consumer_key="' . $this->consumer_key . '",oauth_signature_method="HMAC-SHA1",oauth_version="1.0",' .
'oauth_signature="' . $signature . '",oauth_callback="oob"';
print $header[0];
$header[] = 'Content-Type: application/x-www-form-urlencoded';
$header[] = 'Accept-Encoding: identity';
$header[] = 'Connection: close';
$header[] = 'User-Agent: Python-urllib/2.7';
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_VERBOSE, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
$json_string = curl_exec($ch);
}
А вот код для получения Nonce
protected function getNonce($length = 7)
{
$characters = '0123456789';
$charactersLength = strlen($characters);
$nonce = '';
for ($i = 0; $i < $length; $i++) {
$nonce .= $characters[rand(0, $charactersLength - 1)];
}
return $nonce;
}
А вот код для генерации подписи
protected function generate_signature($nonce, $timestamp)
{
$signature_method = 'HMAC-SHA1';
$version = '1.0';
$base = 'POST&' . rawurlencode('http://sso.openx.com/api/index/initiate&') .
rawurlencode('oauth_consumer_key=' . rawurlencode($this->consumer_key) .
'&oauth_nonce=' . rawurlencode($nonce) .
'&oauth_signature_method=' . rawurlencode($signature_method) .
'&oauth_timestamp=' . rawurlencode($timestamp) .
'&oauth_token=' . rawurlencode('') .
'&oauth_version=' . rawurlencode($version));
$key = rawurlencode($this->consumer_secret) . '&';
$signature = base64_encode(hash_hmac('sha1', $base, $key, true));
return $signature;
}
Пожалуйста, любая помощь будет оценена.
Я ожидаю ответ с токеном от первого шага OAuth 1.0