[英]Trying to post a data to a SOAP method via PHP
我有一个基于SOAP协议的Web服务。 SOAP提供了一种方法Add,该方法将OO对象变量作为输入。
我正在尝试将数据添加到他们的服务中。 这是代码:
// this classes create a structure for WSSE security headers
class clsWSSEAuth
{
private $Username;
private $Password;
function __construct($u, $p)
{
$this->Username = $u;
$this->Password = $p;
}
}
class clsWSSEToken
{
private $UsernameToken;
function __construct($i)
{
$this->UsernameToken=$i;
}
}
$params = array('trace' => true);
$user = 'xxxxxx';
$pass = base64_encode(sha1('yyyyy', true)); //sha1 is sth like mdf - it codes the pass
$wssens = 'http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd'; //namespace
$soapVarUser = new SoapVar ($user, XSD_STRING, NULL, $wssens, NULL, $wssens);
$soapVarPass = new SoapVar ($pass, XSD_STRING, NULL, $wssens, NULL, $wssens);
//PREPARATION OF VARIABLE FO USER AND PASS - END
//Create Object for Auth Class and pass in soap var
$wsseAuth = new clsWSSEAuth ($soapVarUser, $soapVarPass);
//Create SoapVar out of object of Auth class
$soapVarAuth = new SoapVar ($wsseAuth, SOAP_ENC_OBJECT, NULL, $wssens, 'UsernameToken', $wssens);
//Create object for Token Class
$wsseToken = new clsWSSEToken ($soapVarAuth);
//Create SoapVar out of object of Token class
$soapVarToken = new SoapVar ($wsseToken, SOAP_ENC_OBJECT, NULL, $wssens, 'UsernameToken', $wssens);
//Create SoapVar for 'Security' node
$soapHeader = new SoapVar ($soapVarToken, SOAP_ENC_OBJECT, NULL, $wssens, 'Security', $wssens);
//Create header object out of security soapvar
$header = new SoapHeader($wssens, 'Security', $soapHeader, true, 'htpp://abce.com');
//Create object of Soap Client
$client = new SoapClient('https://xxxxxx.support.xxxxxxx.pl:8443/webservices/LAB/LabResultsManagerEP?wsdl', $params);
//Set headers for soapclient object
$client->__setSoapHeaders($header);
//definition of example object
class CreateOrderResultListVO {
public $ord;
function CreateOrderResultListVO(){
//and some other stuff here too
$this -> ord = $any_structure_of_objects_maching_required_fields;
}
}
$test = new CreateOrderResultListVO(); //this is preety much any php OO object
try
{
$id=$client->add($test -> ord);
} catch (Exception $e) { echo "error in add method: <pre>"; var_dump($e);echo "</pre>"; }
用Java编写的客户端可以正常工作。 C#中的Client也是如此。 但是据我所知,我是第一个尝试用PHP做到这一点的人。
实际上,传递给方法Add的对象的结构很复杂(它与不是那么小的xml文件匹配),但是显然这不是问题。
我收到var_dump错误:整个对象结构+这样:
["faultstring"]=>
string(23) "VO object can't be null"
["faultcode"]=>
string(10) "env:Server"
["detail"]=>
object(stdClass)#19 (1) {
["ErlabException"]=>
object(stdClass)#20 (2) {
["code"]=>
string(10) "WRONG_DATA"
["message"]=>
string(23) "VO object can't be null"
}
}
这意味着(我认为)肥皂连接是可以的(我在get_data方法中具有相同的连接并且可以正常工作)但由于某种原因,方法添加对发送的日期不执行任何操作,就像它没有看到吗?
我真的很乐意提供任何帮助。 如何处理此问题,或者至少如何查找错误之处?
编辑:希望有帮助:我安装了Fiddler,以便侦听从我的PC发送到Internet的内容。 我已经配置了Firefox来使用它。 我所得到的只是浏览器中显示的php网页的内容。 除了由SOAP Add方法生成的xml,c#和Jave客户端什么都不显示。 我完全确定php与SOap webserwice连接正常(除非我得到的错误不是Soap Add错误,而是Soap serwer错误),所以我不明白为什么Fiddler什么也不显示。
没人知道吗? :)好的,就在这里,而不是使用标准的functon调用:
$args = array('soap_parameter_name' => $xml_objects);
$id = $client->__soapCall('add', array('parameters' => $args));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.