PHP пост-запрос и unsupported_grant_type

php post curl

909 просмотра

2 ответа

1 Репутация автора

это мой код

$data = array(
        'grant_type'  => 'Password',
        'username'    => 'username',
        'password'    => 'pwd',
        'DeviceId'    => ''
    );


    $url = "http://test/sync/oauth/token";    

    $curl = curl_init($url);
    curl_setopt($curl, CURLOPT_HEADER, false);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($curl, CURLOPT_POST, true);
    curl_setopt($curl, CURLOPT_POSTFIELDS, $data);

    $response = curl_exec($curl);

    $status = curl_getinfo($curl, CURLINFO_HTTP_CODE);

    if ( $status != 201 ) {
        die("Error: call to URL $url failed with status $status, response $response, curl_error " . curl_error($curl) . ", curl_errno " . curl_errno($curl));
    }


    curl_close($curl);

    print_r($response);`

Я думаю, что это правильно, но сервер возвращает мне эту ошибку

Ошибка: вызов URL http: // test / sync / oauth / token завершился ошибкой со статусом 400, ответ {"error": "unsupported_grant_type"}, curl_error, curl_errno 0

Где ошибка?

Автор: Samuele Caci Источник Размещён: 19.07.2016 08:10

Ответы (2)


0 плюса

496 Репутация автора

Реализация OAuthAuthorizationServerHandler по умолчанию принимает только кодировку формы (т.е. application / x-www-form-urlencoded), но не кодировку JSON (application / JSON)

ContentType вашего запроса должен быть application / x-www-form-urlencoded и передавать данные в теле как: grant_type = password & username = username & password = password, т.е. не в формате JSON.

$headers = array();
$headers[] = 'Content-Type: application/x-www-form-urlencoded';
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
Автор: DarkKnight Размещён: 19.07.2016 08:48

0 плюса

1 Репутация автора

Для тех, кому это нужно ... Это решение:

$data = array(
    'grant_type'  => 'password',
    'username'    => 'username',
    'password'    => 'password',
    'DeviceId'    => ''
);
$url_token = "http://test/sync/oauth/token";    
try {
    $oauth = new OAuth('username','password');
    $signature = $oauth->fetch ($url_token,$data,'POST');
    $response_info = $oauth->getLastResponseInfo();
    header("Content-Type: {$response_info["content_type"]}");
    $token = $oauth->getLastResponse();
    $token = json_decode($token, true);

    $authorization_token = $token['access_token'];
} catch(OAuthException $E) {
    echo "Response: ". $E->lastResponse . "\n";
}
    return $authorization_token;
Автор: Samuele Caci Размещён: 28.07.2016 03:49
Вопросы из категории :
32x32