PHP soapClient send custom XML
php, soap, xml
Solution
There is nothing like make an question to find the answer. I extended the SoapClient class and, in this way, I send the correct XML. That's the code:
/**
* Extend SoapClientClass
*/
class anotherSoapClient extends SoapClient {
function __construct($wsdl, $options) {
parent::__construct($wsdl, $options);
$this->server = new SoapServer($wsdl, $options);
}
public function __doRequest($request, $location, $action, $version) {
$result = parent::__doRequest($request, $location, $action, $version);
return $result;
}
function __anotherRequest($call, $params) {
$location = 'http://localhost:8090/mockCustomerManagementSoapHttpBinding';
$action = 'http://localhost:8090/mockCustomerManagementSoapHttpBinding/'.$call;
$request = $params;
$result =$this->__doRequest($request, $location, $action, '1');
return $result;
}
}
// Create new SOAP client
$wsdl = 'http://localhost:8090/mockCustomerManagementSoapHttpBinding?WSDL';
$client = new anotherSoapClient($wsdl, array(
'cache_wsdl' => WSDL_CACHE_NONE,
'cache_ttl' => 86400,
'trace' => true,
'exceptions' => true,
));
// Make the request
try {
$request = $client->__anotherRequest('getCustomerInfo', $XMLrequest);
} catch (SoapFault $e ){
echo "Last request:<pre>" . htmlentities($client->__getLastRequest()) . "</pre>";
exit();
}
header('Content-type: text/xml');
echo $request;
I use the free version of SOAP_UI to test the response.
Problem
I'm trying to make a SOAP request using soapClient class from PHP that's my code: ``` $xmlstr = <<<XML <?xml version="1.0" encoding="UTF-8"?> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:typ="http://localhost:8090/mockCustomerManagement/types"> <soapenv:Header> <typ:customerManagementHeader> <typ:userId>42</typ:userId> <typ:requestId>1500</typ:requestId> <typ:messageTimestamp>2013-09-25T14:31:21+00:00</typ:messageTimestamp> </typ:customerManagementHeader> </soapenv:Header> <soapenv:Body> <typ:getCustomerInfoData> <useremail>sargentoarensivia@nobody.es</useremail> </typ:getCustomerInfoData> </soapenv:Body> </soapenv:Envelope> XML; $wsdl = 'http://localhost:8090/mockCustomerManagementSoapHttpBinding?WSDL'; $client = new SoapClient($wsdl, array( 'cache_wsdl' => WSDL_CACHE_NONE, 'cache_ttl' => 86400, 'trace' => true, 'exceptions' => true, )); $xmlVar = new SoapVar($xmlstr, XSD_ANYXML); $client->getCustomerInfo($xmlstr); ``` But the request throw me an exception and when I ask the client for the last request, it shows some extra text at the begining and in the end of my XML, as you can see: ``` <?xml version="1.0" encoding="UTF-8"?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://localhost:8090/mockCustomerManagement/types"> <SOAP-ENV:Body> <?xml version="1.0" encoding="UTF-8"?> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:typ="http://localhost:8090/mockCustomerManagement/types"> <soapenv:Header> <typ:customerManagementHeader> <typ:userId>42</typ:userId> <typ:requestId>1500</typ:requestId> <typ:messageTimestamp>2013-09-25T14:31:21+00:00</typ:messageTimestamp> </typ:customerManagementHeader> </soapenv:Header> <soapenv:Body> <typ:getCustomerInfoData> <useremail>sargentoarensivia@nobody.es</useremail> </typ:getCustomerInfoData> </soapenv:Body> </soapenv:Envelope> </SOAP-ENV:Body> </SOAP-ENV:Envelope> ``` There are some way to delete/disable that extra text? In other words, is there a way to send only my XML?