我是 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 關注
- 242 瀏覽
添加回答
舉報
0/150
提交
取消