var_dump($soapClient->__getFunctions(), $soapClient->__getTypes());
-> để lấy được thông tin hàm, định dạng tham số truyền vào
function f(T1 $parameters)
struct T1 {
T11 a;
string b;
}
struct T11 {
int c;
string d;
}
…
Khi đó cứ theo struct mà bên trong chỉ chứa các kiểu dữ liệu nguyên thủy (string, number), ta sẽ khai báo ngược lên để có được tham số tương ứng:
$t11 = array(‘c’ => 12, d => ‘twelve’);
$parameters = array(‘a’ => $t11, ‘b’ => ‘valid string’);
$soapClient->__soapCall(array($parameters)); # phải bọc $parameters trong array
Tag Archives: soap
Handle timeout for SOAP Client
<?php
class SoapClientTimeout extends SoapClient
{
private $timeout;
public function __setTimeout($timeout)
{
if (!is_int($timeout) && !is_null($timeout))
{
throw new Exception("Invalid timeout value");
}
$this->timeout = $timeout;
}
public function __doRequest($request, $location, $action, $version, $one_way = FALSE)
{
if (!$this->timeout)
{
// Call via parent because we require no timeout
$response = parent::__doRequest($request, $location, $action, $version, $one_way);
}
else
{
// Call via Curl and use the timeout
$curl = curl_init($location);
curl_setopt($curl, CURLOPT_VERBOSE, FALSE);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($curl, CURLOPT_POST, TRUE);
curl_setopt($curl, CURLOPT_POSTFIELDS, $request);
curl_setopt($curl, CURLOPT_HEADER, FALSE);
curl_setopt($curl, CURLOPT_HTTPHEADER, array("Content-Type: text/xml"));
curl_setopt($curl, CURLOPT_TIMEOUT, $this->timeout);
$response = curl_exec($curl);
if (curl_errno($curl))
{
throw new Exception(curl_error($curl));
}
curl_close($curl);
}
// Return?
if (!$one_way)
{
return ($response);
}
}
}