-1

i m using Magento ver. 1.8.1.0

i got Unable to communicate with the PayPal gateway. error with paypal express checkout or paypal Payments Pro in both case.

i have already Enable SSL verification :- No

Can you explain me about this error.

Thanks

ramesh
  • 21
  • 6

1 Answers1

0

Paypal have recently rolled out some security updates on the sandbox (production will be updated in June) https://devblog.paypal.com/upcoming-security-changes-notice/

Most importantly, TLS 1.0 and 1.1 are no longer accepted by the sandbox, and the Magento Paypal module doesn't use 1.2 by default. We can expect an official patch to fix this shortly, but in the meantime you can work around it by overriding Mage/Paypal/Model/Api/Nvp.php (in your local codepool or with a rewrite) with the following call function:

public function call($methodName, array $request)
{
    $request = $this->_addMethodToRequest($methodName, $request);
    $eachCallRequest = $this->_prepareEachCallRequest($methodName);
    if ($this->getUseCertAuthentication()) {
        if ($key = array_search('SIGNATURE', $eachCallRequest)) {
            unset($eachCallRequest[$key]);
        }
    }
    $request = $this->_exportToRequest($eachCallRequest, $request);
    $debugData = array('url' => $this->getApiEndpoint(), $methodName => $request);

    try {
        $http = new Varien_Http_Adapter_Curl();
        $http->addOption(CURLOPT_SSLVERSION,6);//CURL_SSLVERSION_TLSv1_2
        $config = array(
            'timeout'    => 60,
            'verifypeer' => $this->_config->verifyPeer
        );

        if ($this->getUseProxy()) {
            $config['proxy'] = $this->getProxyHost(). ':' . $this->getProxyPort();
        }
        if ($this->getUseCertAuthentication()) {
            $config['ssl_cert'] = $this->getApiCertificate();
        }
        $http->setConfig($config);
        $http->write(
            Zend_Http_Client::POST,
            $this->getApiEndpoint(),
            '1.1',
            $this->_headers,
            $this->_buildQuery($request)
        );
        $response = $http->read();
    } catch (Exception $e) {
        $debugData['http_error'] = array('error' => $e->getMessage(), 'code' => $e->getCode());
        $this->_debug($debugData);
        throw $e;
    }

    $response = preg_split('/^\r?$/m', $response, 2);
    $response = trim($response[1]);
    $response = $this->_deformatNVP($response);

    $debugData['response'] = $response;
    $this->_debug($debugData);
    $response = $this->_postProcessResponse($response);

    // handle transport error
    if ($http->getErrno()) {
        Mage::logException(new Exception(
            sprintf('PayPal NVP CURL connection error #%s: %s', $http->getErrno(), $http->getError())
        ));
        $http->close();

        Mage::throwException(Mage::helper('paypal')->__('Unable to communicate with the PayPal gateway.'));
    }

    // cUrl resource must be closed after checking it for errors
    $http->close();

    if (!$this->_validateResponse($methodName, $response)) {
        Mage::logException(new Exception(
            Mage::helper('paypal')->__("PayPal response hasn't required fields.")
        ));
        Mage::throwException(Mage::helper('paypal')->__('There was an error processing your order. Please contact us or try again later.'));
    }

    $this->_callErrors = array();
    if ($this->_isCallSuccessful($response)) {
        if ($this->_rawResponseNeeded) {
            $this->setRawSuccessResponseData($response);
        }
        return $response;
    }
    $this->_handleCallErrors($response);
    return $response;
}

The important line is $http->addOption(CURLOPT_SSLVERSION,6);//CURL_SSLVERSION_TLSv1_2

Matt O
  • 1,336
  • 2
  • 10
  • 19