Я занимаюсь разработкой веб-приложения с использованием CodeIgniter и запрашиваю данные у Slim REST Api. У меня проблемы с веб-приложением, чтобы получить ответ на запрос Httpful. Я использую базовую функцию для выполнения всех запросов в моем приложении CodeIgniter. Это выглядит так:
function httpRequest($verb, $endpoint, $sentHeaders = null, $body = null)
{
try {
require FCPATH . 'vendor/autoload.php';
$context = & get_instance();
$xUsuario = $context->session->usuario;
$headers = array(
'Content-Type' => 'application/json',
'xAuthChaveApi' => $context->session->userdata('CLIENT_KEY'),
'xAuthUsuarioID' => $xUsuario['id'],
'xAuthUsuarioToken' => $xUsuario['sessao']['token']
);
if (isset($sentHeaders)) {
$headers = array_merge($headers, $sentHeaders);
}
/*=========THE EXCEPTION IS THROWN HERE=========*/
$response = \Httpful\Request::{$verb}(API_URL . $endpoint)
->addHeaders($headers)
->body(json_encode($body))
->send();
if ($response->code == 401) {
encerrarSessao('Usuário não autorizado! Verifique os dados das suas credenciais e tente novamente');
}
return json_decode(json_encode($response->body), true);
} catch (Exception $ex) {
show_error('O seguinte erro ocorreu ao fazer requisição aos servidores: ' . $ex->getMessage());
}
}
Я протестировал как веб-приложение, так и API-интерфейс, размещенный на моем локальном хосте, приложение на моем локальном хосте и API-интерфейс на сервере Hostgator, и он работает как шарм. Но когда и приложение, и Api размещены на онлайн-сервере, я получаю сообщение об ошибке. Забавно, что ошибка возникает только на этой конкретной конечной точке, у меня нет проблем с остальными, локальными или онлайн. Я даже могу вызвать эту конечную точку на сервере с почтальоном, и она отлично работает.
Это код конечной точки, который у меня есть в API:
public static function listarImportacao(Request $request, Response $response) {
try {
$dataInicial = $request->getHeader('dataInicial')[0];
$dataFinal = $request->getHeader('dataFinal')[0];
if(!isset($dataInicial) && !isset($dataFinal)) {
$dataInicial = date('Y-m-d');
$dataFinal = date('Y-m-d', strtotime('+1 day'));
}
$partidas = Partida::whereBetween(
'dataHora',
array($dataInicial, $dataFinal)
)
->with(array('liga.pais', 'timeCasa', 'timeFora'))
->where('flagDisponivel', '!=', '1')
->where('cotacao', '!=', 'null')
->whereRaw('(dataHora >= (now() + INTERVAL 5 MINUTE))')
->get();
$meta = Helper::metaArray(Enum::SUCS_STS, Enum::SELECTED);
$partidas = Helper::formatarPartidas($partidas);
return $response->withCustomJson($meta, $partidas);
} catch (Exception $ex) {
$meta = Helper::metaArray(Enum::ERR_STS, $ex, 400);
return $response->withCustomJson($meta);
}
}
Это функция контроллера, которая делает запрос:
public function importacao() {
try {
$post = $this->input->post();
if(isset($post['dataInicial']) && isset($post['dataFinal'])) {
$dataInicial = dataAmericana($post['dataInicial']);
$dataFinal = dataAmericana($post['dataFinal']);
setFlashData($post['dataInicial'], 'dataInicial');
setFlashData($post['dataFinal'], 'dataFinal');
} else {
$dataInicial = date('Y-m-d', strtotime('today'));
$dataFinal = date('Y-m-d', strtotime('+1 day'));
}
$headers = array(
'dataInicial' => $dataInicial,
'dataFinal' => $dataFinal
);
$partidas = httpRequest('GET', Endpoint::listaImportacao, $headers);
//var_dump($partidas['data']); die();
$dados = array(
'titulo' => 'Importação de Partidas',
'nomeView' => 'partida/importacao',
'partidas' => isset($partidas['data']) ? $partidas['data'] : null
);
$this->load->view('menus/main', $dados);
} catch (Exception $ex) {
show_error('O seguinte erro ocorreu ao fazer requisição aos servidores: ' . $ex->getMessage());
}
}
Есть что-то, что я здесь скучаю? Заранее спасибо.
У меня тоже была эта ошибка Невозможно проанализировать ответ как JSON и я был уверен, что возвращенный JSON был в порядке.
После длительного поиска в выводе отсутствовала переменная php. Это портило правильный вывод JSON.
Поэтому проверьте наличие ошибок, связанных с php.
Других решений пока нет …