PHP的WSDL客户端问题

时间:2010-12-12 22:44:24

标签: php web-services soap wsdl client

我想将以下XML请求发送到WSDL Web服务:


<?xml version="1.0" encoding="utf-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Header>
<wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
<wsse:UsernameToken xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" wsu:Id="UsernameToken-'.$nonce.'">
<wsse:Username>xxxxx</wsse:Username>
<wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">xxxxx</wsse:Password>
</wsse:UsernameToken>
<wsu:Timestamp wsu:Id="Timestamp-'.$nonce.'" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"> 
<wsu:Created>'.$timestamp.'</wsu:Created>
<wsu:Expires>'.$expiration.'</wsu:Expires> 
</wsu:Timestamp>
</wsse:Security>
</soapenv:Header>
<soapenv:Body>
<prep:requestListeSeancesCtrlAcces>
     <codeManifestation>xxxx</codeManifestation>
     <!--Optional:-->
     <debutIntervalle/>
     <!--Optional:-->
     <finIntervalle/>
  </prep:requestListeSeancesCtrlAcces>
</soapenv:Body>
</soap:Envelope>

我该怎么做?我尝试了PHP soap扩展以及NuSOAP但没有成功:(

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

您是否尝试过HttpRequest :: send?例如。请参阅http://www.php.net/manual/en/function.httprequest-send.php#95734上的示例并填写您自己的数据:

<?php
//set up variables
$theData = '<?xml version="1.0" encoding="utf-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Header>
<wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
<wsse:UsernameToken xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" wsu:Id="UsernameToken-'.$nonce.'">
<wsse:Username>xxxxx</wsse:Username>
<wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">xxxxx</wsse:Password>
</wsse:UsernameToken>
<wsu:Timestamp wsu:Id="Timestamp-'.$nonce.'" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"> 
<wsu:Created>'.$timestamp.'</wsu:Created>
<wsu:Expires>'.$expiration.'</wsu:Expires> 
</wsu:Timestamp>
</wsse:Security>
</soapenv:Header>
<soapenv:Body>
<prep:requestListeSeancesCtrlAcces>
     <codeManifestation>xxxx</codeManifestation>
     <!--Optional:-->
     <debutIntervalle/>
     <!--Optional:-->
     <finIntervalle/>
  </prep:requestListeSeancesCtrlAcces>
</soapenv:Body>
</soap:Envelope>';

$url = 'http://www.example.com';
$options = array();

//create the httprequest object                
$httpRequest_OBJ = new httpRequest($url, HTTP_METH_POST, $options);
//add the content type
$httpRequest_OBJ->setContentType = 'Content-Type: text/xml';
//add the raw post data
$httpRequest_OBJ->setRawPostData ($theData);
//send the http request
$result = $httpRequest_OBJ->send();
//print out the result
echo "<pre>"; print_r($result); echo "</pre>";
?>

答案 1 :(得分:0)

当我使用wsdl时,我使用cURL

用于修改标题和信封使用此: curl_setopt($ CH,CURLOPT_HTTPHEADER,$头); curl_setopt($ ch,CURLOPT_POSTFIELDS,$ soapenvelope);