ChatGPT解决这个技术问题 Extra ChatGPT

SOAP request in PHP with CURL

Since the SOAP manual on php.net is not very noob friendly and I could not find any good examples I will post my question here.

How can I create PHP SOAP request to look like this?

POST /MySERVER/myWSDLservice.asmx HTTP/1.1
Host: connection.mywebsite.com
Content-Type: text/xml; charset=utf-8
Content-Length: length
SOAPAction: "http://connection.mywebsite.com/MySERVER/GetCarType"

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
 <soap:Body>
  <GetCarType xmlns="http://connection.mywebsite.com/MySERVER/">
    <IDNumber>string</IDNumber>
  </GetCarType>
 </soap:Body>
</soap:Envelope>

Please note:

there is user/pass auth

SSL connection

Any suggestion / links / example much appreciated.


s
sauhardnc

Tested and working!

with https, user & password // xmlns value to be set to your WSDL URL '.$dataFromTheForm.' '; // data from the form, e.g. some ID number $headers = array( "Content-type: text/xml;charset=\"utf-8\"", "Accept: text/xml", "Cache-Control: no-cache", "Pragma: no-cache", "SOAPAction: http://connecting.website.com/WSDL_Service/GetPrice", "Content-length: ".strlen($xml_post_string), ); //SOAPAction: your op URL $url = $soapUrl; // PHP cURL for https connection with auth $ch = curl_init(); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_USERPWD, $soapUser.":".$soapPassword); // username and password - declared at the top of the doc curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY); curl_setopt($ch, CURLOPT_TIMEOUT, 10); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $xml_post_string); // the SOAP request curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); // converting $response = curl_exec($ch); curl_close($ch); // converting $response1 = str_replace("","",$response); $response2 = str_replace("","",$response1); // convertingc to XML $parser = simplexml_load_string($response2); // user $parser to get your data out of XML response and to display it. ?>


The script works great and return XML SOAP response pastebin.com/9wzUV8Pw but I'm unable to parse the response into string, Any idea?
Without testing it the simplexml_load_string() cant handle the ":", right?
I'm trying to do consume a SOAP webservice using curl, but I only get an error that says "Unsupported Media Type". There is a way to force the Content-type header? When I set CURLOPT_POSTFIELDS the Content-type changes to "application/x-www-form-urlencoded".
I found the problem here! I'm writing the headers using associative array. I only noted that when read this answer: stackoverflow.com/a/11091261/1128918
This, as of February 2017, still works as intended and helps people when they got headache while working with SOAP. I'd only like to point out the fact that, some servers, requires a prefix (like <clin:price>) for the xml tags (you can see that when the response contains a message about an unidentified sub-element)