1

PHP / SOAPを使用してWebサービスからデータを取得しようとしていますが、応答データセットは常に空です。問題は、dsParamsパラメーターの設定方法にあると思います。

これはWebサービスのURLです

SoapUIを使用してこのリクエストを送信した場合:

 <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:max="http://www.maxhire.net/" xmlns:xs="http://www.w3.org/2001/XMLSchema">
   <soapenv:Header>
      <max:AuthHeader>
         <!--Optional:-->
         <max:DatabaseName>Name</max:DatabaseName>
         <!--Optional:-->
         <max:SecurityKey>Key</max:SecurityKey>
      </max:AuthHeader>
   </soapenv:Header>
   <soapenv:Body>
      <max:ExecuteCustomStoredProcedureGetResults>
         <max:strProcName>JobPostings</max:strProcName>
         <max:dsParams>
            <xs:schema id="NewDataSet" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
               <xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:UseCurrentLocale="true">
                  <xs:complexType>
                     <xs:choice minOccurs="0" maxOccurs="unbounded">
                        <xs:element name="Table">
                           <xs:complexType>
                              <xs:sequence>
                                 <xs:element name="ParamName" type="xs:string" minOccurs="0"/>
                                 <xs:element name="ParamValue" type="xs:string" minOccurs="0"/>
                              </xs:sequence>
                           </xs:complexType>
                        </xs:element>
                     </xs:choice>
                  </xs:complexType>
               </xs:element>
            </xs:schema>
         </max:dsParams>
      </max:ExecuteCustomStoredProcedureGetResults>
   </soapenv:Body>
</soapenv:Envelope>

希望する結果が得られます。

SOAPを使用して呼び出される各Webメソッドは、適切なセキュリティ資格情報を渡す必要があります。これらのクレデンシャルは、SOAPヘッダーでDatabaseNameおよびSecurityKeyとして指定する必要があります。この部分は正しく機能しています。

ドキュメントによると:

dsParamsについて

これらの関数のいずれかを使用するために渡す必要があるdsParamsデータセットに関するいくつかの注意事項(例:ExecuteCustomStoredProcedureGetResults):

  1. パラメータがない場合でも、初期化されたテーブルを1つ含むデータセットオブジェクトを渡す必要があります。

  2. パラメータがある場合は、そのテーブルに「ParamName」と「ParamValue」という名前の2つの列が必要です。

  3. 各パラメーターは、最初の列に名前、2番目の列に値を持つテーブル内の独自の行である必要があります。

注:パラメーターはありません。

以下は、私がこのタスクに取り組むことを試みた多くの方法の1つの例です。エラーが発生することなく取得できる最も近いものです。

$client = new SoapClient('https://www.maxhire.net/MaxHireAPI/UserServices.asmx?wsdl',array('trace' => TRUE));

$header = new SoapHeader(
        'http://www.maxhire.net/',
        'AuthHeader',array(
                'DatabaseName' => 'Name', 
                'SecurityKey'  => 'Key'
            ),
        false
        );

$client->__setSoapHeaders($header);

try {
    $jobs = new stdClass();
    $jobs->strProcName = 'JobPostings';
    $jobs->NewDataSet = new stdClass();
    $jobs->NewDataSet->Table = new stdClass();
    $jobs->NewDataSet->Table->ParamName = '';
    $jobs->NewDataSet->Table->ParamValue = '';

    $result = $client->ExecuteCustomStoredProcedureGetResults($jobs);

    echo "<pre>\n";
    var_dump($result);
    echo "</pre>\n";
}
catch(SoapFault $soapfault){
    echo "<pre>\n";
    var_dump($soapfault);
    echo "</pre>\n";
}

以下は私が得る応答です:

object(stdClass)#7 (1) {
  ["ExecuteCustomStoredProcedureGetResultsResult"]=>
  object(stdClass)#8 (2) {
    ["schema"]=>
    string(323) "<xs:schema xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="NewDataSet"><xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:UseCurrentLocale="true"><xs:complexType><xs:choice minOccurs="0" maxOccurs="unbounded"/></xs:complexType></xs:element></xs:schema>"
    ["any"]=>
    string(127) "<diffgr:diffgram xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1"/>"
  }
}


echo "Request:\n" . $client->__getLastRequest() . "<br />\n";

Request:

<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://www.maxhire.net/">
    <SOAP-ENV:Header>
        <ns1:AuthHeader>
            <ns1:DatabaseName>Name</ns1:DatabaseName>
            <ns1:SecurityKey>Key</ns1:SecurityKey>
        </ns1:AuthHeader>
    </SOAP-ENV:Header>
    <SOAP-ENV:Body>
        <ns1:ExecuteCustomStoredProcedureGetResults>
            <ns1:strProcName>JobPostings</ns1:strProcName>
        </ns1:ExecuteCustomStoredProcedureGetResults>
    </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

echo "Response:\n" . $client->__getLastResponse() . "<br />\n";

Response:

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <soap:Body>
        <ExecuteCustomStoredProcedureGetResultsResponse xmlns="http://www.maxhire.net/">
            <ExecuteCustomStoredProcedureGetResultsResult>
                <xs:schema id="NewDataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
                    <xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:UseCurrentLocale="true">
                        <xs:complexType>
                            <xs:choice minOccurs="0" maxOccurs="unbounded" />
                        </xs:complexType>
                    </xs:element>
                </xs:schema>
                <diffgr:diffgram xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1" />
            </ExecuteCustomStoredProcedureGetResultsResult>
        </ExecuteCustomStoredProcedureGetResultsResponse>
    </soap:Body>
</soap:Envelope>
4

0 に答える 0