Getting a token
PHP 5 using the file_get_contents function
This example shows getting an OAuth token in the web service. Recommendations for other types of applications (desktop or mobile) are given in the Yandex OAuth documentationYandex OAuth documentation.
Callback URL
When registering or editing application parameters on the Yandex.OAuth service, you must set the Callback URL to the URL of the script that is receiving the token. For example:
https://site.ru/get_token.php
The code of the script is provided below.
Procedure
The token request requires specifying the application ID and password that were generated during registration on the Yandex.OAuth service.
-
The application takes the user to the access request page using a link in the format
https://oauth.yandex.com/authorize?response_type=code&client_id=APPLICATION_ID
On the page that opens, the user clicks Allow.
-
Yandex.OAuth performs a redirect to the address from Callback URL. In addition, the
code
parameter is appended to the address. For example:http://site.ru/get_token.php?code=AUTHORIZATION_CODE
-
The script sends a POST request to https://oauth.yandex.com/token, passing the following parameters:
-
grant_type = authorization_code
-
code
= AUTHORIZATION_CODE -
client_id
= APPLICATION_ID -
client_secret
= APPLICATION_PASSWORD
-
-
Yandex.OAuth sends a response in JSON format. The
access_token
key contains the OAuth token. For example:{"access_token": "0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f"}
The received token must be saved and used in requests to the Yandex Direct API.
Script code
To use this example, specify the application ID and password.
<?php
// Application ID
$client_id = 'APPLICATION_ID';
// Application password
$client_secret = 'APPLICATION_PASSWORD';
// If the script is called with the "code" parameter specified in the URL,
// a request to get a token is executed
if (isset($_GET['code']))
{
// Forming parameters (the body) of a POST request specifying the authorization code
$query = array(
'grant_type' => 'authorization_code',
'code' => $_GET['code'],
'client_id' => $client_id,
'client_secret' => $client_secret
).
$query = http_build_query($query);
// Forming headers for the POST request
$header = "Content-type: application/x-www-form-urlencoded";
// Executing the POST request and outputting the result
$opts = array('http' =>
array(
'method' => 'POST',
'header' => $header,
'content' => $query
)
).
$context = stream_context_create($opts);
$result = file_get_contents('https://oauth.yandex.com/token', false, $context);
$result = json_decode($result);
// The token must be saved and used in requests to the Yandex Direct API
echo $result->access_token;
}
// If the script is called without the "code" parameter,
// the user is shown a link to the access request page
else
{
echo '<a href="https://oauth.yandex.com/authorize?response_type=code&client_id='.$client_id.'">Страница запроса доступа</a>';
}
?>