NuSOAP 0.7.2 отправка пустых запросов SOAP - PullRequest
1 голос
/ 11 января 2012

ОК, поэтому прежде чем я получу ответы типа «Использовать встроенное расширение PHP SOAP» или «обновить до nuSOAP 0.9.5», я просто хочу прояснить, что это не вариант в моей ситуации.Я работаю в размещенной среде, и мне повезло, что у них даже была установлена ​​эта устаревшая версия nuSOAP на сервере.

Тем не менее, мне нужна помощь с моими запросами SOAP.

Вот что у меня есть:

require_once('nusoap_0.7.2/nusoap.php');
ini_set("soap.wsdl_cache_enabled", "0");
date_default_timezone_set('America/Los_Angeles');
$wsdl = "https://api.bronto.com/v4?wsdl";
$ns = "https://api.bronto.com/v4";

$client = new soapclient($wsdl, array('trace'=>1, 'encoding'=>'UTF-8'));

// Login
$token = "API-TOKEN";
$sessionId = $client->call('login', array('apiToken' => $token), $ns, $ns);
if (!$sessionId) {
  print "Login failed.\n";
  exit;
}
print_r($sessionId);

$client->setHeaders(array($ns, 'sessionHeader', array('sessionId' => $sessionId)));

echo htmlspecialchars($client->request, ENT_QUOTES); // debug request

Это то, что возвращает входящий в систему вызов API:

Array ( [faultcode] => soap:Client [faultstring] => 107: There was an error in your soap request. Please examine the request and try again. [detail] => There was an error in your soap request. Please examine the request and try again. )

Вот как выглядит SOAP-запрос:

POST /v4 HTTP/1.0 Host: api.bronto.com User-Agent: NuSOAP/0.7.2 (1.94) 
Content-Type: text/xml; charset=UTF-8 
SOAPAction: "" 
Content-Length: 379 
<?xml version="1.0" encoding="UTF-8"?>
 <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:ns7166="https://api.bronto.com/v4">
  <SOAP-ENV:Body>
   <parameters/>
  </SOAP-ENV:Body>
 </SOAP-ENV:Envelope>

Похоже, что SOAP-запрос отправляется нормально, но конверт пуст.Я подозреваю, что мне может понадобиться заменить массивы в запросе объектами SoapVal, но документация по этому объекту трудно понять.

Для справки, это код PHP SOAP, который я пытаюсь перевестидо nusoap 0.7.2

ini_set("soap.wsdl_cache_enabled", "0");
date_default_timezone_set('America/New_York');

$wsdl = "https://api.bronto.com/v4?wsdl";
$url = "https://api.bronto.com/v4";

$client = new SoapClient($wsdl, array('trace' => 1, 'encoding' => 'UTF-8'));
$client->__setLocation($url);

// Login
$token = "ADD YOUR API TOKEN HERE";
$sessionId = $client->login(array("apiToken" => $token))->return;
if (!$sessionId) {
    print "Login failed.\n";
    exit;
}
$client->__setSoapHeaders(array(new SoapHeader("http://api.bronto.com/v4", 'sessionHeader', array('sessionId' => $sessionId))));
print "Login was successful.\n";
...