Как я могу вызвать и установить параметр в заголовке и функции в SOAP API в PHP? - PullRequest
0 голосов
/ 16 мая 2018

Я работаю только на Rest API, и я новичок в SOAP API, я интегрирую сторонний API, разработанный на SOAP API?

Как я могу назвать его функцией "GetAvailibility", а также заголовком и установить параметр?

THIRD PARTY XML CODE:

<?xml version="1.0" encoding="utf-8"?>
 <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
   xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
   xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
   <soap:Header>
       <Authenticate xmlns="http://tempuri.org/">
         <InterfaceCode>10</InterfaceCode>
         <InterfaceAuthKey>jskjks</InterfaceAuthKey>
         <AgentCode>ggsjs2222</AgentCode>
         <Password>abcd</Password>
       </Authenticate>
    </soap:Header>
  <soap:Body>
     <GetAvailibility xmlns="http://tempuri.org/">
        <strRequestXML>string</strRequestXML>
     </GetAvailibility>
   </soap:Body>
  </soap:Envelop

1 Ответ

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

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

Поскольку вы еще не объявили функции и типы вашего веб-сервиса,Я просто приведу очень простой пример.

Функции и типы

Как я уже говорил, вам следует взглянуть на функции и типы вашего веб-сервиса.,Для этого вы можете запустить клиентский объект мыла и распечатать все функции и типы.

<code>try {
    $wsdl = 'https://path/to/your/webservice.wsdl';
    $options = [
        'cache_wsdl' =>  WSDL_CACHE_NONE,
        'soap_version' => SOAP_1_2,
        'trace' => true,
    ];
    $client = new \SoapClient($wsdl, $options);

    // print out all functions
    echo "<pre>";
    var_dump($client->__getFunctions());
    echo "
"; // распечатать все типы echo"
";
    var_dump($client->__getTypes());
    echo "
";} catch (\ SoapFault $ fault) {// errorобработка}

Теперь вы можете программировать классы, которые представляют все типы веб-сервисов.

Структуры как классы

Предположим, тип дляGetAvailability функция выглядит следующим образом.

GetAvailability(struct GetAvailabilty)

struct GetAvailability {
    string strRequestXML
}

Структура Authenticate может выглядеть следующим образом.

struct Authenticate {
    int InterfaceCode
    string InterfaceAuthKey
    string AgentCode
    string Password
}

Помните, что это предположение. Я действительно не знаю, какваши типы выглядят в реальности. Это всего лишь пример. Вы должны сами выяснить, какие типы и структуры используются вашим веб-сервисом с $client->__getTypes(). С помощью этой информации вы можете программировать следующие классы.

declare(strict_types=1);
namespace Application\Structs;

class Authenticate
{
    public $InterfaceCode;

    public $InterfaceAuthKey;

    public $AgentCode;

    public $Password;

    public function getInterfaceCode() : int
    {
        return $this->InterfaceCode;
    }

    public function setInterfaceCode(int $InterfaceCode) : Authenticate
    {
        $this->InterfaceCode = $InterfaceCode;
        return $this;
    }

    public function getInterfaceAuthKey() : string
    {
        return $this->InterfaceAuthKey();
    }

    public function setInterfaceAuthKey(string $InterfaceAuthKey) : Authenticate
    {
        $this->InterfaceAuthKey = $InterfaceAuthKey;
        return $this;
    }

    public function getAgentCode() : string
    {
        return $this->AgentCode;
    }

    public function setAgentCode(string $AgentCode) : Authenticate
    {
        $this->AgentCode = $AgentCode;
        return $this;
    }

    public function getPassword() : string
    {
        return $this->Password;
    }

    public function setPassword(string $Password) : Authenticate
    {
        $this->Password = $Password;
        return $this;
    }
}

То же самое вы должны сделать для вашей GetAvailibity структуры веб-сервиса.

declare(strict_types=1);
namespace Application\Structs;

class GetAvailability
{
    public $strRequestXML;

    public function getStrRequestXML() : string
    {
        return $this->strRequestXML;
    }

    public function setStrRequestXML(string $strRequestXML) : GetAvailability
    {
        $this->strRequestXML = $strRequestXML;
        return $this;
    }
}

Теперь у вас есть структуры веб-сервиса как классы php. Эти классы представляют типы, которые вы перечислили ранее с помощью метода $client->__getTypes()У мыльного клиента php есть еще одна операцияНазывается classmap.Опцию classmap можно использовать для отображения некоторых типов WSDL на классы PHP.Эта опция должна быть массивом с типами WSDL в качестве ключей и именами классов PHP в качестве значений.

Помните $options, которое мы дали в качестве параметра мыльному клиенту?Просто разверните параметры вокруг параметра classmap.

$options = [
    'cache_wsdl' =>  WSDL_CACHE_NONE,
    'soap_version' => SOAP_1_2,
    'trace' => true,
    'classmap' => [
        'Authenticate' => 'Application\Structs\Authenticate',
        'GetAvailability' => 'Application\Structs\GetAvailability',
    ],
];

Просто запустите ваш мыльный клиент с этими параметрами.

** Вызов заголовка и функции *

Теперь, когда мы 'Мы сделали все приготовления, мы можем вызвать функцию.

// set the soap header
$authenticateStruct = (new \Application\Structs\Authenticate())
    ->setInterfaceCode(10)
    ->setInterfaceAuthKey('jskjks')
    ->setAgentCode('ggsjs2222')
    ->setPassword('abcd');

$header = new \SoapHeader(
    'http://schemas.xmlsoap.org/soap/envelope/',
    'Authenticate',
    $authenticateStruct,
    false
);

$client->__setSoapHeaders($header);

// function call
$getAvailabilityStruct = (new \Application\Structs\GetAvailability())
    ->setStrRequestXML($strRequestXML);

$result = $client->GetAvailability($getAvailabilityStruct);

Вот и все.Имейте в виду, что это всего лишь пример.

...