我是SOAP的新手,正在尝试使用PHP的内置SoapClient连接到SOAP服务器。我几天来一直收到此错误,找不到任何解决方案。
这是针对Linux服务器的。我尝试将SoapHeaders包含在时间戳中,并向请求中添加不同的参数,但仍然没有成功。
这是我的代码:
$params = array(
'X' => array(
'Y' => '0',
'Z' => '1',
'Q' => array(
'W' => array(
'E' => '1'
)
),
'R' => array(
'T' => 3,
'Y' => array(
'U' => 'x',
'I' => 'y'
)
),
'O' => array(
'P' => '2'
)
),
'A' => array(
'S' => array(
'D' => 'H',
'F' => 'J',
'G' => 'K'
)
)
);
$client = new SoapClient( 'https://path-to-wsdl', array( 'trace' => 1 ) );
$timestamp = gmdate("Y-m-d\TH:i:s\Z");
$timestamp_expires = gmdate("Y-m-d\TH:i:s\Z", strtotime( '+1 hour' ) );
$authHeader = new stdClass();
$authHeader->Timestamp->Created = $timestamp;
$authHeader->Timestamp->Expires = $timestamp_expires;
$Headers[] = new SoapHeader('http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd', 'Security', $authHeader,TRUE);
// $client->__setSoapHeaders($Headers);
try
{
$response = $client->SoapFunction( $params );
}
catch( SoapFault $fault )
{
echo 'Request : <br/><xmp>',
$client->__getLastRequest(),
'</xmp><br/><br/> Error Message : <br/>',
$fault->getMessage();
die;
}
我希望服务器响应,但是收到以下错误代码:
编辑:
代码wsse:InvalidSecurity
答案 0 :(得分:0)
我认为应该与您正在调用的SOAP API相关联的证书安全性(.pem文件)。一旦将该证书路径与SOAP请求一起传递,它就应该起作用。
要在SOAP请求中添加证书,您只需要像下面的代码一样修改SOAP调用即可。
$client = new SoapClient( 'https://path-to-wsdl', array( 'trace' => 1, local_cert' => dirname(__FILE__) . '/certificatefile.pem'; ) );
答案 1 :(得分:-1)
authHeader可能不同于stdClass。 尝试使用此工具:
它将从wsdl文件中生成PHP类。 使用这些类,可以更轻松地了解如何构建请求以及确切发送什么的结构。