1

私は何日もLaravelのまともな解決策を見つけるのに苦労してきましたが、役に立ちませんでした.

ある時点でLaravel-FitBit API OAuth統合を提供するために機能した可能性のある多くのライブラリがありますが、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 が統合されたサイトを見たことがあるので、これには解決策があるはずです。

FitBit API の統合に成功した人がいる場合は、どこが間違っているのか教えてください。

ありがとう。

4

1 に答える 1

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);

localhost で 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();
}
于 2015-10-07T13:21:59.447 に答える