如何使用 PHP Soap 类客户端进行 SoapCall

我正在尝试使用 PHP Soap Client 类在 PHP 中进行 SOAP 调用。我设法连接到 WDSL 文件,但它不接受我的参数。以下是此次通话所需的所有必要信息。当我输入以下内容时:


    $wsdlUrl = 'https://irm.cooperboating.com/rdpwincentralsvc/irmpublic.asmx?WSDL';

    $client = new SoapClient($wsdlUrl);

    var_dump($client->__getFunctions());

    var_dump($client->__getTypes());

我得到:


  // Output from getFunctions()

  [26]=>

  string(83) "GetCourseInformationResponse GetCourseInformation(GetCourseInformation $parameters)"


  // Output from getTypes()

  [117]=>

  string(63) "struct GetCourseInformation {

     GetCourseInformation_irmRQ RQ;

  }"

  [118]=>

  string(152) "struct GetCourseInformation_irmRQ {

     irmWebSvcCredentials Credentials;

     string CourseNumber;

     string CourseID;

     dateTime StartDate;

     dateTime EndDate;

  }"

  [4]=>

  string(104) "struct irmWebSvcCredentials {

     string LogonID;

     string Password;

     string DataPath;

     string DatabaseID;

  }"

在阅读了来自:如何使用 SoapClient 类进行 PHP SOAP 调用的答案后, 我尝试了以下操作:



class irmWebSvcCredentials {


    public function __construct() {

        $this->LogonID = "SomeLogin";

        $this->Password = "SomPass";

        $this->DataPath = "SomePath";

        $this->DatabaseID = "SomeId";

    }

}


try {


    $wsdlUrl = 'https://irm.cooperboating.com/rdpwincentralsvc/irmpublic.asmx?WSDL';

    $client = new SoapClient($wsdlUrl);

    $credentials = new irmWebSvcCredentials();

    $params = array(

        "Credentials" => $credentials,

        "CourseNumber" => "",

        "CourseID" => "",

        "StartDate" => "2019-12-05T18:13:00",

        "EndDate" => "2025-12-29T18:13:00",

    );


    $response = $client->GetCourseInformation(array($params));

    var_dump($response);


}

catch(Exception $e) {

    echo $e->getMessage();

}

我还尝试将“凭据”作为数组而不是类输入,因为其他一些答案建议如下:


当我调用 $client->GetCourseInformation 时,我为参数输入的内容似乎并不重要,只要我在数组结构中提供一个参数,它总是给我相同的输出,即:


使用 Postman,我已经能够获得预期的输出,这让我相信我没有提供某个参数。最后,这是我在 Postman 中提供的正文,以获取内容类型为 text/xml 的预期输出:


有什么我没有提供的吗?还是这个问题与 API 本身有关?


芜湖不芜
浏览 135回答 1
1回答

一只甜甜圈

这个问题已经解决了。答案在 Postman 提供的正文中。<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">&nbsp; <soap:Body>&nbsp; &nbsp; <GetCourseInformation xmlns="http://someurl.com/irmpublic">&nbsp; &nbsp; &nbsp; <RQ>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<----- Notice the RQ here&nbsp; &nbsp; &nbsp; &nbsp; <Credentials>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<LogonID>SomeLogin</LogonID>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<Password>SomPass</Password>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<DataPath>SomePath</DataPath>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<DatabaseID>SomeId</DatabaseID>&nbsp; &nbsp; &nbsp; &nbsp;</Credentials>&nbsp; &nbsp; &nbsp; &nbsp; <CourseNumber></CourseNumber>&nbsp; &nbsp; &nbsp; &nbsp; <CourseID></CourseID>&nbsp; &nbsp; &nbsp; &nbsp; <StartDate>2019-12-20T18:13:00</StartDate>&nbsp; &nbsp; &nbsp; &nbsp; <EndDate>2025-12-29T18:13:00</EndDate>&nbsp; &nbsp; &nbsp; </RQ>&nbsp; &nbsp; </GetCourseInformation>&nbsp; </soap:Body></soap:Envelope>从未提供过 RQ,因此它不知道如何读取提供的参数。要解决这个问题,我们只需要改变它:&nbsp; &nbsp; $params = array(&nbsp; &nbsp; &nbsp; &nbsp; "Credentials" => array(&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; "LogonID" => "SomeLogin",&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; "Password" => "SomPass",&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; "DataPath" => "SomePath",&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; "DatabaseID" => "SomeId",&nbsp; &nbsp; &nbsp; &nbsp; ),&nbsp; &nbsp; &nbsp; &nbsp; "CourseNumber" => "",&nbsp; &nbsp; &nbsp; &nbsp; "CourseID" => "",&nbsp; &nbsp; &nbsp; &nbsp; "StartDate" => "2019-12-05T18:13:00",&nbsp; &nbsp; &nbsp; &nbsp; "EndDate" => "2025-12-29T18:13:00",&nbsp; &nbsp; );对此:&nbsp; &nbsp; $params = array(&nbsp; &nbsp; &nbsp; &nbsp; "RQ" => array(&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; "Credentials" => array(&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; "LogonID" => "SomeLogin",&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; "Password" => "SomPass",&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; "DataPath" => "SomePath",&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; "DatabaseID" => "SomeId",&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ),&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; "CourseNumber" => "",&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; "CourseID" => "",&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; "StartDate" => "2019-12-05T18:13:00",&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; "EndDate" => "2025-12-29T18:13:00",&nbsp; &nbsp; &nbsp; &nbsp; )&nbsp; &nbsp; );这是一个非常具体的问题,但我希望这对将来的某人有所帮助。
打开App,查看更多内容
随时随地看视频慕课网APP