2017-10-10 318 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文件中指定的端点。