Заголовок авторизации Laravel OAuth для API FitBit

Я уже несколько дней пытаюсь найти достойное решение для Laravel, но безрезультатно.

Существует множество библиотек, которые в какой-то момент могли бы обеспечить интеграцию OAuth с Laravel-FitBit API, однако после того, как мы попробовали более 15 различных библиотек, и ни одна из них не работала, я застрял.

Чтение FitBit Документация Я вижу, что после получения токена вы должны поменять код авторизации на токен доступа. Для этого вам нужно отправить заголовок авторизации следующим образом:

POST https://api.fitbit.com/oauth2/token
Authorization: Basic Y2xpZW50X2lkOmNsaWVudCBzZWNyZXQ=
Content-Type: application/x-www-form-urlencoded

client_id=22942C&grant_type=authorization_code&redirect_uri=http%3A%2F%2Fexample.com%2Fcallback&code=1234567890

Я пытался использовать guzzle и несколько других библиотек для отправки запросов, но ни одна из них не поддерживает формат, который требуется FitBit.

Я видел сайты с интегрированным FitBit API, поэтому для этого должно быть решение.

Если кому-то удалось интегрировать API FitBit, пожалуйста, дайте мне знать, где я ошибаюсь.

Благодарю.

1

Решение

У меня нет учетной записи FitBit, поэтому я не могу проверить это, и, возможно, потребуется некоторая настройка, но я бы начал с чего-то вроде:

class FitbitConnection{

public function getToken($request_url, $client_id, $client_secret, $code, $redirect_uri){

// base64 encode the client_id and client_secret
$auth = base64_encode("{$client_id}:{$client_secret}");
// urlencode the redirect_url
$redirect_uri = urlencode($redirect_uri);
$request_url .= "?client_id={$client_id}&grant_type=authorization_code&redirect_uri={$redirect_uri}&code={$code}";

// Set the headers
$headers = [
"Authorization: Basic {$auth}",
"Content-Type: application/x-www-form-urlencoded",
];

// Initiate curl session
$ch = curl_init();
// Set headers
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
// Options (see: http://php.net/manual/en/function.curl-setopt.php)
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
//curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_VERBOSE, 1);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_URL, $request_url);
curl_setopt($ch, CURLOPT_POST, 1);
// Execute the curl request and get the response
$response = curl_exec($ch);

// Throw an exception if there was an error with curl
if($response === false){
throw new Exception(curl_error($ch), curl_errno($ch));
}

// Get the body of the response
$header_size = curl_getinfo($ch, CURLINFO_HEADER_SIZE);
$responseBody = substr($response, $header_size);
// Close curl session
curl_close($ch);

// Return response body
return $responseBody;

}
}

Вы должны отметить, что я закомментировал

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);

Вы можете вернуть эту опцию обратно, если у вас возникла проблема с сертификатом SSL на вашем локальном хосте, но вы не должны использовать его в работе.

Затем вы можете просто сделать что-то вроде:

try{
$fitbitConnection = new FitbitConnection();
$token_response = $fitbitConnection->getToken("https://api.fitbit.com/oauth2/token","22942C","client_secret","1234567890","http://www.example.com");
echo $token_response;
}catch(Exception $e){
// curl error
echo $e->getMessage();
}
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]