0

私はphp.netを使用し、phpでSoapClientを使用してSOAPリクエストを作成するためのドキュメントに従いましたが、正しい場所にヘッダーを付けてリクエストを正しくフォーマットする方法を理解できませんでした。これにより、スクリプトの実行時に「無効な認証タイプが使用されました」というエラーが発生します。

作成する必要のあるリクエストの例は次のとおりです。

<?xml version="1.0" encoding="utf-8"?>
<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
  <soap12:Header>
    <ServiceAuthHeader xmlns="http://voicepad.com/DataServices_Vivek/DataServices">
      <Username>string</Username>
      <Password>string</Password>
    </ServiceAuthHeader>
  </soap12:Header>
  <soap12:Body>
    <GetData xmlns="http://voicepad.com/DataServices_Vivek/DataServices">
      <sQueryType>string</sQueryType>
      <StartDate>string</StartDate>
      <EndDate>string</EndDate>
      <PhoneNumber>string</PhoneNumber>
    </GetData>
  </soap12:Body>
</soap12:Envelope>

phpを使用してリクエストを行う最後の試みは次のとおりです。

$client = new SoapClient("url", array( 'trace' => TRUE, 'exceptions'=>0 ));
$header = new SoapHeader( 'soap12', 'ServiceAuthHeader',  array('Username' => "$s_uname", 'Password' => "$s_pass"));
$client->__setSoapHeaders(array($header));

$result = $client->GetData(array('PhoneNumber'=>'##########'));

print_r($result);

このコードが生成しているリクエストは次のとおりです。

<soap-env:envelope xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://voicepad.com/DataServices_Vivek/DataServices" xmlns:ns2="soap12">
    <soap-env:header>
        <ns2:serviceauthheader>
            <item>
                <key>
                    Username
                </key>
                <value>
                    *********
                </value>
            </item>
            <item>
                <key>
                    Password
                </key>
                <value>
                    *********
                </value>
            </item>
        </ns2:serviceauthheader>
    </soap-env:header>
    <soap-env:body>
        <ns1:getdata>
            <ns1:phonenumber>
                ###########
            </ns1:phonenumber>
        </ns1:getdata>
    </soap-env:body>
</soap-env:envelope>

ご覧のとおり、このリクエストは間違っていますが、クローズも取得できました。少なくともリクエストのヘッダーに表示されるユーザー名とパスワードを取得した唯一のトライアルです。誰かが迷子になりました助けてください!

4

1 に答える 1

0

SoapHeaderのPHP.netドキュメントの最初のコメントを見ると、XML名前空間を正しく設定する必要があるという事実に加えて、この例がまさに必要なものです。

XMLには、要素をそれらに属するものとしてマークするためのいくつかのルールがあり、これはXMLプロセッサにとって重要ではないことを知っておく必要があります。

だからここにあなたの問題のために調整された例があります。私はそれがあなたのために働くことを願っています:

$client = new SoapClient(WSDL,array());

$auth = array(
     'UserName'=>'USERNAME',
     'Password'=>'PASSWORD',
     );
$header = new SoapHeader(
    'http://voicepad.com/DataServices_Vivek/DataServices',
    'ServiceAuthHeader',
    $auth,
    false
);
$client->__setSoapHeaders($header);
于 2013-01-26T11:23:53.887 に答える