Построение запроса на мыло в PHP - PullRequest
0 голосов
/ 13 мая 2011

Впервые на soap, я использовал soapUI (http://www.soapui.org) для проверки службы, к которой мне нужно получить доступ, и определил, что мне нужен запрос на мыло, чтобы он выглядел следующим образом:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:_5=mynamespace>
  <soapenv:Header/>
  <soapenv:Body>
    <_5:GetStaff>
      <_5:Request>
        <_5:SourceCredentials>
          <_5:SourceName>name</_5:SourceName>
          <_5:Password>pword</_5:Password>
          <_5:SiteIDs>
            <_5:int>num</_5:int>
          </_5:SiteIDs>
        </_5:SourceCredentials>
      </_5:Request>
    </_5:GetStaff>
  </soapenv:Body>
</soapenv:Envelope>

где mynamespace, name, pword и num являются заполнителями. Мне просто нужно построить этот запрос в PHP. Это моя последняя попытка:

<code><html>
<body>

<?php
require_once('nusoap.php');

$wsdl = ...;
$client = new SoapClient($wsdl);

/*
echo("\nDumping client object:\n");
var_dump($client);

echo("\nDumping client object functions:\n");
var_dump($client->__getFunctions());
*/

try {
  $credentials = new SoapVar(array(
                                   'SourceName'=>name,
                                   'Password'=>pword,
                                   'SiteIDs'=>num
                                  ),
                             SOAP_ENC_OBJECT,
                             type1,
                             mynamespace
                         );
  $request = new SoapVar(array('SourceCredentials'=>$credentials),
                         SOAP_ENC_OBJECT,
                         type2,
                         mynamespace
                        );
  $result = $client->GetStaff(new SoapParam($request, "Request"));
  echo $result;
}
catch (SoapFault $fault) {
  trigger_error("SOAP Fault: (faultcode: {$fault->faultcode}, faultstring: {$fault->faultstring})", E_USER_ERROR);
}

print "<pre>\n";
print "Request :\n".htmlspecialchars($client->__getLastRequest()) ."\n";
print "Response:\n".htmlspecialchars($client->__getLastResponse())."\n";
print "
"; ?>

Поверьте мне, что type1 является подходящим типом для тега SourceCredentials, а этот type2 является подходящим типом для тега Request.

Когда я открываю этот файл в браузере *, абсолютно ничего не появляется. Когда закомментированные строки не закомментированы, я вижу дамп объекта (хотя я не знаю, как интерпретировать дамп), но функции объекта НЕ отображаются.

Похоже ли это на то, что сам SoapClient не настроен должным образом, или это ошибка в построении параметров для мыльного вызова?

* Пояснение: я назвал этот файл "index.php", и в браузере я перехожу к каталогу, в котором находится этот файл (это подкаталог моего каталога public_html).

Дамп объекта клиента: object(soapclient)#1 (48) { ["username"]=> string(0) "" ["password"]=> string(0) "" ["authtype"]=> string(0) "" ["certRequest"]=> array(0) { } ["requestHeaders"]=> bool(false) ["responseHeaders"]=> string(0) "" ["responseHeader"]=> NULL ["document"]=> string(0) "" ["endpoint"]=> string(64) "foobar.axmx?wsdl" ["forceEndpoint"]=> string(0) "" ["proxyhost"]=> bool(false) ["proxyport"]=> bool(false) ["proxyusername"]=> bool(false) ["proxypassword"]=> bool(false) ["portName"]=> string(0) "" ["xml_encoding"]=> string(0) "" ["http_encoding"]=> bool(false) ["timeout"]=> int(0) ["response_timeout"]=> int(30) ["endpointType"]=> string(4) "soap" ["persistentConnection"]=> bool(false) ["defaultRpcParams"]=> bool(false) ["request"]=> string(0) "" ["response"]=> string(0) "" ["responseData"]=> string(0) "" ["cookies"]=> array(0) { } ["decode_utf8"]=> bool(true) ["operations"]=> array(0) { } ["curl_options"]=> array(0) { } ["bindingType"]=> string(0) "" ["use_curl"]=> bool(false) ["fault"]=> NULL ["faultcode"]=> NULL ["faultstring"]=> NULL ["faultdetail"]=> NULL ["title"]=> string(6) "NuSOAP" ["version"]=> string(5) "0.9.5" ["revision"]=> string(18) "$Revision: 1.123 $" ["error_str"]=> string(0) "" ["debug_str"]=> string(305) "2011-05-12 17:10:31.480099 soapclient: ctor wsdl= timeout=0 response_timeout=30 endpoint=string(64) "foobar.asmx?wsdl" 2011-05-12 17:10:31.480593 soapclient: instantiate SOAP with endpoint at foobar.asmx?wsdl " ["charencoding"]=> bool(true) ["debugLevel"]=> int(9) ["XMLSchemaVersion"]=> string(32) "http://www.w3.org/2001/XMLSchema" ["soap_defencoding"]=> string(10) "ISO-8859-1" ["namespaces"]=> array(4) { ["SOAP-ENV"]=> string(41) "http://schemas.xmlsoap.org/soap/envelope/" ["xsd"]=> string(32) "http://www.w3.org/2001/XMLSchema" ["xsi"]=> string(41) "http://www.w3.org/2001/XMLSchema-instance" ["SOAP-ENC"]=> string(41) "http://schemas.xmlsoap.org/soap/encoding/" } ["usedNamespaces"]=> array(0) { } ["typemap"]=> array(6) { ["http://www.w3.org/2001/XMLSchema"]=> array(43) { ["string"]=> string(6) "string" ["boolean"]=> string(7) "boolean" ["float"]=> string(6) "double" ["double"]=> string(6) "double" ["decimal"]=> string(6) "double" ["duration"]=> string(0) "" ["dateTime"]=> string(6) "string" ["time"]=> string(6) "string" ["date"]=> string(6) "string" ["gYearMonth"]=> string(0) "" ["gYear"]=> string(0) "" ["gMonthDay"]=> string(0) "" ["gDay"]=> string(0) "" ["gMonth"]=> string(0) "" ["hexBinary"]=> string(6) "string" ["base64Binary"]=> string(6) "string" ["anyType"]=> string(6) "string" ["anySimpleType"]=> string(6) "string" ["normalizedString"]=> string(6) "string" ["token"]=> string(6) "string" ["language"]=> string(0) "" ["NMTOKEN"]=> string(0) "" ["NMTOKENS"]=> string(0) "" ["Name"]=> string(0) "" ["NCName"]=> string(0) "" ["ID"]=> string(0) "" ["IDREF"]=> string(0) "" ["IDREFS"]=> string(0) "" ["ENTITY"]=> string(0) "" ["ENTITIES"]=> string(0) "" ["integer"]=> string(7) "integer" ["nonPositiveInteger"]=> string(7) "integer" ["negativeInteger"]=> string(7) "integer" ["long"]=> string(7) "integer" ["int"]=> string(7) "integer" ["short"]=> string(7) "integer" ["byte"]=> string(7) "integer" ["nonNegativeInteger"]=> string(7) "integer" ["unsignedLong"]=> string(0) "" ["unsignedInt"]=> string(0) "" ["unsignedShort"]=> string(0) "" ["unsignedByte"]=> string(0) "" ["positiveInteger"]=> string(0) "" } ["http://www.w3.org/2000/10/XMLSchema"]=> array(11) { ["i4"]=> string(0) "" ["int"]=> string(7) "integer" ["boolean"]=> string(7) "boolean" ["string"]=> string(6) "string" ["double"]=> string(6) "double" ["float"]=> string(6) "double" ["dateTime"]=> string(6) "string" ["timeInstant"]=> string(6) "string" ["base64Binary"]=> string(6) "string" ["base64"]=> string(6) "string" ["ur-type"]=> string(5) "array" } ["http://www.w3.org/1999/XMLSchema"]=> array(11) { ["i4"]=> string(0) "" ["int"]=> string(7) "integer" ["boolean"]=> string(7) "boolean" ["string"]=> string(6) "string" ["double"]=> string(6) "double" ["float"]=> string(6) "double" ["dateTime"]=> string(6) "string" ["timeInstant"]=> string(6) "string" ["base64Binary"]=> string(6) "string" ["base64"]=> string(6) "string" ["ur-type"]=> string(5) "array" } ["http://soapinterop.org/xsd"]=> array(1) { ["SOAPStruct"]=> string(6) "struct" } ["http://schemas.xmlsoap.org/soap/encoding/"]=> array(3) { ["base64"]=> string(6) "string" ["array"]=> string(5) "array" ["Array"]=> string(5) "array" } ["http://xml.apache.org/xml-soap"]=> array(1) { [0]=> string(3) "Map" } } ["xmlEntities"]=> array(5) { ["quot"]=> string(1) """ ["amp"]=> string(1) "&" ["lt"]=> string(1) "<" ["gt"]=> string(1) ">" ["apos"]=> string(1) "'" } }

Ответы [ 2 ]

1 голос
/ 17 мая 2011

Это закончилось проблемой конфигурации; конфигурация php на серверах, которые я использовал, не включала мыло. Кроме того, у меня не было прав администратора на серверах, поэтому было трудно определить это как причину, а затем невозможно исправить.

Мне пришлось настроить свою собственную машину в качестве сервера, и теперь я могу успешно настроить SoapClient.

Если кому-то еще придется пройти через нечто подобное и ему нужно сделать то же самое, я нашел хорошее руководство по настройке сервера Apache на компьютере под управлением Windows с PHP и MySQL: http://www.overclockers.com/forums/showthread.php?t=272080

0 голосов
/ 13 мая 2011

Создайте свой SoapClient следующим образом:

$client = new SoapClient($wsdl, array('trace' => 1,
    'exceptions' => true,
    'cache_wsdl' => WSDL_CACHE_NONE));

Вам нужна опция трассировки, чтобы увидеть вывод __getLastRequest()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...