PHP 和 SOAP 集成

PHP and SOAP integration

我从客户端连接到 SOAP 服务器并试图发回表单信息。

连接正常,但我不知道如何发回数据。我已收到文档 (-> http://s000.tinyupload.com/?file_id=89258359616332514672) 并卡在函数 AddApplication

这是我目前编写的 PHP 代码。目前还没有表单集成,只有虚拟数据。

    <?

    $client = new SoapClient(
        'https://wstest.hrweb.be/TvBastards/TvBastards/Job.svc?singleWsdl',
        array(
            'soap_version' => SOAP_1_1
        )
    );

    $params = array(
        'username' => 'XXX',
        'password' => 'XXX',
        'environmentKey' => 'XXX',
    );

    //Open session
    try{
        $token = $client->OpenSession($params);
    }catch(SoapFault $ex){
        echo "<pre>";
        print_r($ex->detail->ExceptionDetail);
        echo "</pre>";
    }

    //Add Application
    try{
        $resp = $client->AddApplication($params, ___THE_XML_SHOULD_BE_HERE___); // I have no idea how I can implement a XML file over here, and make this part work
    }catch(SoapFault $ex){
        echo "<pre>";
        print_r($ex->detail->ExceptionDetail);
        echo "</pre>";
    }

    //Close session
    try{
        $app = $client->CloseSession($token);
    }catch(SoapFault $ex){
        echo "<pre>";
        print_r($ex);
        echo "</pre>";      
    }`

我现在收到的错误如下:

End element 'Body' from namespace 'http://schemas.xmlsoap.org/soap/envelope/' expected. Found element 'param1' from namespace ''. Line 2, position 156.

这是可以理解的,因为我没有提供任何 XML。

我收到了我的令牌,因此 OpenSession 可以完美运行。如前所述,我完全陷入了 AddApplication 功能。这是我第一次接触 SOAP 服务,所以非常感谢每一个可能的解释。

已修复,希望对其他人有所帮助。我会尝试将其分解。

define('SIM_LOGIN', 'LOGIN NAME HERE');
define('SIM_PASSWORD', 'LOGIN PASSWORD HERE');
define('ENV_KEY', 'ENVIRONMENT KEY HERE');

/*** login parameters ***/
$params = array(
  'username' => SIM_LOGIN,
  'password' => SIM_PASSWORD,
  'environmentKey' => ENV_KEY,
);

/*** Set up client ***/
$client = new SoapClient(
  __SOAP URL HERE__,
  array(
    'soap_version' => SOAP_1_1
  )
);

设置参数并连接到客户端后,我们就可以开始调用SOAP服务中的函数了。每个 SOAP 服务都不同,因此函数名称和参数可能不同。在下面的示例中,我需要打开一个会话来检索令牌。此令牌用于所有其他功能,因此此功能是必需的。如果出现问题,我会调用 "abort()" 函数。

try{
  $token = $client->OpenSession($params);
}catch(SoapFault $ex){
  abort();
}

如果收到令牌,我将调用函数 AddApplication。这需要 token 参数和一个 "object" (基本上是一个 STDClass)。

我用我的所有数据创建了一个 stdClass:

/*** Create stdClass with requested data ***/
$std = new stdClass();

$std->Firstname           = $firstname;
$std->Lastname            = $lastname;
$std->Birthdate           = $birthdate;
$std->Phone               = $phone;
$std->Email               = $email;

一定要检查名称或大写字母的驼峰式大小写,因为这会产生很大的不同。

现在我们调用带有参数 "token(string)" 和 "application(object)" 的 AddApplication 函数。

/*** AddApplication ***/
try{
  $result = $client->AddApplication(array("token" => $token, "application" => $std));
}catch(SoapFault $ex){
    abort();
}

如果一切顺利,数据将存储在外部服务器上,您会收到 "success" 消息。即使没有进入 SoapFault,您也可能会收到 "fail"。请务必记录“$result”和“$ex”,因为 SOAP 服务可以 return 和 "Fail" 但 try-catch 将其视为格式正确的结果。

最后要做的是关闭会话(并销毁令牌)

/*** CloseSession ***/
try{
  $app = $client->CloseSession($token);
}catch(SoapFault $ex){
  abort();
}

如果有任何问题,请不要犹豫在这里问他们,我很乐意提供帮助,因为我在解决这个问题时遇到了这样的问题。