2016-05-28 19 views
0

Ich versuche, PHP und CURL verwenden, um Anfragen an die Fitbit oauth 2.0 API zu stellen. Ich kann meinen Autorisierungscode erhalten, kann aber den Code für ein Token nicht austauschen. Die Fitbit-API-Dokumentation sagt (https://dev.fitbit.com/docs/oauth2/#access-token-request), dass ich Postcode, Client-ID, Redirect-URI und Grant-Typ auf 'Authorization_code' gesetzt habe.PHP cURL gewähren Typ ungültig/nicht unterstützt

Wie auch immer, ich bekomme immer einen Fehler, wenn ich die Antwort drucke.

"errortype": "unsupported_grant_type", "message": "Die Genehmigung grant_type wird nicht unterstützt, Besuche https://dev.fitbit.com/docs/oauth2 für weitere Informationen über die Fitbit Web API Genehmigungsverfahren.."}], "Erfolg": false}

Für das Leben von mir kann ich nicht herausfinden, was ich falsch mache mit dem untenstehenden Code. Irgendwelche Vorschläge?

$code = $_GET['code']; 
$url = 'https://api.fitbit.com/oauth2/token'; 

$curl = curl_init($url); 
curl_setopt($curl, CURLOPT_POST, true); 
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); 
curl_setopt($curl, CURLOPT_HEADER, false); 
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($curl, CURLOPT_POSTFIELDS, array(
'code=' . $code . '&' . 
'client_id=' . $oauth2_client_id . '&' . 
'redirect_uri=' . $oauth2_redirect . '&' . 
'grant_type=authorization_code' 
              ) 
); 

curl_setopt($curl, CURLOPT_HTTPHEADER, array(
    'Authorization: Basic '. base64_encode($oauth2_client_id.':'.$oauth2_secret), 
    'Content-Type: application/x-www-form-urlencoded' 
)); 
$response = curl_exec($curl); 
print_r($response); 

Antwort

0

Sie verketten die POST-Argumente in einer einzigen Zeichenfolge und fügen sie dann in ein Array ein, aber sie sollten einzeln dargestellt werden. das kann in getan werden, wie folgt:

curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query(array(
'code' => $code, 
'client_id' => $oauth2_client_id, 
'redirect_uri' => $oauth2_redirect, 
'grant_type' => 'authorization_code' 
))); 

See: curl POST format for CURLOPT_POSTFIELDS

+0

Ja, danke! Aus irgendeinem Grund, sogar wenn Sie sie in ein richtiges Array wie Sie angegeben haben, hat nicht funktioniert. Die Verwendung einer einzelnen Zeichenfolge, aber nicht als Array, funktionierte perfekt! –