I am trying to send a XML script to a webserver to retrieve an authentication token, i would like some help with that. At the moment with my code i think it is connecting but it returns only the wsdl file in text format on the screen.
I would like to receive the autentication token.
My code:
<?php
$xml_data = '
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:ns="http://dpd.com/common/service/types/LoginService/2.0">
<soapenv:Header/>
<soapenv:Body>
<ns:getAuth>
<delisId>id</delisId>
<password>password</password>
<messageLanguage>nl_NL</messageLanguage>
</ns:getAuth>
</soapenv:Body>
<soapenv:Envelope>
';
$headers = array(
"POST HTTP/1.1",
"Host: hostname",
"Content-type: application/soap+xml; charset=\"utf-8\"",
"SOAPAction: \"http://dpd.com/common/service/LoginService/2.0/getAuth\"",
"Content-length: ".strlen($xml_data)
);
$url = 'https://public-ws-stage.dpd.com/services/LoginService/V2_0/?wsdl';
$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_POSTFIELDS, "$xml_data");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$output = curl_exec($ch);
$err = curl_error($ch);
print_r($output);
print_r($err);
curl_close($ch);
?>
The WSDL file is in the link below:
https://public-ws-stage.dpd.com/services/LoginService/V2_0/?wsdl
Here you go, works a treat:
$xml_data = '
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:ns="http://dpd.com/common/service/types/LoginService/2.0">
<soapenv:Header/>
<soapenv:Body>
<ns:getAuth>
<delisId>id</delisId>
<password>password</password>
<messageLanguage>nl_NL</messageLanguage>
</ns:getAuth>
</soapenv:Body>
<soapenv:Envelope>
';
$headers = array(
"POST HTTP/1.1",
"Host: hostname",
"Content-type: application/soap+xml; charset=\"utf-8\"",
"SOAPAction: \"http://dpd.com/common/service/LoginService/2.0/getAuth\"",
"Content-length: ".strlen($xml_data)
);
$url = 'https://public-ws-stage.dpd.com/services/LoginService/V2_0/?wsdl';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); //Don't verify ssl certificate
curl_setopt($ch, CURLOPT_POSTFIELDS, $xml_data);
$reply = curl_exec($ch);
// Represents an element in an XML document.
$xmli = new SimpleXMLElement($reply);
// prints the XML response
print_r($reply);
// prints the XML object
print_r($xmli);
I've included the SimpleXMLElement class incase you wanted to access the response data as an object.
Related
in one of my projects i need to send SOAP request to remote servers. For doing so i am using below script (using CURL). For some reason i am not getting any response if i ran below script.
If i try sending requests via SOAP UI, all works just like it should be. When replicating functionality in php, i get no response at all and not able to identify what the problem is.
public function sendRequestAction ($cntiin) {
$userid = 'XXXXX';
$clientid = 'YYYYY';
$password = 'Test_Test';
$urltest = 'https://y.fake.url/testServices/PersonDetailsImplService';
//variable defenition
$identifier = '700521700054';
$xml_post_string = '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:data="http://data.fake.url.test.net">
<soapenv:Header>
<userId>3d4f80d7</userId>
</soapenv:Header>
<soapenv:Body>
<data:getPerson>
<!--Optional:-->
<iin>' . $identifier . '</iin>
<!--Optional:-->
<consentConfirmed>true</consentConfirmed>
</data:getPerson>
</soapenv:Body>
</soapenv:Envelope>';
$headers = array(
"Content-type: text/xml;charset=\"utf-8\"",
"Accept: text/xml",
"Cache-Control: no-cache",
"Pragma: no-cache",
"SOAPAction: https://y.fake.url/gbdServices/PersonDetailsImplService",
"Content-length: ".strlen($xml_post_string),
); //SOAPAction: your op URL
// PHP cURL for https connection with auth
$url = $urltest .'?wsdl';
$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_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_USERPWD, $clientid.":".$password); // 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);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$response = curl_exec($ch);
$code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
print_r($response);
}
When sending requests via SOAP UI there is Basic Auth with login and password, which i believe is accounted for above. Still no results
I went thruogh numerous articles including:
this one and this one and many others but still not sure why not working, so any feedback will be highly appriciated.
I have given a task of posting a payment using Barclays SOAP API Payments. After reading the document, they are giving a TEST url for the soap request and also test Credit Card Number. I have used below but it is not doing NOTHING. No response or NOTHING is received at all.
$requestXML = "<?xml version='1.0'?>
<soap:Envelope xmlns:soap='http://schemas.xmlsoap.org/soap/envelope/'
xmlns:xsd='http://www.w3.org/2001/XMLSchema'
xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'>
<soap:Body>
<ns1:authorise xmlns:ns1='http://payment.services.adyen.com'>
<ns1:paymentRequest>
<amount xmlns='http://payment.services.adyen.com'>
<currency xmlns='http://common.services.adyen.com'>GBP</currency>
<value xmlns='http://common.services.adyen.com'>67</value>
</amount>
<card xmlns='http://payment.services.adyen.com'>
<cvc304</cvc>
<expiryMonth>03</expiryMonth>
<expiryYear>2019</expiryYear>
<holderName>Owais</holderName>
<number>55554444333331111</number>
</card>
<merchantAccount xmlns='http://payment.services.adyen.com'>owaiskhan772</merchantAccount>
<reference xmlns='http://payment.services.adyen.com'>CPD-1232</reference>
<shopperEmail xmlns='http://payment.services.adyen.com'>owaiskhan772#gmail.com</shopperEmail>
<shopperReference xmlns='http://payment.services.adyen.com'>2843</shopperReference>
</ns1:paymentRequest>
</ns1:authorise>
</soap:Body>
</soap:Envelope>";
$soapUrl = "https://pal-test.barclaycardsmartpay.com/pal/servlet/soap/Payment"; // test url
$soapUser = ""; // username
$soapPassword = ""; // password
$headers = array(
"Content-type: text/xml;charset=\"utf-8\"",
"Accept: text/xml",
"Cache-Control: no-cache",
"Pragma: no-cache",
"SOAPAction: https://pal-test.barclaycardsmartpay.com/pal/servlet/soap/Payment",
"Content-length: ".strlen($requestXML),
); //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, $requestXML); // the SOAP request
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
// converting
$response = curl_exec($ch);
print_r($response);
curl_close($ch);
I AM NOT GETTING ANYTHING FROM IT. WHAT'S WRONG WITH IT. Thanks
Sorry if i am asking something that was already discussed here but all my combinations that i tryed are not working. I am not PHP developer but i am trying create PHP sample that will send request to my SOAP asp.net webservice and to echo the response.
I am trying to use the following PHP code:
$soapUrl = "https://test-api.xxxx.xx/reseller.asmx?op=loginXML";
$xml_post_string = '<?xml version="1.0" encoding="utf-8"?><soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope"><soap12:Body><loginXML xmlns="https://test-api.zemi.mk/"><acckey>adsdsad</acckey><password>pass</password></loginXML></soap12:Body></soap12:Envelope>';
$headers = array(
"POST /reseller.asmx HTTP/1.1",
"Host: test-api.*****.**",
"Content-Type: application/soap+xml; charset=utf-8",
"Content-Length: ".strlen($xml_post_string)
);
$url = $soapUrl;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $xml_post_string);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$response = curl_exec($ch);
curl_close($ch);
$response1 = str_replace("<soap:Body>","",$response);
$response2 = str_replace("</soap:Body>","",$response1);
$parser = simplexml_load_string($response2);
echo $parser;
But it does not work.
What i am seeing then i am trying to execute is:
$soapUrl = "https://test-api.++++.++/reseller.asmx?op=loginXML"; $xml_post_string = 'adsdsadpass'; $headers = array( "POST /reseller.asmx HTTP/1.1", "Host: test-api.++++.++", "Content-Type: application/soap+xml; charset=utf-8", "Content-Length: ".strlen($xml_post_string) ); $url = $soapUrl; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $xml_post_string); curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $response = curl_exec($ch); curl_close($ch); $response1 = str_replace("","",$response); $response2 = str_replace("","",$response1); $parser = simplexml_load_string($response2); echo $parser;
Can u help me what i am doing wrong.
Thanks
I am getting faultcode error with soap as per below while using soap request with php.
<soap:Body><soap:Fault><faultcode>soap:Client</faultcode><faultstring> 11|Session|</faultstring></soap:Fault></soap:Body>
Kindly suggest about this error.
I am using below code in PHP :
$request = '<soapenv:Envelope xmlns:soapenv="..>
<soapenv:Header xmlns:add="http://www.w3.org/2005/08/addressing">
<MessageID>...
<oas:Security xmlns:..">
<oas:UsernameToken oas1:Id="UsernameToken-1">
...
</oas:UsernameToken>
</oas:Security>
<awsse:Session TransactionStatusCode="Start" xmlns:awsse="http://xml.amadeus.com/2010/06/Session_v3"/>
</soapenv:Header>
<soapenv:Body>
....
</soapenv:Body>
</soapenv:Envelope>';
$soapaction = "..";
$url = "..";
$headers = array(
"Accept-Encoding: gzip,deflate",
"Content-Type: text/xml;charset=UTF-8",
"SOAPAction: $soapaction",
"Connection: Keep-Alive",
"Host: nodeD1.test.com",
"User-Agent: ".$_SERVER['HTTP_USER_AGENT'],
"Content-length: ".strlen($request)
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $request);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_ENCODING, 1);
curl_setopt($ch, CURLOPT_HEADER, false);
$response = curl_exec($ch);
I have tried with $client->__doRequest method with SoapClient class.
Usually this causes from authentication issue. The request which you constructed could not reach the resources on target because of incorrect authentication or header data. please try this it will work.
-You should check all parameters in <soapenv:Header>.
-Username in the UserToken might be missing or incorrect.
This is my first posting in Stackoverflow. Currently I got a new job, its an easy task, but as I'm a newbie it makes more hard to understand.
I wan't to do http post request, some code like :
POST / HTTP/1.1
Content-Type: text/xml;charset=UTF-8
SOAPAction: "Notification"
User-Agent: Jakarta Commons-HttpClient/3.1
Host: sample.com:8001
Content-Length: 201
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Body>
<LGI>
<OPNAME>user</OPNAME>
<PWD>password</PWD>
</LGI>
</soapenv:Body>
</soapenv:Envelope>
Here is the php code:
$soapUrl = "http://sample.com:8001";
$cookiefile = '/tmp/curl-session';
$xml_post_string = '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Body>
<LGI>
<OPNAME>user</OPNAME>
<PWD>pass</PWD>
</LGI>
</soapenv:Body>
</soapenv:Envelope>
';
echo($xml_post_string."\n");
$headers = array(
"POST / HTTP/1.1",
"Content-Type: text/xml;charset=UTF-8",
"SOAPAction: \"Notification\"",
"User-Agent: Jakarta Commons-HttpClient/3.1",
"Host: sample.com:8001",
"Content-Length: ".strlen($xml_post_string)
);
$url = $soapUrl;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $xml_post_string);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookiefile);
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookiefile);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FRESH_CONNECT, true);
curl_setopt($ch, CURLOPT_VERBOSE, 1);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
$response = curl_exec($ch);
echo("\n======================== login result ================================\n");
$header_size = curl_getinfo($ch, CURLINFO_HEADER_SIZE);
$header = substr($response, 0, $header_size);
$body = substr($response, $header_size);
echo("header:\n".$header."\n");
echo("body:\n".$body."\n");
//============= parsing header =====================
$id_t=explode("http://sample.com:8001",$header);
$id=$id_t[1];
echo("ID POST=".$id."\n");
From that I get a session id, and I want to send session maintain like:
POST /00500000 HTTP/1.1
Content-Type: text/xml;charset=UTF-8
SOAPAction: "Notification"
User-Agent: Jakarta Commons-HttpClient/3.1
Host: sample.com:8001
Content-Length: 0
where /00500000 is session ID.
How can I create php to maintain session?
Here is the rest code for maintaining session but failed with error 400, bad request:
//============= handshake session ==================
$xml_post_string = '';
$headers = array(
"Content-Type: text/xml;charset=UTF-8",
"SOAPAction: \"Notification\"",
"User-Agent: Jakarta Commons-HttpClient/3.1",
"Host: sample.com:8001",
"Content-Length: ".strlen($xml_post_string)
);
print_r($headers."\n");
$post = "POST ".$id." HTTP/1.1";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
//curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
//curl_setopt($ch, CURLOPT_POSTFIELDS, $xml_post_string);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $post);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_VERBOSE, 1);
curl_setopt($ch, CURLOPT_HEADER, 1);
$response = curl_exec($ch);
echo("\n======================== handshake result ================================\n");
//echo($response."\n");
$header_size = curl_getinfo($ch, CURLINFO_HEADER_SIZE);
$header = substr($response, 0, $header_size);
$cek = explode("Content-Length: 0",$header);
$c_cek = count($cek);
if ($c_cek > 1) {
$body = substr($response, $header_size);
echo("header:\n".$header."\n");
echo("body:\n".$body."\n");
}
else {
$body = substr($response, $header_size);
echo("header:\n".$header."\n");
echo("body:\n".$body."\n");
}