How to set SSL version when sending requests via SoapClient?

Every now and then you are required to work on a API which is pretty big. However, the SSL version they have used is depreciated one so you cannot use standard SoapClient class to communicate with them. The following snippet allows you to create your wrapper class which extends SoapClient and allows you to execute a curl request with the correct SSL version. Thus allowing you to make a successful communication with that API

class WrapperClass 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, 3);
        $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);
    }
}


I have overridden the __doRequest method of wrapper class to call CURL which then sets the SSLversion as 3 (SSLv3) to communicate with the API.

Thanks to PHP’s override method ability :)

Leave a Reply

Your email address will not be published. Required fields are marked *