Задать вопрос
@po4emu4ka2020

В чем может быть проблема при подключении к API через PHP?

Коллеги, подскажите, пожалуйста, в чем может быть проблема при подключении к API через PHP?
Пытаюсь пройти авторизацию, но ничего не получается.

Проект использует B2B Motion. У них есть краткая инструкция на сайте:
https://future.hogart.ru/gotovye-reshenija/API.php

Полная документация здесь:
https://b2bmotion.docs.apiary.io/
Прочитал - все просто, вроде, но не удается ничего вразумительного получить:
$data = array(
    'phone' => '*******',
    'password' => '********',
);

$options = array(
    'http' => array(
        'method'  => 'GET',
        'content' => json_encode( $data ),
        'header'=>  "Content-Type: application/json\r\n" .
            "Accept: application/json\r\n"
    )
);
$context  = stream_context_create( $options );
$result = file_get_contents( $url, false, $context );

echo "<pre>";
print_r($result);
echo "</pre>";
  • Вопрос задан
  • 159 просмотров
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 3
ipatiev
@ipatiev Куратор тега PHP
Потомок старинного рода Ипатьевых-Колотитьевых
Во-первых, надо забыть про функцию print_r.
Если вы хотите увидеть хоть какой-то вразумительный результат, то надо использовать var_dump.
Во-вторых, надо включить режим отображения ошибок (либо смотреть их в логе).
Судя по всему, file_get_contents возвращает false, а это происходит в случае ошибки.
file_get_contents по умолчанию выплевывает обычный Warning. И если вы его не видите, это значит, что вы не видите вообще никакие ошибки РНР. И как можно вообще заниматься разработкой в таком случае - загадка.

Для отладки полезно вывести содержимое специальной переменной, которая содержит заголовки ответа, var_dump($http_response_header);

Ну и на всякий случай, надо конкретнее описывать свои проблемы. Что означают ваши "ничего не работает" и "не удается получить" никто не знает. Надо четко писать, что вы видите.
Ответ написан
@po4emu4ka2020 Автор вопроса
получилось, использовал просто другой код для curl

function geturl($url,$data){
    (function_exists('curl_init')) ? '' : die('cURL Must be installed for geturl function to work. Ask your host to enable it or uncomment extension=php_curl.dll in php.ini');
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HEADER, true);
    $html = curl_exec($ch);
    $status = curl_getinfo($ch);
    curl_close($ch);

    if($status['http_code']!=200){
        if($status['http_code'] == 301 || $status['http_code'] == 302) {
            list($header) = explode("\r\n\r\n", $html, 2);
            $matches = array();
            preg_match("/(Location:|URI:)[^(\n)]*/", $header, $matches);
            $url = trim(str_replace($matches[1],"",$matches[0]));
            $url_parsed = parse_url($url);
            return (isset($url_parsed))? geturl($url,$data):'';
        }
    }
    return $html;
}
Ответ написан
Комментировать
pOmelchenko
@pOmelchenko
php-developer
Подключите себе в проект guzzle и начните жить, а не пилить очередной велосипед
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы