您如何使用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;
  }"

阅读以下答案后:How to make a PHP SOAP call using the SoapClient class 我尝试了以下操作:


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();
}

我还尝试将“凭据”作为数组而不是类输入,就像其他答案所建议的那样:

    $params = array(
        "Credentials" => array(
            "LogonID" => "SomeLogin","Password" => "SomPass","DataPath" => "SomePath","DatabaseID" => "SomeId",),);

当我调用$ client-> getcourseInformation时,输入什么参数似乎无关紧要,只要我在数组结构中提供参数,它始终会为我提供相同的输出,即:>

object(stdClass)#3 (1) {
  ["getcourseInformationResult"]=>
  object(stdClass)#4 (3) {
    ["Status"]=>
    int(1)
    ["ErrMsg"]=>
    string(47) "getcourseInformation_irmRQ is not instantiated."
...

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

<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/">
  <soap:Body>
    <getcourseInformation xmlns="http://someurl.com/irmpublic">
      <RQ>
        <Credentials>
         <LogonID>SomeLogin</LogonID>
         <Password>SomPass</Password>
         <DataPath>SomePath</DataPath>
         <DatabaseID>SomeId</DatabaseID>
       </Credentials>
        <CourseNumber></CourseNumber>
        <CourseID></CourseID>
        <StartDate>2019-12-20T18:13:00</StartDate>
        <EndDate>2025-12-29T18:13:00</EndDate>
      </RQ>
    </getcourseInformation>
  </soap:Body>
</soap:Envelope>

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

zidaneii 回答:您如何使用PHP Soap类客户端进行SoapCall

此问题已解决。答案就在邮递员提供的正文中。

<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/">
  <soap:Body>
    <GetCourseInformation xmlns="http://someurl.com/irmpublic">
      <RQ>           <----- Notice the RQ here
        <Credentials>
         <LogonID>SomeLogin</LogonID>
         <Password>SomPass</Password>
         <DataPath>SomePath</DataPath>
         <DatabaseID>SomeId</DatabaseID>
       </Credentials>
        <CourseNumber></CourseNumber>
        <CourseID></CourseID>
        <StartDate>2019-12-20T18:13:00</StartDate>
        <EndDate>2025-12-29T18:13:00</EndDate>
      </RQ>
    </GetCourseInformation>
  </soap:Body>
</soap:Envelope>

从来没有提供RQ,所以它不知道如何读取提供的参数。要解决此问题,我们只需更改以下内容即可:

    $params = array(
        "Credentials" => array(
            "LogonID" => "SomeLogin","Password" => "SomPass","DataPath" => "SomePath","DatabaseID" => "SomeId",),"CourseNumber" => "","CourseID" => "","StartDate" => "2019-12-05T18:13:00","EndDate" => "2025-12-29T18:13:00",);

对此:

    $params = array(
        "RQ" => array(
            "Credentials" => array(
                "LogonID" => "SomeLogin",)
    );

这是一个非常具体的问题,但我希望这对以后的人有所帮助。

本文链接:https://www.f2er.com/2960644.html

大家都在问