PHP SOAPCall Ввод нулевой - PullRequest
1 голос
/ 06 мая 2019

Я получаю следующую ошибку:

Неустранимая ошибка: Uncaught Исключение SoapFault: [s: Client] Операция службы Pickup_Cancel завершилась ошибкой из-за ошибок проверки: Ввод нулевой

Вот мой код:

$client = new SoapClient("https://etrack.postaplus.net/APIService/PostaWebClient.svc?singleWsdl", array("trace" => 1, "exception" => 0));

$params = array(
        "CodeStation" => `BEY`,
        "PickupNumber" => `1`,
        "Reason" => `test reason`,
        "Password" => `sss`,
        "ShipperAccount" => `acc`,
        "UserName" => `acc`,
    );

$client->Pickup_Cancel($params);

1 Ответ

2 голосов
/ 06 мая 2019

Ответ на вопрос, который вы не задавали, вероятно: заменить обратные кавычки (`) на одинарные кавычки (')

- Правка.Это не было проблемой.

Вот случай.МЫЛО может быть боль, чтобы начать.Мой опыт заключается в том, чтобы использовать хороший класс мыла или просто не-wsdl режим.Читайте об этом в документах: https://www.php.net/manual/en/soapclient.soapcall.php

Так что не делайте этого:

$return = $soapClient->functionName($data);

Но это:

$return = $soapClient->__SoapCall('functionName', $data);

Также получите контроль надчто хочет сервер, загрузите URL WSDL в клиент, такой как SoapUI https://www.soapui.org/ (это бесплатно).Это позволяет вам проверить, работает ли SoapServer и как вам следует подойти к нему с помощью вашего вызова.

В вашем случае WSDL утверждает следующее:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tem="http://tempuri.org/" xmlns:pos="http://schemas.datacontract.org/2004/07/PostaWebClient">
   <soapenv:Header/>
   <soapenv:Body>
      <tem:Pickup_Cancel>
         <!--Optional:-->
         <tem:CLIENTINFO>
            <!--Optional:-->
            <pos:CodeStation>asd</pos:CodeStation>
            <!--Optional:-->
            <pos:Password>asd</pos:Password>
            <!--Optional:-->
            <pos:ShipperAccount>asd</pos:ShipperAccount>
            <!--Optional:-->
            <pos:UserName>asd</pos:UserName>
         </tem:CLIENTINFO>
         <!--Optional:-->
         <tem:PickupNumber>asd</tem:PickupNumber>
         <!--Optional:-->
         <tem:Reason>asd</tem:Reason>
      </tem:Pickup_Cancel>
   </soapenv:Body>
</soapenv:Envelope>

Что переводится в этот код PHP:

$client = new SoapClient("https://etrack.postaplus.net/APIService/PostaWebClient.svc?singleWsdl");

$params = [
    'Pickup_Cancel' => [
        'CLIENTINFO' => [
            'Password' => 'sss',
            'ShipperAccount' => 'acc',
            'UserName' => 'acc',
            'CodeStation' => '',
        ],
        'PickupNumber' => '',
        'Reason' => '',
    ],
];

$client->__SoapCall("Pickup_Cancel", $params);

Посмотрите, как массив соответствует формату WSDL xml?

Это также должно дать вам обратную связь, необходимую для продолжения.Если нет, то, вероятно, пришло время получить «настоящую» помощь :) Goodluck.

...