I\'ve made several scripts working with external WSDL. I have encountered one I have to integrate into our system that I can\'t get to work. I\'be been trying for a week without
As of PHP 5.5.0, I believe you can do
$client = new SoapClient("https://webtjener09.kred.no/TestWebservice/OppdragServiceSoapHttpPort?WSDL", array(
'ssl_method' => SOAP_SSL_METHOD_SSLv3
));
Instead of creating a wrapper, can you try to add the following code fragments?
$stream_opts = array(
// 'ssl'=>array('ciphers'=>"3DES" // also working
// further ciphers on http://www.openssl.org/docs/apps/ciphers.html
'ssl'=>array('ciphers'=>"SHA1"
)
);
$myStreamContext = stream_context_create($stream_opts);
$soapOptions['stream_context'] = $myStreamContext;
$soapClient = new SoapAuthClient("https://...", $soapOptions);
Good luck!
Be careful if you use utf-8 charset.
This solution works well, but you must declare the charset in header Curl.
curl_setopt($handle, CURLOPT_HTTPHEADER, Array("Content-Type: text/xml; charset = utf-8", 'SOAPAction: "' . $action . '"')
I had the same problem, the following wrapper solved it (i had to force SSL2)
class StupidWrapperForOracleServer extends SoapClient {
protected function callCurl($url, $data, $action) {
$handle = curl_init();
curl_setopt($handle, CURLOPT_URL, $url);
curl_setopt($handle, CURLOPT_HTTPHEADER, Array("Content-Type: text/xml", 'SOAPAction: "' . $action . '"'));
curl_setopt($handle, CURLOPT_RETURNTRANSFER, true);
curl_setopt($handle, CURLOPT_POSTFIELDS, $data);
curl_setopt($handle, CURLOPT_SSLVERSION, 2);
$response = curl_exec($handle);
if (empty($response)) {
throw new SoapFault('CURL error: '.curl_error($handle),curl_errno($handle));
}
curl_close($handle);
return $response;
}
public function __doRequest($request,$location,$action,$version,$one_way = 0) {
return $this->callCurl($location, $request, $action);
}
}
Btw. if it fails at the downloading the WSDL file part, then download the WSDL manually (with curl for example), and use that file locally. IMHO __doRequest is not called while in the WSDL downloading stage.
file_put_contents(dirname(__FILE__) .'/Server.wsdl',get_wsdl()); //get_wsdl uses the same wrapper as above
$oWS = new StupidWrapperForOracleServer(dirname(__FILE__) .'/Server.wsdl',array('trace'=>1,'cache_wsdl'=>0));
Try 'sslv3://webtjener09....' or use a wrapper class where you can set the required cURL option.
If you are using Oracle Weblogic 11g to host your web services under SSL, make sure you are using the JSSE-Based SSL Implementation.
Log into the Weblogic Console, and go to Server->(your server)->Configuration->SSL->Advanced and check the Use JSSE SSL check box.
More information can be found in the Weblogic Manuals