WSDL: не могу определить параметр для метода

0

Я уже два дня бегаю по поиску, не надеясь, что я просто спрошу, что вопрос прольет свет!

Я работаю над системой обновления уровня акций с компанией-исполнителем. Мне дали адрес wsdl и следующие инструкции:

При вызове команды веб-сайт должен передать имя команды веб-службе, а также список параметров. Параметры должны быть отформатированы следующим образом:

<params>
<ParamName>Value</ParamName>
<AnotherParam>Value</AnotherParam>
</params>

GetStock - Получить доступные уровни запасов для данного поставщика

Параметр Тип данных Комментарии

Строка ClientCode
Строка SupplierCode Оставьте пустой или исключающий параметр для всех уровней запасов для клиента

а также:

<?xml version="1.0" encoding="utf-16"?>
<GetStock>
  <StockLevels>
    <Stock>
      <Sku>12848</Sku>
      <AltSku></AltSku>
      <SupplierCode>0044</SupplierCode>
      <Description>Australia Toggle £20 credit SIM</Description>
      <InStock>1</InStock>
      <Allocated>2</Allocated>
      <Available>17</Available>
      <Prices></Prices>
    </Stock>
  </StockLevels>
</GetStock>

Мне удалось заставить мой SoapClient работать, аутентифицироваться и получать токен обратно (после получения ошибок аутентификации). Я не мог назвать GetStock, поэтому использовал __getFunctions() и понял, что мне нужно использовать метод GetData().

Подняв файл WSDL, я обнаружил следующее:

<wsdl:operation name="GetData">
    <soap:operation soapAction="http://www.mnp-main.com/OMSConnect/IDataFeed/GetData" style="document"/>
    <wsdl:input>
        <soap:body use="literal"/>
    </wsdl:input>
    <wsdl:output>
        <soap:body use="literal"/>
    </wsdl:output>
</wsdl:operation>

Теперь я полностью в тупике, что делать! Я знаю, что GetStock не является доступным методом, поэтому это нужно делать через GetData, но я просто не могу понять, какие параметры будут проходить через него.

Единственное, что я выяснил, это то, что вторым параметром для GetData является токен аутентификации, но первая часть - все, что я могу сказать, приводит к следующему сообщению:

Конечный элемент "Тело" из пространства имен " http://schemas.xmlsoap.org/soap/envelope/ " ожидается. Найден элемент 'param1' из пространства имен ''. Строка 2, позиция 174.

Просматривая файл схемы, я вообще не пролил свет для меня :(

Прошу прощения, если я пропущу что-то очень очевидное, но у меня не было прежнего обучения по этому поводу, и все обучающие материалы, с которыми я сталкивался, по-видимому, имеют ясное имя и параметры метода в файле wsdl, в отличие от того, что у меня здесь.

Большое спасибо за вашу помощь!

Обновление 2:

Здесь результаты __getFunctions и __getTypes:

array(7) {
  [0]=>
  string(59) "AuthenticateResponse Authenticate(Authenticate $parameters)"
  [1]=>
  string(44) "GetDataResponse GetData(GetData $parameters)"
  [2]=>
  string(74) "GetDataWithParamsResponse GetDataWithParams(GetDataWithParams $parameters)"
  [3]=>
  string(68) "ValidateSessionResponse ValidateSession(ValidateSession $parameters)"
  [4]=>
  string(53) "ClearCacheResponse ClearCache(ClearCache $parameters)"
  [5]=>
  string(53) "GetVersionResponse GetVersion(GetVersion $parameters)"
  [6]=>
  string(77) "GetImageWithResizeResponse GetImageWithResize(GetImageWithResize $parameters)"
}

Для GetData и GetDataWithParams:

[10]=>
  string(55) "struct GetData {
  string command;
  string tokenValue;
}"
[11]=>
  string(56) "struct GetDataResponse {
  ResultGetData GetDataResult;
}"
[12]=>
  string(85) "struct GetDataWithParams {
  string command;
  string parameters;
  string tokenValue;
}"
[13]=>
  string(76) "struct GetDataWithParamsResponse {
  ResultGetData GetDataWithParamsResult;
}"
  • 0
    ваш XML как это?
  • 0
    Я только что обновил исходный вопрос на примере того, что я пробовал.
Показать ещё 2 комментария
Теги:
soap
wsdl

1 ответ

0

После долгих проб и ошибок я наконец-то начал работать. Основываясь на документации, я решил, что мне нужно использовать метод GetDataWithParams. Итак, посмотрим на результат __getTypes:

[12]=>
  string(85) "struct GetDataWithParams {
  string command;
  string parameters;
  string tokenValue;
}"

Я понял, что команда будет GetStock; tokenValue - $ токен. Часть, которую я не мог решить, был параметром, поэтому я сделал несколько проб и ошибок и понял, что он ожидает строковое значение: исходный XML-код в основном.

Так что в итоге получилось:

$params = new StdClass();
$params->command = 'GetStock';
$params->tokenValue = $token;
$params->parameters = "<params><ClientCode>{$this->clientCode}</ClientCode></params>";

Или в формате массива:

$params = array(
    'command' => 'GetStock',
    'tokenValue' => $token,
    'parameters' => "<params><ClientCode>{$this->clientCode}</ClientCode></params>",
    );

Спасибо @Wrikken за то, что указали мне в правильном направлении :)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню