Как получить JSON с access_token и refresh_token в Битрикс24 при полной OAuth-авторизации, вместо HTML-формы авторизации?

Я реализую OAuth авторизацию в своем приложении для Битрикс24. На этапе перехода по следующему URL:  
<a href="https://my.domain/oauth/token/" rel="nofollow">https://my.domain/oauth/token/</a>  
с параметрами:  
grant_type=authorization_code  
&client_id=app.573ad8a0346747.09223434  
&client_secret=LJSl0lNB76B5YY6u0YVQ3AW0DrVADcRTwVr4y99PXU1BWQybWK  
&code=avmocpghblyi01m3h42bljvqtyd19sw1,  
я получаю не JSON с access_token и refresh_token, а HTML-код формы авторизации. 

Я выяснил, что проблему можно решить, добавив куку PHPSESSID, которая была установлена для пользователя при вводе логина и пароля на странице авторизации Битрикс24. Однако, я не могу получить эту куку с помощью серверного кода. В связи с этим у меня возник вопрос: каким образом я могу получить JSON с токенами?
  • 7 марта 2025 г. 8:44
Ответы на вопрос 2
Для успешного получения JSON-ответа с `access_token` и `refresh_token` в системе Битрикс24 при использовании OAuth 2.0, необходимо убедиться, что вы правильно следуете протоколу OAuth и что у вас есть все необходимые данные и условия.

### Шаги для получения токена:

1. **Получите код авторизации**:  
   Сначала вам необходимо перенаправить пользователя на страницу авторизации Битрикс24 с указанием всех необходимых параметров. Например:

   ```plaintext
   https://my.domain/oauth/authorize/?response_type=code&client_id=app.573ad8a0346747.09223434&redirect_uri=http://your.redirect.uri
   ```

   После успешной авторизации пользователь будет перенаправлен на `redirect_uri` с параметром `code`.

2. **Обменяйте код на токены**:  
   Используйте полученный код для запроса токенов. Вам нужно выполнить POST-запрос на `https://my.domain/oauth/token/` с нужными параметрами. Примерный код на PHP может выглядеть так:

   ```php
   $url = 'https://your.b24.domain/oauth/token/';
   $data = [
       'grant_type' => 'authorization_code',
       'client_id' => 'app.573ad8a0346747.09223434',
       'client_secret' => 'LJSl0lNB76B5YY6u0YVQ3AW0DrVADcRTwVr4y99PXU1BWQybWK',
       'code' => 'код_авторизации',
       'redirect_uri' => 'http://your.redirect.uri'
   ];

   $options = [
       'http' => [
           'header' => "Content-type: application/x-www-form-urlencoded\r\n",
           'method' => 'POST',
           'content' => http_build_query($data),
       ],
   ];

   $context = stream_context_create($options);
   $result = file_get_contents($url, false, $context);

   if ($result === FALSE) {
       // Обработайте ошибку
   }

   $response = json_decode($result, true);
   ```

3. **Проблема с HTML-формой**:  
   Если вы получаете HTML-код формы авторизации вместо JSON с токенами, это может быть связано с несколькими причинами:

   - **Необходимые куки**: как вы уже заметили, вам могут понадобиться куки сессии, если ваш запрос к токену не может быть выполнен без авторизации пользователя. Убедитесь, что вы в правильном контексте. 

   - **Правильность URL**: проверьте, что вы используете правильный URL для обращения к API.

   - **Приемник**: требуется корректный `redirect_uri`, который должен совпадать с тем, что был указан при запросе на получение кода авторизации.

4. **Дополнительные советы**:
   - Используйте инструменты для проверки HTTP-запросов (например, Postman) для отладки.
   - Если ваш API требует дополнительной авторизации или других заголовков, удостоверьтесь, что указаны все обязательные параметры.

Следуя этим шагам, вы должны получить нужный ответ в формате JSON с `access_token` и `refresh_token`.
Проверьте доступ к /oauth/ 
Или можно ходить сразу на сервер авторизации - oauth.bitrix.info
Похожие вопросы