Я хочу расширить SoapClient
, чтобы он делал это изнутри при доступе к WSDL:
curl -L -E /location/of/cert.pem -c /tmp/location/of/cookie.jar https://web-service-provider/servicename?wsdl
У меня есть запрос SOAP, подобный этому:
$serviceUrl = 'https://service-url';
$wsdl = $serviceUrl . '?wsdl';
$proxyServiceUrl = 'http://localhost/myproxy.php?url=$serviceUrl';
$proxyWsdl = 'http://localhost/myproxy.php?url=$wsdl';
$options = array(
'cache_wsdl' => WSDL_CACHE_NONE,
'encoding' => 'utf-8',
'soap_version' => SOAP_1_1,
'exceptions' => true,
'trace' => true,
'location' => $proxyServiceUrl
);
$client = new SoapClient($proxyWsdl, $options);
$params = array( /* */ );
$client->someOperation($params);
Как видите, все довольно стандартный, за исключением бита прокси.
Причина для прокси
Я написал прокси, чтобы выполнить требование поставщика веб-услуг, чтобы все конечные точки, включая WSDL, обрабатывались через систему аутентификации, называемую siteminder.
Функция прокси довольно проста, если бы она была написана в командной строке linux curl, это было бы примерно так:
curl -L -E /location/of/cert.pem -c /tmp/location/of/cookie.jar https://web-service-provider/servicename?wsdl
Чтобы быть точным:
* Follow all redirections
* specify location of .pem file (and password)
* specify location of cookie jar
Все это работает нормально: )
НО недавно поставщик услуг решил изменить его WSDL.
Теперь он импортирует файлы схемы ( .xsd
), что не так уж и плохо, за исключением того, что это относится к WSDL.
Относительно файла WSDL означает, что синтаксический анализатор SoapClient
теперь ищет файлы схемы из расположения прокси. ОШИБКА, не могу найти!
Подробнее об этой проблеме здесь:
php SoapClient не работает при передаче wsdl со схемами относительного пути
Итак, мой вопрос:
Как я могу переписать SoapClient
(Разумеется, путем расширения), чтобы по-прежнему проходить аутентификацию Siteminder, но без необходимости проходить через этот дополнительный прокси?
Мои первоначальные мысли заключаются в том, что мне нужно каким-то образом переписать функцию доступа URI (если она существует) но без большой документации в этой области я не уверен, с чего начать.
В качестве альтернативы, мне, возможно, придется как-то взломать SoapServer
.
Я буду признателен за любую помощь, которую я могу получить, включая указатели на любую документацию внутри SoapClient
.