在消息上指定的SOAP操作''与HTTP SOAP Action不匹配,

时间:2017-10-10 13:29:43

标签: php web-services soap

我正在尝试将我的脚本连接到SOAP客户端。但是当我尝试这样做时会引发上述错误。当我试图获得该功能 $client->__getFunctions()。它显示了所有功能。当我试图打电话给他们时,它以致命的错误告终。

$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我会收到另一个错误无法处理该消息,因为内容类型为#text; xml;字符集= UTF-8'不是预期的类型&application; / soap + xml; charset = utf-8'。如果我知道我在这里缺少什么,那就太棒了。

1 个答案:

答案 0 :(得分: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文件中指定的端点。