我是 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; }我期待来自服务器的响应,但收到此错误代码:元素上没有 id 属性http://schemas.xmlsoap.org/soap/envelope/:Body编辑:代码 wsse:InvalidSecurity
2 回答
Cats萌萌
TA贡献1805条经验 获得超9个赞
我相信应该有一个与您正在调用的 SOAP API 相关联的证书安全性(.pem 文件)。一旦您将证书路径与 SOAP 请求一起传递,它应该可以工作。
要在您的 SOAP 请求中添加证书,您只需要像下面的代码一样修改您的 SOAP 调用。
$client = new SoapClient( 'https://path-to-wsdl', array( 'trace' => 1, local_cert' => dirname(__FILE__) . '/certificatefile.pem'; ) );
Qyouu
TA贡献1786条经验 获得超11个赞
authHeader 可能不是 stdClass。尝试使用这个工具:
它将从您的 wsdl 文件中生成 PHP 类。使用这些类将更容易遵循如何构建请求的结构以及您需要发送的内容。
- 2 回答
- 0 关注
- 213 浏览
添加回答
举报
0/150
提交
取消