Я не могу заставить работать сценарий folling:
Я использую 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, неверный запрос.
Я что-то пропустил? Я полностью удовлетворяю потребности приведенного выше примера, верно? Я звоню по почте, даю все документы, как просили, но все равно ничего не могу вернуть.






Вам также необходимо установить поля поста curl, установив опцию ниже в соответствии с вашими данными.
"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);
}
Я не PHP-разработчик, в основном занимаюсь JavaScript. Когда я интегрируюсь с другими службами REST, я обычно использую Postman (https://www.getpostman.com/).
Попробуйте следующее:
Попытка успешно подключиться к API с помощью Postman (должна быть относительно простой).
В случае успеха Postman может автоматически сгенерировать код 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 'имя пользователя: пароль' (используйте фактическое имя пользователя и пароль).
Проголосовали за то, что вы упростили мою жизнь, указав, что Почтальон уже создает этот код, поскольку я уже смоделировал свои звонки в Почтальоне. Итак, 20 секунд спустя я смог проверить с правильными результатами.
Спасибо за ответ. Я только что нашел это в документации API: все запросы API должны выполняться через HTTPS. Любые запросы, сделанные через HTTP, завершатся ошибкой. ЗАПРОС ЗАГОЛОВКИ Требуется авторизация Чтобы запросить токен доступа, отправьте значения client_id и secret в качестве учетных данных базовой аутентификации HTTP. Если вы используете cURL, укажите -u «client_id: секрет». Когда вы вызываете API, отправляйте значение как токен доступа OAuth 2.0 с типом аутентификации, установленным как Bearer. Например: Разрешение: на предъявителя. Как мне реализовать это в коде, который я использую сейчас?