PHP SoapClient: action mismatch

I am trying to use the PHP SoapClient extension to communicate with an external SOAP server.

This is my code:

$this->_client = new SoapClient(SOAP_TAGGING_URL, array( 'trace' => 1, 'soap_version' => SOAP_1_2, 'cache_wsdl' => WSDL_CACHE_NONE, 'exceptions' => true, 'uri' => SOAP_URI, )); try { $actionHdr = array(); $actionHdr[] = new SoapHeader(SOAP_TAGGING_URL, 'Action', 'GetMessagesByTagsByGroup'); $this->_client->__setSoapHeaders($actionHdr); $info = $this->_client->GetMessagesByTagsByGroup( new SoapParam($this->params['mPID'], 'ParentMessageID'), new SoapParam($gid, 'GroupId'), new SoapParam(REQUEST_TOKEN, 'RequestToken'), new SoapParam(ACCESS_TOKEN, 'AccessToken'), new SoapParam(ACCESS_TOKEN_SECRET, 'AccessTokenSecret') ); } catch (SoapFault $fault) { print("\n<br/>SOAP server returned the following ERROR: ".$fault->faultcode."-".$fault->faultstring); } echo "\n<br/>SOAP request: ". htmlentities($this->_client->__getLastRequest()); echo "\n<br/>SOAP response: ". htmlentities($this->_client->__getLastResponse()); 

This is the answer I received (adding formatting):

  SOAP server returned the following ERROR: s:Sender-The SOAP action specified on the message, '', does not match the HTTP SOAP Action, 'http://tempuri.org/ITagging/GetMessagesByTagsByGroup'. SOAP request: <?xml version="1.0" encoding="UTF-8"?> <env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" xmlns:ns1="http://tempuri.org/" xmlns:ns2="https://mywebserver.com/myWSDL.svc/ws?wsdl"> <env:Header> <ns2:Action>GetMessagesByTagsByGroup</ns2:Action> </env:Header> <env:Body> <ns1:GetMessagesByTagsByGroup/> <GroupId>2178</GroupId> <RequestToken>odwedwo09i0jACqbbjsw6KnlCA=</RequestToken> <AccessToken>OlVbHurPJrNrEFR54Y0hV9kI/TZs=</AccessToken> <AccessTokenSecret>js1kerfe453FLuaXpL 892DY o=</AccessTokenSecret> </env:Body> </env:Envelope> SOAP response: <s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://www.w3.org/2005/08/addressing"> <s:Header> <a:Action s:mustUnderstand="1">http://www.w3.org/2005/08/addressing/fault</a:Action> </s:Header> <s:Body> <s:Fault> <s:Code> <s:Value>s:Sender</s:Value> <s:Subcode> <s:Value>a:ActionMismatch</s:Value> </s:Subcode> </s:Code> <s:Reason> <s:Text xml:lang="en-US">The SOAP action specified on the message, '', does not match the HTTP SOAP Action, 'http://tempuri.org/ITagging/GetMessagesByTagsByGroup'. </s:Text> </s:Reason> <s:Detail> <a:ProblemHeaderQName>a:Action</a:ProblemHeaderQName> </s:Detail> </s:Fault> </s:Body> </s:Envelope> 

I thought I added the "Action" parameter to the header, but this is clearly not the place. Or am I doing something else wrong?

Unfortunately, I cannot try NuSoap because I do not have control over the server.

Thanks,

g

+4
source share
2 answers

This means that not only you must specify the SOAPAction HTTP header: "http://www.bla.com:MyAction"

but you also need to specify the SOAP Envelope header: Check these links for some links: SOAP ACTION

+2
source

You pass it as a SoapHeader, but it's actually an HTTP header.

As I found, this is: http://lt.php.net/manual/en/soapclient.dorequest.php by setting the $ action parameter.

You probably need to extend the SoapClient class to do this using fewer lines of code.

+1
source

Source: https://habr.com/ru/post/1387479/


All Articles