Как обрабатывать таймауты с помощью NuSOAP в PHP?

Я использую NuSOAP для использования веб-сервиса для платежного шлюза, однако документация для этого шлюза требует, чтобы:

  • Если метод doPayment() занимает более 300 секунд, он должен немедленно выполнить метод getStatus() как минимум 3 раза, чтобы попытаться получить успешный ответ.

Дело в том, что я не знаю, как справиться с этим временем ожидания с помощью PHP и NuSOAP. NuSOAP возвращает какой-либо конкретный ответ, когда истекает время ожидания? Как мне теперь это на самом деле истекло?

Вот фрагмент кода для вызова NuSOAP:

$client = new nusoap_client( 'http://webserviceurl?wsdl...' , 'wsdl');

$err = $client->getError();
if ($err)
    die('Constructor error: ' . $err);

$proxy = $client->getProxy();

$payTrans = $proxy->doPayment(array('someparams' => 'somevalues'));

// if doPayment() timed out, then run the getStatus() method

Любой вклад будет принята с благодарностью. Спасибо!

1 ответ

Решение

Я отвечаю на это сам для дальнейшего использования. Прежде всего вам нужно увеличить значение тайм-аута для класса nusoap_client. Затем просто запустите таймер перед методом, который вы хотите протестировать, и сравните его со временем, которое потребовалось для завершения:

// Extending the timeout value to 300 seconds
$client = new nusoap_client( 'http://webserviceurl?wsdl...' , 'wsdl' , false, false, false, false, 0, 300)

$err = $client->getError();
if ($err)
    die('Constructor error: ' . $err);

$proxy = $client->getProxy();

$start = time(); // starting the timer
$payTrans = $proxy->doPayment(array('someparams' => 'somevalues'));
$timing = time() - $start; // calculating the transaction time

if($timing > 90 && $timing < 310)
    // It timed out: send an email, run another method, etc
Другие вопросы по тегам