Пользовательский заголовок с использованием PHP-функций мыла - PullRequest
8 голосов
/ 26 марта 2010

У меня проблема с получением настраиваемого мыльного заголовка для работы с PHP5. Кто-нибудь может направить меня, пожалуйста.

Мне нужно что-то вроде этого

<SOAP-ENV:Header>
  <USER>myusername</USER>
  <PASSWORD>mypassword</PASSWORD>
</SOAP-ENV:Header>  

Что я получаю:

<SOAP-ENV:Header>
  <ns2:null>
    <USER>myusername</USER>
    <PASSWORD>mypassword</PASSWORD>
  </ns2:null>
</SOAP-ENV:Header> 

Я хотел бы удалить теги пространства имен. Код, который я использую, чтобы получить это:

class Authstuff {
  public $USER;
  public $PASSWORD;

  public function __construct($user, $pass) {
    $this->USER = $user;
    $this->PASSWORD = $pass;
  }
} 

$auth = new Authstuff('myusername', 'mypassword');
$param = array('Authstuff' => $auth);
$authvalues = new SoapVar($auth,SOAP_ENC_OBJECT);

$header = new SoapHeader('http://soapinterop.org/echoheader/',"null",$authvalues);

Кажется, что NULL не проходит ... с помощью NULL я все еще получаю пространство имен, как во втором примере ... как исключить этот NS ... заранее спасибо за помощь

$headers = array();
$headers[] = new SoapHeader(null, 'USER', $username);
$headers[] = new SoapHeader(null, 'PASSWORD', $password);

$client->__setSoapHeaders($headers);
try {
    $result = $client->getAvailableLicensedDNCount('ASX01');
    print_r($result);

Неустранимая ошибка: SoapHeader :: SoapHeader (): неверные параметры. Неверное пространство имен. в /usr/home/deepesh/SoapCalls/deepesh7.php в строке 29

Ответы [ 2 ]

5 голосов
/ 14 июля 2015

Мне нужно было что-то подобное, и я смог использовать XSD_ANYXML SoapVar для достижения этой цели:

    $auth = "<username>$username</username>";
    $auth .= "<password>$password</password>";
    $auth_block = new SoapVar( $auth, XSD_ANYXML, NULL, NULL, NULL, NULL );

    $header = new SoapHeader( 'http://schemas.xmlsoap.org/soap/envelope/', 'Header', $auth_block );
    $soap_client->__setSoapHeaders( $header );

Это привело к:

<SOAP-ENV:Header>
   <username>12345</username>
   <password>12</password>
</SOAP-ENV:Header>
2 голосов
/ 27 марта 2010

В вашем примере вы создаете только одну запись SoapHeader (с пространством имен, но с именем 'null'). Ваш желаемый результат содержит две отдельные записи заголовка (без пространства имен), поэтому вы можете попробовать:

$headers = array();
$headers[] = new SoapHeader(NULL, 'USER', $auth->USER);
$headers[] = new SoapHeader(NULL, 'PASSWORD', $auth->PASSWORD);

Затем вы передадите массив $headers в мыльный вызов (напрямую или через __setSoapHeaders).

...