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();
}
如果有任何问题,请不要犹豫在这里问他们,我很乐意提供帮助,因为我在解决这个问题时遇到了这样的问题。
我从客户端连接到 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();
}
如果有任何问题,请不要犹豫在这里问他们,我很乐意提供帮助,因为我在解决这个问题时遇到了这样的问题。