亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

SoapFault:元素 http://schemas.xmlsoap.org/soap/

SoapFault:元素 http://schemas.xmlsoap.org/soap/

PHP
jeck貓 2021-12-24 16:09:15
我是 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'; ) );


查看完整回答
反對 回復 2021-12-24
?
Qyouu

TA貢獻1786條經驗 獲得超11個贊

authHeader 可能不是 stdClass。嘗試使用這個工具:

https://github.com/wsdl2phpgenerator/wsdl2phpgenerator

它將從您的 wsdl 文件中生成 PHP 類。使用這些類將更容易遵循如何構建請求的結構以及您需要發送的內容。


查看完整回答
反對 回復 2021-12-24
  • 2 回答
  • 0 關注
  • 242 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號