Нашли это! Вот что ты делаешь.
Создайте свой SOAP-сервер:
$server = new SoapServer($your_wsdl,$any_options);
$server->setClass($name_of_your_class);
$server->handle($location_of_request_data);
Класс, названный в $name_of_your_class
, помимо того, что содержит функции для каждой службы, определенной в $your_wsdl
, должен также содержать функцию, названную для всего, что есть в вашем корпусе тега <SOAP-ENV:Header>
. У меня есть <ns1:Header>
, поэтому моя функция называется Header
. Поместите туда любую логику, которая вам нужна. Для меня я хотел проверить ключ API и идентификатор сайта, поэтому я создал приватную переменную, и, если ключ API и идентификатор сайта верны, для переменной задано значение true. Все остальные функции в классе проверяют, имеет ли эта переменная значение true, прежде чем продолжить, и если нет, выдается SOAPFault
.
Надеюсь, это поможет любому, кто сталкивается с этим вопросом в Google.
P.S .: Для функций в классе, определенном в $server->setClass()
, не забывайте, что они должны принимать аргументы в порядке, определенном в WSDL. Это сбило меня с толку.
Удачи всем другим разработчикам PHP / SOAP - похоже, нам всем это нужно.
Edit / P.P.S .: По какой-то причине простой вызов $server->addFunction("Header")
у меня не сработал - я попробовал это сначала, прежде чем попробовал подход setClass
выше. Просто один на один с людьми.