无法与PayPal错误通信

时间:2016-01-26 12:55:17

标签: magento magento-1.8

我正在使用Magento ver。 1.8.1.0

我无法与PayPal网关通信。在这两种情况下,PayPal快速结账或PayPal Pay的错误。

我已启用SSL验证: - 否

你能解释一下这个错误。

由于

1 个答案:

答案 0 :(得分:0)

Paypal最近在沙盒上推出了一些安全更新(生产将在6月更新)https://devblog.paypal.com/upcoming-security-changes-notice/

最重要的是,沙箱不再接受TLS 1.0和1.1,默认情况下Magento Paypal模块不使用1.2。我们可以期待一个正式的修补程序很快解决这个问题,但与此同时,您可以通过使用以下Mage/Paypal/Model/Api/Nvp.php函数覆盖call(在您的本地代码池中或重写)来解决此问题:

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;
}

重要的一行是$http->addOption(CURLOPT_SSLVERSION,6);//CURL_SSLVERSION_TLSv1_2