Как обработать & quot; Запрос отклонен сервером Throttle & quot; SOAP ответы в Laravel 5

Я сделал веб-приложение, которое использует обмены SOAP для получения данных из веб-API. Первоначально это было сделано процедурным способом, и сейчас я пытаюсь переместить его в рамки Laravel. у меня есть view настроен для отображения пользователю, если в ответе SOAP указано «Запрос отклонен сервером Throttle», но я не знаю, как проверить эту конкретную ошибку. Вот класс:

<?php namespace App\Models;

use SoapClient;
use Illuminate\Http\RedirectResponse;

class SoapWrapper {

public function soapExchange() {

// set WSDL for authentication and create new SOAP client
$auth_url  = "http://search.webofknowledge.com/esti/wokmws/ws/WOKMWSAuthenticate?wsdl";

// set WSDL for search and create new SOAP client
$search_url = "http://search.webofknowledge.com/esti/wokmws/ws/WokSearch?wsdl";

// array options are temporary and used to track request & response data
$auth_client = @new SoapClient($auth_url);

// array options are temporary and used to track request & response data
$search_client = @new SoapClient($search_url);

// run 'authenticate' method and store as variable
$auth_response = $auth_client->authenticate();

// call 'setCookie' method on '$search_client' storing SID (Session ID) as the response (value) given from the 'authenticate' method
// check if an SID has been set, if not it means Throttle server has stopped the query, therefore display error message
if (isset($auth_response->return)) {
$search_client->__setCookie('SID',$auth_response->return);
} else {
return Redirect::route('throttle');
}
}
}

Проблема состоит в том, что он выдает ошибку Laravel по умолчанию «Запрос отклонен сервером Throttle» в $auth_response = $auth_client->authenticate(); прежде чем он доберется до if оператор, который проверяет, было ли возвращено значение (SessionID) запросом SOAP. Он не делал этого, когда по какой-то причине был настроен процедурно.

if оператор проверяет, было ли возвращено значение из authenticate() метод и, если он есть, назначает его (SessionID) в cookie поискового клиента для авторизации поиска. В противном случае отображается пользовательское сообщение об ошибке.

Я пытался использовать is_soap_fault но это не улавливает, потому что технически это не мыльная ошибка. Я также попытался удалить строку, вызывающую проблему, и изменить if заявление для:

if (isset($auth_client->authenticate()->return) {...

Но это также вызывает страницу по умолчанию Laravel SoapFault. return Redirect::route('throttle') отображает пользовательскую страницу ошибки, сохраненную как throttle.blade.php,

Кто-нибудь знает, как я могу проверить на ошибку газа?

0

Решение

Неважно, нашел ответ здесь: Поймать исключение при правильном создании нового SoapClient.

В любом случае я опубликую свой исправленный код на всякий случай, если он пригодится кому-либо еще в будущем:

<?php namespace App\Models;

use SoapClient;
use Illuminate\Http\RedirectResponse;

class SoapWrapper {

public function soapExchange() {

try {
// set WSDL for authentication and create new SOAP client
$auth_url = "http://search.webofknowledge.com/esti/wokmws/ws/WOKMWSAuthenticate?wsdl";

// set WSDL for search and create new SOAP client
$search_url = "http://search.webofknowledge.com/esti/wokmws/ws/WokSearch?wsdl";

// array options are temporary and used to track request & response data
$auth_client = @new SoapClient($auth_url);

// array options are temporary and used to track request & response data
$search_client = @new SoapClient($search_url);

// run 'authenticate' method and store as variable
$auth_response = $auth_client->authenticate();

// add SID (SessionID) returned from authenticate() to cookie of search client
$search_client->__setCookie('SID', $auth_response->return);

} catch (\SoapFault $e) {
return Redirect::route('throttle');
}
}
}
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]