Я пытаюсь подключиться к Royal Mail Shipping API и не могу понять, почему при $soapClient->__soapCall($method, $params) скрипт перестает выполняться. Ни на экране, ни в логах ошибок нет.
WSDL извлекается из локального файла, а __getFunctions() возвращает доступные методы, поэтому я предполагаю, что это нормально.
Создание объекта soapClient:
$soapClientOptions = array(
'cache_wsdl' => 'WSDL_CACHE_NONE',
'local_cert' => NULL,
//'ssl_method' => 'SOAP_SSL_METHOD_SSLv3',
'location' => $this->apiLocation,
'stream_context' => stream_context_create($this->getAuthenticationHeaders()),
'soap_version' => SOAP_1_1,
'trace' => true,
'exceptions' => true
);
try {
$soapClient = new SoapClient($this->getStaticEndPoint(), $soapClientOptions);
} catch(\SoapFault $fault){
$error = "SOAP Fault: (faultcode: {$fault->faultcode}\n" ."faultstring: {$fault->faultstring})";
echo $error;
}catch(\Exception $exception){
echo "<BR>".$exception;
}
$headerObject = new SoapVar($this->getWsseSecurityHeaders(), XSD_ANYXML);
$header = new SoapHeader($this->moduleRoot.'/reference/oasis-200401-wss-wssecurity-utility-1.0.xsd', 'Security', $headerObject);
$soapClient->__setSoapHeaders($header);
Ниже приведен код для __soapCall.
while (true) {
try {
$response = $soapClient->__soapCall('createShipment', array());
} catch (\SoapFault $fault) {
trigger_error("SOAP Fault: (faultcode: {$fault->faultcode}, faultstring: {$fault->faultstring})", E_USER_ERROR);
} catch (\Exception $e) {
echo $e->getCode().': '.$e->getMessage();
}
}
Объект SoapClient:
object(SoapClient)#1641 (6) {
["location"]=>
string(37) "https://api.royalmail.net/shipping/v2"
["trace"]=>
int(1)
["_stream_context"]=>
resource(4652) of type (stream-context)
["_soap_version"]=>
int(1)
["sdl"]=>
resource(4653) of type (Unknown)
["__default_headers"]=>
array(1) {
[0]=>
object(SoapHeader)#1640 (4) {
["namespace"]=>
string(136) "/RoyalMailShipping/reference/oasis-200401-wss-wssecurity-utility-1.0.xsd"
["name"]=>
string(8) "Security"
["data"]=>
object(SoapVar)#1649 (2) {
["enc_type"]=>
int(147)
["enc_value"]=>
string(820) "
[email protected]
4d+PCTIxEWdlZA2Zr/OkvOXlTv4=
MTAzMzg5Njc5NA==
2016-12-13T10:20:46Z
"
}
["mustUnderstand"]=>
bool(false)
}
} }
Я не знаю, как это отладить, так как я не получаю никаких ошибок, я увеличил php memory_limit, но это тоже не помогло. Я использую PHP версии 5.6.27.
PHP Fatal error: SOAP-ERROR: Encoding: object has no 'integrationHeader' property
, который указывает, что загружены wsdl и xsd. Добавление массива параметров обратно в __soapCall просто останавливает выполнение скрипта :( Включены журналирование ошибок и openssl. - person user3233563   schedule 13.12.2016