Как я могу использовать Oauth2, используя cURL и PHP - PullRequest
0 голосов
/ 15 мая 2018

Я не могу заставить скрипт фоллинга работать:

Я использую API под названием Swiftdil. Их пример выглядит следующим образом:

Пример запроса:

curl -X POST https://sandbox.swiftdil.com/v1/oauth2/token \
-H 'Content-Type: application/x-www-form-urlencoded' \
-u 'your_username:your_password'

Пример вывода:

{
"access_token":"your_access_token",
"expires_in": 3600,
"refresh_expires_in": 1800,
"refresh_token": "your_refresh_token",
"token_type": "bearer",
"not-before-policy": 0,
"session_state": "your_session_state"
}

Итак, URL, на который я должен отправить свои учетные данные: https://sandbox.swiftdil.com/v1/oauth2/token

Я пробовал следующий код:

               // Api Credentials
                $url = 'https://sandbox.swiftdil.com/v1/oauth2/token';
                $username = "my_username";
                $password = "my_password";


                // Set up api environment

                $ch = curl_init();
                curl_setopt($ch, CURLOPT_URL, $url);
                curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
                curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: 
                application/x-www-form-urlencoded'));
                curl_setopt($ch, CURLOPT_HEADER, 1);
                curl_setopt($ch, CURLOPT_POST, true);
                curl_setopt($ch, CURLOPT_USERPWD, $username . ":" . 
                $password);


                // Give back curl result
                $output = curl_exec($ch);
                $info = curl_getinfo($ch);
                $curl_error = curl_error($ch);
                curl_close($ch);
                print_r($output);
                print_r($info);
                print_r($curl_error);
?>

Сценарий возвращает мне следующий результат:

HTTP/1.1 400 Bad Request Server: nginx/1.13.8 Date: Tue, 15 May 2018 09:17:26 GMT Content-Type: text/html Content-Length: 173 Connection: close

400 Неправильный запрос.

Я что-то упустил? Я полностью удовлетворяю потребности приведенного выше примера, верно? Я делаю почтовый звонок, даю все полномочия в соответствии с просьбой, но все равно ничего не могу получить обратно.

Ответы [ 2 ]

0 голосов
/ 15 мая 2018

Я не разработчик PHP, я в основном делаю JavaScript. Когда я интегрируюсь с другими службами REST, я склонен использовать Почтальон (https://www.getpostman.com/).

Попробуйте следующее:

  1. Попытка успешно соединиться с API с помощью Postman (должна быть относительно простой).

  2. В случае успеха, Почтальон имеет возможность автоматически генерировать код PHP, который затем можно скопировать и вставить. Работает как шарм с JavaScript, не понимаю, почему с PHP все будет иначе.


Я только что заполнил детали в почтальоне, основываясь на том, что вы предоставили:

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => "https://sandbox.swiftdil.com/v1/oauth2/token",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 30,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_HTTPHEADER => array(
    "Authorization: Basic bXlfdXNlcm5hbWU6bXlfcGFzc3dvcmQ=",
    "Content-Type: application/x-www-form-urlencoded"
  ),
));

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
  echo "cURL Error #:" . $err;
} else {
  echo $response;
}

Обратите внимание: , «Авторизация: базовая» может использоваться в качестве базового механизма авторизации вместо «Несущий» (он также должен работать). Поэтому замените 'bXlfdXNlcm5hbWU6bXlfcGFzc3dvcmQ' на строку в кодировке base64 'username: password' (используйте действительные имя пользователя и пароль).

0 голосов
/ 15 мая 2018

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

"curl_setopt($ch, CURLOPT_POSTFIELDS, array(
'code' => $code,
'client_id' => $client_id,
'client_secret' => $client_secret,
'redirect_uri' => $redirect_uri,
'grant_type' => 'authorization_code'
))";

If still not work, you can find the curl error as :

if(curl_error($ch))
{
    echo 'error:' . curl_error($ch);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...