2016-02-24 56 views
-1

我是SOAP Web服務的新手,並試圖學習它們,我有一個在laravel框架中開發的項目,其中一個客戶端以SOAP消息的形式發送請求,怎麼做我解析SOAP請求並訪問請求中傳遞的變量以進一步處理?使用SOAP Web服務和訪問客戶端請求參數php

回答

1

要處理肥皂請求,您需要soap_client。

你可以做到這一點有3種方式,

1)使用PHP SoapClient()功能

<?php 

$wsdl = "https://<your_web_service_url>?wsdl"; 
$client = new SoapClient($wsdl, array('trace'=>1)); // The trace param will show you errors stack 

// web service input params 
$request_param = array(
    "param1" => $value1, 
    "param2" => $value2, 
    "param3" => $value3, 
    "param4" => $value4 
); 

try 
{ 
    $responce_param = $client->webservice_methode_name($request_param); 
    //$responce_param = $client->call("webservice_methode_name", $request_param); // Alternative way to call soap method 
} 
catch (Exception $e) 
{ 
    echo "<h2>Exception Error!</h2>"; 
    echo $e->getMessage(); 
} 

?>

2)的NuSOAP庫創建SOAP客戶端 的實例的NuSOAP庫檢查,
NuSoap Library and soap client Example

<?php 
require_once('lib/nusoap.php'); 

$wsdl = "http://<your_web_service_url>?wsdl"; 
$client = new nusoap_client($wsdl, 'wsdl'); 

// Input params 
$username = "username"; 
$password = "pass"; 

// In this demo, we use json data , you can use any other data format for same 
$json  = '{"param1":"value1","param2":"value2"}'; 

$client->setCredentials($username, $password); 
$error = $client->getError(); 

if ($error) 
{ 
    echo $error; die(); 
} 

$action = "webservice_methode_name"; // webservice method name 

$result = array(); 

if (isset($action)) 
{ 
    $result['response'] = $client->call($action, $json); 
} 

echo "<h3>Output : </h3>"; 
echo $result['response']; 
echo "<h2>Request</h2>"; 
echo "<pre>" . htmlspecialchars($client->request, ENT_QUOTES) . "</pre>"; 
echo "<h2>Response</h2>"; 
echo "<pre>" . htmlspecialchars($client->response, ENT_QUOTES) . "</pre>"; 

?>

3)使用捲曲可以調用皁web服務

<?php 
$webservice_url = "https://<your_web_service_url>"; 

$request_param = array(
        "param1" => $value1, 
        "param2" => $value2, 
        "param3" => $value3, 
        "param4" => $value4 
       ); 

$ch = curl_init($webservice_url); 
curl_setopt ($ch, CURLOPT_POST, 1); 
curl_setopt ($ch, CURLOPT_POSTFIELDS, $request_param); 
//curl_setopt ($ch, CURLOPT_TIMEOUT, 120); 
// time allowed to connect to server 
curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,30); 
// time allowed to process curl call 
curl_setopt($ch,CURLOPT_TIMEOUT,120); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 0); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_VERBOSE, true); 
$verbose = fopen('php://temp', 'w+'); 
curl_setopt($ch, CURLOPT_STDERR, $verbose); 
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); 
curl_setopt($ch, CURLOPT_USERPWD, "<username>:<password>"); 

/* ** Alternative way to set username and password ** */ 
//$headers = array(
// 'Content-Type:application/xml', 
// 'Authorization: Basic '. base64_encode("<username>:<password>") 
//); 
//curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); 

curl_setopt($ch, CURLOPT_SSLVERSION,3); 

$data = curl_exec ($ch); 

$result = $data; 

if ($result === FALSE) { 
    printf("cUrl error (#%d): %s<br>\n", curl_errno($ch), 
    htmlspecialchars(curl_error($ch))); 
} 

curl_close ($ch); 
echo "Responce : ".$data; 

?>

在PARAMS我看你傳遞
+0

是那些在請求被髮送的請求參數? – sam

+0

以及如何從Web服務請求打印出參數 – sam

+0

是,第一種方法(使用SoapClient()方法)「$ request_param」是實際的Web服務請求參數。 – StarSagar