8

カスタム SOAP ヘッダーを 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」を使用しても、2番目の例のように名前空間を取得できます..この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 行目

4

2 に答える 2

7

同様のものが必要で、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>
于 2015-07-14T19:16:05.120 に答える
2

この例では、SoapHeader エントリを 1 つだけ作成しています (名前空間はありますが、名前は「null」です)。目的の結果には 2 つの個別のヘッダー エントリ (名前空間なし) が含まれているため、次のことを試してください。

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

次に、配列を soap 呼び出しに渡し$headersます (直接、または を介し​​て事前に__setSoapHeaders)。

于 2010-03-27T12:26:50.230 に答える