Как обрабатывать таймауты с помощью 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