GUID в PHP и SOAP

#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: мне потребовались бы годы, чтобы разобраться с этим 🙂