#php #soap
#php #soap
Вопрос:
Я работаю над клиентом веб-службы на PHP. Каждый запрос должен предоставлять лицензионный ключ, который является идентификатором guid, таким как 17a18c4d-63ab-4eab-778f-20a67e1fe83a.
Проблема в том, что согласно спецификации, лицензия представляет собой не строку, а идентификатор Guid, а примеры приведены на C, например.
ListAllBookSubjects(Guid licenseKey, LanguageCodeTypeEnum language)
Если я попробую этот фрагмент в PHP (логин и лицензия не являются фактическими):
$url= "http://service.qa.pubhub.dk/MediaService1_4.asmx?WSDL";
$config = array( "login" => "mail@example.com", "password" => "1234", "trace" => 1,"exceptions" => 0);
$objSoapClient = new SoapClient($url,$config);
print_r($objSoapClient->ListAllBookSubjects('{17a18c4d-63ab-4eab-778f-20a67e1fe83a}', 'DAN'));
Я получаю следующий ответ об ошибке:
[message:protected] => System.Web.Services.Protocols.SoapException: Invalid LicenseKey {00000000-0000-0000-0000-000000000000}
Я также пробовал без фигурных скобок. Очевидно, формат guid неверен, но как мне представить C Guid в PHP?
Я нашел ответ, смотрите ниже
Ответ №1:
Согласно WSDL в http://service.qa.pubhub.dk/MediaService.asmx?WSDL может показаться, что GUID «определен» значением шаблона, равным:
[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}
так что, безусловно, будет хорошо, если вы сделаете это без фигурных скобок. Возможно ли, что лицензионный ключ не авторизован или что-то еще на сервере? Возможно, стоит обратиться к поставщику услуг, предоставив им копию или два выполняемых запроса SOAP.
Комментарии:
1. Лицензия действительна. Их сторонник попросил меня попробовать в Storm, что помогло мне понять, как правильно сконструировать параметры. Кстати, спасибо, что указали мне на определение GUID, я не знал, что оно указано в WSDL.
Ответ №2:
Я попробовал отправить запрос с помощью Storm и понял, что для запроса нужны имена параметров:
print_r($objSoapClient->ListAllBookSubjects(array("licenseKey" => "17a18c4d-63ab-4eab-778f-20a67e1fe83a", "language"=>"DAN")));
Вышеупомянутая версия работает отлично!
Я не знал Storm, но мне указали на это в службе поддержки поставщика услуг. Кажется, это очень полезный инструмент: http://storm.codeplex.com
Комментарии:
1. Хороший улов… прошло много времени с тех пор, как я имел что-либо общее с SOAP: мне потребовались бы годы, чтобы разобраться с этим 🙂