PHP and SOAP integration


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参数和一个"对象"(基本上是一个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)"answers"application(object)"调用AddApplication函数。

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

如果一切顺利,数据将存储在外部服务器上,您将收到"成功"消息。即使没有进入SoapFault,也有可能收到"失败"。一定要记录"$result"answers"$ex",因为SOAP服务可以返回"Fail",但try-catch将其视为格式良好的结果。

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

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

如果有任何问题,请不要犹豫,在这里问他们,我很乐意帮助你,因为我有这样的问题想办法解决。