Получение сессионного токена для приложения bitrix24

ВНИМАНИЕ!! Приведенный ниже код устарел, так как б24 обновил авторизацию. Но есть проект на github сделанный на основе моего кода. Работает с новой версией авторизации https://github.com/xUJYx/bitrix24_api_authorization

В документации bitrix24 api описано получение сессионного токена, но для тех кто первый раз создает приложение, получить его удается не сразу.

Данная заметка больше для себя, чтобы не забыть потом).

И так, поехали:

  1. Для начала необходимо получить первый код авторизации, для этого переходим по ссылке https:// имя_портала.bitrix24.ru/oauth/authorize/?response_type=code&client_id=код_приложения . Где имя_портала - Ваш портал битрикс24, код_приложения - код приложения вида local.5592c31a77f7b0.32818786. Url который описан в документации можно не использовать. Если Вы не были авторизованы, то перебросит на страницу авторизации. В итоге будет адресной строке браузера ссылка вида https://apps-b1001609.bitrix24-cdn.com/b1001609/app_local/e38e9f7db4fa858f9e1b92e91e699811/index.html?code=6dm7bdbh6akpc9tax2lp3fih05m5gtf2&domain=имя_портала.bitrix24.ru&member_id=a3238bc7698db8257e62cf799e88b58e
  2. Теперь нам нужно получить access_token, берем полученый в п1. код (Внимание! время его жизни 30 сек!) и вставляем в ссылку https://имя_портала.bitrix24.ru/oauth/token/?grant_type=authorization_code&client_id=код_приложения&client_secret=секретный_код_приложения&scope=разрешения_для_приложения&code=код_из_п1 . Если вернуло {"error":"expired_token"} значит не успели, повторяем заново. Если ответ вида {"access_token":"x91c078f168ccz6vhuxzbkvonbe4z6x3","expires_in":3600,"scope":null, "user_id":13,"refresh_token":"ap1oopxpew4ieu2tw8d2hhoj2gu3smle", "domain":"имя_портала.bitrix24.ru","member_id":"a3238bc7698db8257e62cf799e88b58e"}, поздравляю, авторизация успешна.

Для автоматизации данного процесса я написал небольшой скрипт :

<?php
$config = require __DIR__.'/config.php';
$config = $config['production'];
$_url = 'https://'.$config['domain'];
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $_url);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
$res = curl_exec($ch);
$l = '';
if(preg_match('#Location: (.*)#', $res, $r)) {
    $l = trim($r[1]);
}
//echo $l.PHP_EOL;
curl_setopt($ch, CURLOPT_URL, $l);
$res = curl_exec($ch);
preg_match('#name="backurl" value="(.*)"#', $res, $math);
$post = http_build_query([
    'AUTH_FORM' => 'Y',
    'TYPE' => 'AUTH',
    'backurl' => $math[1],
    'USER_LOGIN' => $config['login'],
    'USER_PASSWORD' => $config['password'],
    'USER_REMEMBER' => 'Y'
]);
curl_setopt($ch, CURLOPT_URL, 'https://www.bitrix24.net/auth/');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
$res = curl_exec($ch);
$l = '';
if(preg_match('#Location: (.*)#', $res, $r)) {
    $l = trim($r[1]);
}
//echo $l.PHP_EOL;
curl_setopt($ch, CURLOPT_URL, $l);
$res = curl_exec($ch);
$l = '';
if(preg_match('#Location: (.*)#', $res, $r)) {
    $l = trim($r[1]);
}
//echo $l.PHP_EOL;
curl_setopt($ch, CURLOPT_URL, $l);
$res = curl_exec($ch);
//end autorize
curl_setopt($ch, CURLOPT_URL, 'https://'.$config['domain'].'/oauth/authorize/?response_type=code&client_id='.$config['client_id']);
$res = curl_exec($ch);
$l = '';
if(preg_match('#Location: (.*)#', $res, $r)) {
    $l = trim($r[1]);
}
preg_match('/code=(.*)&do/', $l, $code);
$code = $code[1];
curl_setopt($ch, CURLOPT_URL, 'https://'.$config['domain'].'/oauth/token/?grant_type=authorization_code&client_id='.$config['client_id'].'&client_secret='.$config['client_secret'].'&code='.$code.'&scope=crm,user,telephony');
curl_setopt($ch, CURLOPT_HEADER, false);
$res = curl_exec($ch);
curl_close($ch);
echo $res;

Для его использования нужен конфигурационный файл:

<?php
return [
    'dev' => [
        //идентификатор приложения
        'client_id' => 'local.55a6ca262e8482.19745138',
        //секретный код приложения
        'client_secret' => '3c04629083254f498ec482d73b14deb9',
        'scope' => 'crm,user,telephony',
        //домен третьего уровня клиентского проекта в Bitrix24
        'domain' => 'test.bitrix24.ru',
        //данные пользователя bitrix24
        'login' => 'test@test.tu',
        'password' => '123456',
    ],
    'production' => [
        //идентификатор приложения
        'client_id' => 'local.55acf267b7bbf0.23563438',
        //секретный код приложения
        'client_secret' => '2d75c95a9857f8d8e8108d543281d5a2',
        //доступ
        'scope' => 'crm,user',
        //домен третьего уровня клиентского проекта в Bitrix24
        'domain' => 'test2.bitrix24.ru',
        //данные пользователя для авторизации
        'login' => 'test@test.ru',
        'password' => '123456',
    ],
];

Нужный массив указываем в файле авторизации

$config = $config['production'];

После запуска скрипт выдаст сессионный токен.


Комментарии