2011-08-19 50 views
55

Vì hướng dẫn SOAP trên php.net không thân thiện với người dùng và tôi không thể tìm thấy bất kỳ ví dụ hay nào, tôi sẽ đăng câu hỏi của tôi ở đây.Yêu cầu SOAP bằng PHP với CURL

Tôi làm cách nào để tạo yêu cầu SOAP PHP giống như thế này?

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> 

Xin lưu ý:

  • có user/pass auth
  • kết nối SSL

Bất kỳ đề nghị/liên kết/example nhiều đánh giá cao.

+1

[PHP :: SOAP] (http://php.net/manual/en/book.soap.php) – J0HN

+0

[ Lớp SoapClient] (http://www.php.net/manual/en/class.soapclient.php) – hakre

Trả lời

128

Đã kiểm tra và làm việc!

  • với https, sử dụng mật khẩu &

     <?php 
         //Data, connection, auth 
         $dataFromTheForm = $_POST['fieldName']; // request data from the form 
         $soapUrl = "https://connecting.website.com/soap.asmx?op=DoSomething"; // asmx URL of WSDL 
         $soapUser = "username"; // username 
         $soapPassword = "password"; // password 
    
         // xml post structure 
    
         $xml_post_string = '<?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> 
               <GetItemPrice xmlns="http://connecting.website.com/WSDL_Service"> // xmlns value to be set to your's WSDL URL 
                <PRICE>'.$dataFromTheForm.'</PRICE> 
               </GetItemPrice > 
               </soap:Body> 
              </soap:Envelope>'; // 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("<soap:Body>","",$response); 
          $response2 = str_replace("</soap:Body>","",$response1); 
    
          // convertingc to XML 
          $parser = simplexml_load_string($response2); 
          // user $parser to get your data out of XML response and to display it. 
        ?> 
    
+0

Điều đó làm việc như một sự quyến rũ đối với tôi. Cảm ơn Amit. – wsams

+0

Kịch bản này thực sự hữu ích đối với tôi .. Tôi tiết kiệm rất nhiều thời gian của mình .. – Pank

+0

Kịch bản hoạt động tốt và trả về phản hồi SOAP XML pastebin.com/9wzUV8Pw nhưng tôi không thể phân tích cú pháp phản hồi thành chuỗi, Bất kỳ ý tưởng nào? –

Các vấn đề liên quan