Я могу взаимодействовать с Yahoo Fantasy API, используя Oauth 2.0 в PHP, но когда я пытаюсь преобразовать свой код в JavaScript с помощью библиотеки HTTP-запросов Axios, я не получаю ответа.Что я делаю не так?
Во-первых, вот рабочая, действительная версия PHP:
function refreshAuthorizationToken($token) {
$consumer_key = "consumerKeyGoesHere";
$consumer_secret = "myConsumerSecretGoesHere";
$auth_header = base64_encode($consumer_key . ":" . $consumer_secret);
$auth_endpoint = "https://api.login.yahoo.com/oauth2/get_token";
$ch = curl_init();
$post_values = [
"redirect_uri" => "oob",
"grant_type" => "refresh_token",
"refresh_token" => $token
];
curl_setopt_array($ch, array(
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_URL => $auth_endpoint,
CURLOPT_POST => 1,
CURLOPT_HTTPHEADER => array(
'Authorization: Basic ' . $auth_header,
'Access-Control-Request-Headers: authorization',
'Content-Type: application/x-www-form-urlencoded',
'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.109 Safari/537.36'),
CURLOPT_POSTFIELDS => http_build_query($post_values)
));
$answer = curl_exec($ch);
$token = json_decode($answer);
if (!isset($access_token)) {
return "Error: access token not set."
}
else {
return $token;
}
}
Теперь вот код JavaScript, который не работает:
const consumerKey = `consumerKeyGoesHere`;
const consumerSecret = `consumerSecretGoesHere`;
const authHeader = Buffer.from(`${consumerKey}:${consumerSecret}`, `binary`).toString(`base64`);
async function refreshAuthorizationToken(token) {
const authEndpoint = `https://api.login.yahoo.com/oauth2/get_token`;
let response;
try {
response = await axios({
url: authEndpoint,
method: 'post',
headers: {
'Authorization': `Basic ${authHeader}`,
'Access-Control-Request-Headers': 'authorization',
'Content-Type': 'application/x-www-form-urlencoded',
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.109 Safari/537.36',
},
data: {
redirect_uri: 'oob',
grant_type: 'refresh_token',
refresh_token: token
},
timeout: 1000,
});
if (response.data) writeToFile(response.data, authFile, 'w');
return JSON.parse(response.data);
} catch (error) {
console.error(`Error in refreshAuthorizationToken: ${error}`);
}
}
IЯ пробовал params
вместо data
, но независимо от того, что этот запрос просто умирает без ответа, независимо от того, как я пытаюсь перехватить ошибки (пробовал несколько различных перестановок).
Я подумал, что это может бытьПроблема HTTPS, но даже если я создаю сервер HTTPS с самозаверяющим сертификатом, запрос все равно молча умирает.
Есть идеи, как это исправить?Или примеры правильно сформированного запроса токена обновления клиента OAuth 2.0 с использованием Axios / Node?