2016-01-22 3 views
1

я хочу сделать 404 тестирование в API с помощью локон и PHPPHP - CURL - Получение HTTP-код, если/иначе, чтобы проверить

В то время как действительные запросы на маркер поколения конечной точки (/ API/Утилиты/StashData) получат ответ HTTP 200, содержащий токен для использования с Leap, неверные запросы получат ответ HTTP 400 (Bad Request). Если ваша система получает ответ HTTP 400 от API, она не должна пытаться перейти к Leap. Содержание этого ответа будет содержать JSON-сериализовать объект, описывающий ошибку (ы) проверки, согласно следующему примеру:

[ 

     { 

       "Key": "CapeConsumers.TrackerNumber", 

       "Errors": [ 

        { 

          "ErrorCode": "CC002", 

          "Description": "The value is required." 

        } 

       ] 

     } 

] 

Как можно видеть, ответ содержит массив объектов, где каждый объект имеет свойство Key, которое ссылается на ключ, переданный службе, и свойство Errors, описывающее причину (причины), значение было отклонено. Значения ERRORCODE предопределены и гарантированно никогда не изменится, описание динамична для некоторых ошибок и существует в основном при отладке

Коды

CC001

недопустимое значение.

Значение не соответствует одному или нескольким правилам проверки, определенным для ключа.

CC002

Значение требуется.

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

CC003

Значение не правильного типа. Ожидалось {0}, найдено {1}.

Система ожидала, что значение будет одного типа, но был отправлен другой тип . (Например, номер был послан вместо строки)

CC004

Происхождение не является действительным для указанной кампании.

Кампании связаны с конкретными интегрирующими сторонами. Если интегрирующая сторона использует номер трекера, который ему не назначен, эта ошибка будет возвращена.

CC005

кампания не в данный момент.

Номер трекера ссылается на кампанию, которая либо не началась, либо уже подошла к концу.

Вот код, который я пробовал.

$endpointUser = "myuser"; 
// 
$endpointPassword = "mypass"; 
// 
$url = "https://webservices_test.capeconsumers.co.za/api/Utilities/StashData"; 

$iframeUrl = "https://onlineapplicationtest.capeconsumers.co.za/Bridge/CapeConsumersSACommercial?token="; 

$fields = array(
    "User.IdentityNumber"=> $_GET['security_phrase'], 
    "CapeConsumers.TrackerNumber"=> "6E273247DB4840G3", 
    "Call.AgentReference"=> $_GET['user'] , 
    "Call.RecordingReference"=> $_GET['security_phrase'] 
); 

$process = curl_init($url); 
curl_setopt($process, CURLOPT_HTTPHEADER, array('Content-Type: application/json')); 
curl_setopt($process, CURLOPT_HEADER, 0); 
curl_setopt($process, CURLOPT_USERPWD, $endpointUser . ":" . $endpointPassword); 
curl_setopt($process, CURLOPT_TIMEOUT, 30); 
curl_setopt($process, CURLOPT_POST, 1); 
curl_setopt($process, CURLOPT_POSTFIELDS, json_encode($fields)); 
curl_setopt($process, CURLOPT_RETURNTRANSFER, TRUE); 
$token = curl_exec($process); 
curl_close($process); 
$token = str_replace('"','',$token); 

$httpCode = curl_getinfo($process, CURLINFO_HTTP_CODE); 


if($httpCode == 400) { 

echo "there was an error"; exit; 

} 

?> 


<iframe src="<?php echo $iframeUrl . $token; ?>" width="100%" height="800"></iframe> 

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

Я уверен в моей логике, так как это моя первая попытка завитка

+0

Что будет плохой ответ? 404 произойдет, если страница не найдена или не возвращается API. –

+0

Извините, я имел в виду 400, обновил код –

ответ

1

Вы получаете код ответа слишком поздно.

curl_close руководство говорит:

Закрывает завиток сессию и освобождает все ресурсы. Ручка cURL также удаляется.

заказ должен быть:

$httpCode = curl_getinfo($process, CURLINFO_HTTP_CODE); 
curl_close($process); 

В противном случае нет CURL ручки больше, и поэтому вы не можете получить код ответа.

+0

Я буквально только что увидел это и отредактировал его, и он работает! Спасибо –

+0

Также изменил оператор if из if ($ httpCode == 400) на if ($ httpCode! == 200) –

+1

Хорошо. Но помните, что может быть код ответа, в котором вы не получаете сообщения об ошибках как JSON. Как и 404. Но если вы справляетесь с этим так же, как «Ошибка произошла», вам хорошо идти. –

0

404 не будет возвращено API, он будет выброшен, если и только если запрошенный URL не существует или работает. Чтобы генерировать 404 преднамеренно, PLS изменить хост-сайт URL, так что он относится к неправильному местоположению и, следовательно, должен привести к 404. Надеюсь, это поможет.

Смежные вопросы