我正在使用NuSOAP为支付网关使用Web服务,但是,此网关的文档要求:
- 如果 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
任何意见将不胜感激。谢谢!
我自己回答以备将来参考。首先,您需要扩展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