МЫЛО пустой конверт. Как обрабатывать пустые ответы - PullRequest
0 голосов
/ 05 июля 2018

Я работаю некоторое время с SOAP API (самообучается во время рабочих проектов). Но меня всегда беспокоит то, что я не могу понять, как обращаться с пустым ответом.

Например: я звоню в службу, чтобы получить некоторые статьи из системы ERP. Входным параметром является номер артикула или номер GTIN.

Вот пример кода: https://codeshare.io/5e3EYr

Если, например, GTIN не установлен (просто для понимания), ответ больше не является массивом (одиночным или многомерным). Возвращение будет ошибкой типа «Неустранимая ошибка: невозможно использовать смещение строки в качестве массива», поскольку возвращением является сообщение об ошибке.

Надеюсь, вы понимаете мою проблему. Я уже пытался проверить, если это is_array и даже пытался поймать строку. Но я всегда получаю сообщение «Неустранимая ошибка: невозможно использовать смещение строки ...».

Ответы [ 2 ]

0 голосов
/ 05 июля 2018

Наконец я выяснил, какую часть проверять на наличие массива. Если это не массив, ничего не происходит. И если все хорошо.

if(is_array(['getSomeArticleResult']['SqlRowSet']['diffgram']['SqlRowSet1'])){
$aSuppl = $aSuppl['getSomeArticleResult']['SqlRowSet']['diffgram']['SqlRowSet1']['row'];
return $aSuppl;
}
0 голосов
/ 05 июля 2018

Нечто подобное (как пример для моего комментария)

function handleShutdown(){

   $lasterror = error_get_last();

    if (is_null($lasterror)) {
       //normal shutdown 
        return false;
    }

    //return error to client as XML, JSON etc.
    // $lasterror['message']
    // $lasterror['type']
    // $lasterror['file']
    // $lasterror['line']
}

register_shutdown_function('handleShutdown');

Я предоставлю вам информацию о том, как вы хотите отформатировать сообщение об ошибке. Обработчик выключения может даже отлавливать ошибки памяти ...:)

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

php.net / manual / en / function.register-shutdown-function.php

Вы также можете посмотреть на

  • set_error_handler
  • set_exception_handler

Тогда вы можете иметь триединство обработки ошибок.

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

if($severity & error_reporting()) 
   //report on these errors.

Обратите внимание, что одиночное & является побитовым сравнением и отличается от обычного AND (&&)

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

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

веселит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...