You are my last hope! I'm trying to implement DHL'S rating API to a website. They send to me the sample code, I tried it to the demo environment with demo credentials and it worked fine. Later they change the endpoint url and send to me the permanent credentials. After that I can't make it to work. I'm getting the following error:
SOAP Fault!
FaultCode: WSDL FaultString: SOAP-ERROR: Parsing WSDL: Couldn't load from ' https://wsbexpress.dhl.com:443/gbl/expressRateBook ' : failed to load external entity
My PHP code goes like this:
<?php
// The url of the service
$url='https://wsbexpress.dhl.com:443/gbl/expressRateBook';
// the soap operation which is called
$action='euExpressRateBook_providerServices_ShipmentHandlingServices_Binder_getRateRequest';
// the xml input of the service
$xmlrequest='<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:rat="http://scxgxtt.phx-dc.dhl.com/euExpressRateBook/RateMsgRequest">
<soapenv:Header>
<wsse:Security soapenv:mustunderstand="1" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
<wsse:UsernameToken wsu:id="UsernameToken-5" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<!-- ####Please use your test user credentials here#### -->
<wsse:Username>*************</wsse:Username>
<!-- ####Please use your test user credentials here#### -->
<wsse:Password type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">*************</wsse:Password>
<wsse:Nonce encodingtype="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary">eUYebYfsjztETJ4Urt8AJw==</wsse:Nonce>
<wsu:Created>2010-02-12T17:40:39.124Z</wsu:Created>
</wsse:UsernameToken>
</wsse:Security>
<soapenv:Header/>
<soapenv:Body>
<rat:RateRequest>
<RequestedShipment>
<DropOffType>REGULAR_PICKUP</DropOffType>
<Account>*********</Account>
<Currency>EUR</Currency>
<UnitOfMeasurement>SI</UnitOfMeasurement>
<Ship>
<Shipper>
<StreetLines>TEST SHIPPER</StreetLines>
<City>ALIMOS</City>
<PostalCode>174 55</PostalCode>
<CountryCode>GR</CountryCode>
</Shipper>
<Recipient>
<StreetLines>Main Street</StreetLines>
<City>GENEVA</City>
<PostalCode>1201</PostalCode>
<CountryCode>CH</CountryCode>
</Recipient>
</Ship>
<Packages>
<RequestedPackages number="1">
<Weight>
<Value>0.5</Value>
</Weight>
<Dimensions>
<Length>3</Length>
<Width>2</Width>
<Height>1</Height>
</Dimensions>
</RequestedPackages>
</Packages>
<ShipTimestamp>2015-12-28T00:01:00GMT+00:00</ShipTimestamp>
<Content>NON_DOCUMENTS</Content>
<PaymentInfo>DAP</PaymentInfo>
</RequestedShipment>
</rat:RateRequest>
</soapenv:Body>
</soapenv:Envelope>';
try {
// the soap client accepts options, we specify the soap version
// The trace option enables tracing of request so faults can be backtraced.
// The exceptions option is a boolean value defining whether soap errors throw exceptions of type SoapFault.
$options = array(
'soap_version'=>SOAP_1_1,
'exceptions'=>true,
'trace'=>1,
);
// create the soapclient and invoke __doRequest method
$client = new SoapClient($url, $options);
$output= $client->__doRequest($xmlrequest, $url, $action, 1);
}
catch (SoapFault $fault) {
echo "<h2>SOAP Fault!</h2><p>";
echo "FaultCode: {$fault->faultcode} <br/>";
echo "FaultString: {$fault->faultstring} <br/>";
echo("</p/>");
}
echo ("<h2>WSDL URL: </h2><p>");
echo ($url);
echo("</p/>");
echo ("<h2>Action: </h2><p>");
echo ($action);
echo("</p/>");
echo("<h2>XMLRequest: </h2><p>");
echo ($xmlrequest);
echo("</p/>");
if (!isset($output)) {
echo "<h2>SOAP Fault!</h2><p>";
echo "FaultCode: {$output->faultcode} <br/>";
echo "FaultString: {$output->faultstring} <br/>";
}else{
echo("<h2>Output: </h2><p>");
echo $output;
echo("</p/>");
}
?>
Where ********* my actual credentials. If I give as endpoint url
I'm getting as response the SOAP schema. Could you help to find out whats wrong and I'm no getting the right response?
Try to experiment with options like this:
$opts = array(
'ssl' => array(
'verify_peer' => false,
'verify_peer_name' => false,
'allow_self_signed' => true
)
);
$options = array (
'encoding' => 'UTF-8',
'verifypeer' => false,
'verifyhost' => false,
'soap_version' => SOAP_1_2,
'trace' => 1,
'exceptions' => 1,
'connection_timeout' => 180,
'stream_context' => stream_context_create($opts),
'cache_wsdl' => WSDL_CACHE_NONE,
//'compression' => SOAP_COMPRESSION_ACCEPT | SOAP_COMPRESSION_GZIP | 1
);
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.