2017-10-10 37 views
1

我試圖將我的腳本連接到SOAP客戶端。但是當我嘗試這樣做時會拋出提到的錯誤。當我試圖獲得與 $client->__getFunctions()功能。它顯示了所有的功能。當我嘗試打電話給他們時,它以致命錯誤結束。在消息「'上指定的SOAP操作與HTTP SOAP操作不匹配,

$client = new SoapClient("http://bsestarmfdemo.bseindia.com/MFOrderEntry/MFOrder.svc?singleWsdl",array(
    'soap_version' => SOAP_1_2, // !!!!!!! 
)); 
var_dump($client->__getFunctions()); 
//var_dump($client->__getTypes()); 

$login_params = array(
    'UserId' => 123456, 
    'Password' => 123456, 
    'PassKey' => 1234569870, 

); 

//$response = $client->getPassword($login_params); 
$response = $client->__soapCall('getPassword', array($login_params)); 
dd($response); 

,如果我的SOAP版本更改爲1.1,我得到另一個錯誤無法處理消息,因爲內容類型「文本/ XML的; charset = utf-8'不是預期的類型'application/soap + xml;字符集= UTF-8' 。如果我知道我在這裏失蹤的話,那將會很棒。

+0

你有沒有找到解決方案?我們遇到了同樣的問題。 – ReSpawN

+0

是的,我確實找到了解決辦法。在我的情況下,這個問題是它期望ws-addressing在我的情況下不發送。看看它。 @ReSpawN。肥皂版本中也可能不匹配。 –

回答

0

爲了解決@Naveen Kumar所做的回覆:這是我的解決方案。

// Apply WSA headers 
$action = new \SoapHeader('http://www.w3.org/2005/08/addressing', 'Action', self::ACTION_PREFIX.$this->action); 
$to = new \SoapHeader('http://www.w3.org/2005/08/addressing', 'To', $this->endpoint); 
$this->client()->__setSoapHeaders([$action, $to]); 

最後,$this->client只是返回的\SoapClient實例和動作包含完整URL方法。自然,To部分是可選的,但在我的情況下,它明顯指向.wsdl文件中指定的端點。