Задать вопрос

Как с помощью php soap в качестве параметра отправить xml?

Коллеги, подскажите, пожалуйста, надо в качестве одного из параметром SOAP запроса (метод getTariff) передать xml.
Все методы, включая авторизацию и получение словаря отрабатывают на ура (все параметры запроса - строки), а вот с getTariff проблема. Подскажите, как быть с xml параметром, как его правильно передавать?

При выполнении запроса с SOAP действием: getTariff следующий ответ:
[ErrorCode] => -20001
[ErrorMessage] => Пустой XML файл в преобразовании.

Рабочий код класса, которые используется для запросов к веб сервису.

class IngosApi { 
	public $soapClient;
	public $token;
        
        // сразу авторизуемся и получаем токен с помощью запроса Login
	public function __construct($apiUser, $apiPassword, $soapWsdlUri) 
	{
		$this->soapClient = new SoapClient($soapWsdlUri, array('trace' => true, 'encoding'=>'UTF-8'));
		
		$requestData = [
			'User' => $apiUser,
			'Password' => $apiPassword
		];
		$response = $this->soapClient->Login($requestData);
		$this->token = $response->ResponseData->SessionToken;
	}

	// set on cron (every day 05:00)
        // получаем словарь с помощью запроса getDicty
	public function getDicty() 
	{
		$requestData = [
			'SessionToken' => $this->token,
			'Product' => 753518300
		];
		$response = $this->soapClient->GetDicti($requestData);
		$dictionary = $response->ResponseData->any;
		file_put_contents('dictionaty.xml', $dictionary);
		// insert data шт DB
	}

	public function getTariff() 
	{
        $requestData = [
			'SessionToken' => $this->token,
                        // пока тестируем, получаем просто из файла запрос
			'TariffParameters' => file_get_contents('agreement-test.xml'),
			'NeedList' => 1
		];
		$response = $this->soapClient->GetTariff($requestData);
		$this->printPre($response);
	}

	public function getSoapClient()
    {
        return $this->soapClient;
    }
    
    public function getLastRequestXml()
    {
        return $this->soapClient->__getLastRequest();
    }

    public function getLastResponseXml()
    {
        return $this->soapClient->__getLastResponse();
    }

	// delete before production
	public function printPre($var) {
		echo '<pre>';
		print_r($var);
		echo '</pre>';
	}
}
  • Вопрос задан
  • 1121 просмотр
Подписаться 2 Средний Комментировать
Пригласить эксперта
Ответы на вопрос 1
@BorisKorobkov Куратор тега PHP
Web developer
XML - это обычная строка, передавать его надо так же.
Почему конкретный метод не работает - читайте по нему документацию (какие именно параметры и в каком формате) или обратитесь к его разработчикам.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы