php呼叫webservice的幾種方法

傑克.陳發表於2016-07-04
原文:php呼叫webservice的幾種方法

1.WSDL模式:

extension = php_soap.dll

extension = php_curl.dll

extension = php_openssl.dll

 

 

<?php

header("content-type:text/html;charset=utf-8");

$client = new SoapClient("http://url/ooxx.asmx?wsdl");

$param = array(`引數`=>`值`,`引數`=>`值`);

$p = $client->__soapCall(`呼叫方法名`,array(`parameters` => $param));

print_r($p->呼叫方法名Result);

?>

$soap = new SoapClient("http://192.168.6.69:8899/Service1.asmx?wsdl");
$result2 = $soap->HelloWorld(array(
	`myName`=>`aaa`,
	`youName`=>`bbb`
));
print_r($result2);


 2.non-WSDL模式:

2.1使用SoapParam傳遞引數:
$soap = new SoapClient(null,array(`location`=>`http://192.168.6.72:8036/Service1.asmx`,`uri`=>`http://tempuri.org/`));
$result2 = $soap->__soapCall("HelloWorld",
array(new SoapParam("aaa", "myName"),new SoapParam("bbb", "youName")),
//array(new SoapParam("aaa", "ns1:myName"),new SoapParam("bbb", "ns1:youName")),
array(`soapaction`=>`http://tempuri.org/HelloWorld`));
print_r($result2);	

2.2使用SoapVar傳遞引數
$ns = `http://tempuri.org/`;
$soap = new SoapClient(null,array(`location`=>`http://192.168.6.72:8036/Service1.asmx`,`uri`=>$ns));
$result2 = $soap->__soapCall("HelloWorld",
array(new SoapVar("AAA", XSD_STRING, null, $ns, "myName", $ns),
new SoapVar("GBBB", XSD_STRING, null, $ns, "youName", $ns)),
array(`soapaction`=>`http://tempuri.org/HelloWorld`));
print_r($result2);




3.新增安全Header
$soap = new SoapClient(null,array(`location`=>`http://192.168.6.47/onvif/device_service`,`uri`=>`http://www.onvif.org/ver10/device/wsdl/`));
//ws
$ns_wsse = "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd";//WS-Security namespace
$ns_wsu = "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd";//WS-Security namespace

$userT = new SoapVar(`admin`, XSD_STRING, NULL, $ns_wsse, NULL, $ns_wsse);
$passwT = new SoapVar(`NnYZe7oD81Kd8QRS4tUMze/2CUs=`, XSD_STRING, NULL, $ns_wsse, NULL, $ns_wsse);
$createdT = new SoapVar(time(), XSD_DATETIME, NULL, $ns_wsu, NULL, $ns_wsu);
class UsernameT1 {
private $Username; 
//Name must be  identical to corresponding XML tag in SOAP header
private $Password; 
// Name must be  identical to corresponding XML tag in SOAP header 
private $Created;
  function __construct($username, $password, $created) {
	     $this->Username=$username;
	     $this->Password=$password;
	     $this->Created=$created;
    }
}
$tmp = new UsernameT1($userT, $passwT, $createdT);
$uuT = new SoapVar($tmp, SOAP_ENC_OBJECT, NULL, 
$ns_wsse, `UsernameToken`, $ns_wsse);

class UserNameT2 {
private $UsernameToken;  
//Name must be  identical to corresponding XML tag in SOAP header
function __construct ($innerVal){
	$this->UsernameToken = $innerVal;
}
}
$tmp = new UsernameT2($uuT);
$userToken = new SoapVar($tmp, SOAP_ENC_OBJECT, NULL, $ns_wsse, `UsernameToken`, $ns_wsse);

$secHeaderValue=new SoapVar($userToken, SOAP_ENC_OBJECT, NULL, 
                                        $ns_wsse, `Security`, $ns_wsse);
$secHeader = new SoapHeader($ns_wsse, `Security`, $secHeaderValue);
$result2 = $soap->__soapCall("GetDeviceInformation",array(),null,$secHeader);
echo $result2;

 


相關文章