Я пытаюсь взаимодействовать со службой WCF4, используя PHP SoapClient.
Я успешно создал объект клиента и подключился. Я могу перечислить функции и типы, используя -> getFunctions (), -> getTypes ().
Я пытаюсь запустить один из наших пользовательских методов (SignIn), который возвращает объект, содержащий 2 строки (sessionID & Название сайта). Этот метод требует один параметр, который является пользовательским типом объекта (SignInDetails), который в свою очередь содержит 3 строки (‘Sitename’, ‘Username’, ‘Password’).
Мой первый класс используется для создания объекта SignInDetails, содержащего эти детали. Второй класс запускает наш пользовательский метод и передает объект в качестве параметра, однако метод всегда отвечает:
Необработанное исключение SoapFault: [a: InternalServiceFault] Ссылка на объект не установлена на экземпляр объекта
class clsLoginCredentials {
public $Sitename = null;
public $Username = null;
public $Password = null;
public function __construct() {
$this->Sitename = 'test';
$this->Username = 'test';
$this->Password = 'test';
}
}
class clsloginSession {
private $client = null;
private $objLoginCredentials = null;
public function __construct() {
$this->objLoginCredentials = new clsLoginCredentials;
$this->client = getClient();
}
public function loginSessionContractData() {
return $this->client->SignIn( $this->objLoginCredentials );
}
}
$testSession = new clsloginSession;
$testSessionData = $testSession->loginSessionContractData();
var_dump( $testSessionData );
Я определил проблему. Soap ожидает, что объект будет передан через связанный массив с ключом, который отражает имя параметра, как показано ниже:
public function loginSessionContractData() {
return $this->client->SignIn( array( 'signInDetails' => $this->objLoginCredentials ) );
}
Других решений пока нет …