Как вызвать SoapServer из PHP - PullRequest
0 голосов
/ 29 мая 2018

До сих пор я не смог успешно передать параметры в запрос через PHP SoapClient.

<?php

class MockSoapClient extends \SoapClient
{
    public function __doRequest($request, $location, $action, $version, $one_way = 0)
    {
        echo $request.PHP_EOL;

        return '';
    }
}

$client = new MockSoapClient(
    'http://www.saiasecure.com/webservice/shipment/soap.asmx?wsdl',
    [
        'trace' => 1,
        'soap_version' => SOAP_1_1,
    ]
);

$client->__soapCall(
    'GetByProNumber',
    [
        'parameters' => [
            'UserID' => 'username',
            'Password' => 'password',
            'TestMode' => 'Y',
            'ProNumber' => '123',
        ]
    ]
);

Запуск с: php test.php |xmllint -format -

Получение выходных данных:

<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://www.SaiaSecure.com/WebService/Shipment">
  <SOAP-ENV:Body>
    <ns1:GetByProNumber/>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Ожидается, что выходные данные будут содержать некоторую форму параметров в элементе GetByProNumber.

Версия PHP: 7.0.30(Ubuntu 16.04)

Есть отчеты "не об ошибках", которые близко имитируют проблему, но я не могу понять, что нужно изменить, чтобы это работало.https://bugs.php.net/bug.php?id=33366

У кого-нибудь есть идеи или советы?

1 Ответ

0 голосов
/ 29 мая 2018

Я только что проверил ваш wsdl, похоже, правильный массив параметров должен быть таким:

[
    'parameters' => [
        'request' => [
            'UserID' => 'username',
            'Password' => 'password',
            'TestMode' => 'Y',
            'ProNumber' => '123',
        ]
    ]
]

тогда вывод будет выглядеть так:

<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://www.SaiaSecure.com/WebService/Shipment"><SOAP-ENV:Body><ns1:GetByProNumber><ns1:request><ns1:UserID>username</ns1:UserID><ns1:Password>password</ns1:Password><ns1:TestMode>Y</ns1:TestMode><ns1:ProNumber>123</ns1:ProNumber></ns1:request></ns1:GetByProNumber></SOAP-ENV:Body></SOAP-ENV:Envelope>
...