在消息“'上指定的SOAP操作与HTTP SOAP操作不匹配,
问题描述:
我试图将我的脚本连接到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' 。如果我知道我在这里失踪的话,那将会很棒。
答
为了解决@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
文件中指定的端点。
你有没有找到解决方案?我们遇到了同样的问题。 – ReSpawN
是的,我确实找到了解决办法。在我的情况下,这个问题是它期望ws-addressing在我的情况下不发送。看看它。 @ReSpawN。肥皂版本中也可能不匹配。 –