PayPal-PHP-SDK中不支持的SSL协议版本

时间:2016-01-20 21:14:33

标签: php symfony paypal

我在Symfony2 + KMJPayPalBridgeBundle的应用程序中使用了这段代码

http://paypal.github.io/PayPal-PHP-SDK/sample/doc/payments/CreatePaymentUsingPayPal.html

几个月前,这一切都很好,但现在我得到了#34;不支持的SSL协议版本"错误。

控制器代码

public function testAction()
{
    $paypal = $this->get('paypal');
    $apiContext = $paypal->getApiContext();

    $payer = new Payer(); 
    $payer->setPaymentMethod("paypal");

    $item1 = new Item(); 
    $item1->setName('Ground Coffee 40 oz') 
            ->setCurrency('USD') 
            ->setQuantity(1) 
            ->setSku("123123"); // Similar to `item_number` in Classic API ->setPrice(7.5); 
    $item2 = new Item(); 
    $item2->setName('Granola bars') 
            ->setCurrency('USD') 
            ->setQuantity(5) 
            ->setSku("321321"); // Similar to `item_number` in Classic API ->setPrice(2);

    $itemList = new ItemList(); 
    $itemList->setItems(array($item1, $item2));

    $details = new Details(); 
    $details->setShipping(1.2) 
            ->setTax(1.3) 
            ->setSubtotal(17.50);
    $amount = new Amount(); 
    $amount->setCurrency("USD") 
            ->setTotal(20) 
            ->setDetails($details);

    $transaction = new Transaction(); 
    $transaction->setAmount($amount) 
                ->setItemList($itemList) 
                ->setDescription("Payment description") 
                ->setInvoiceNumber(uniqid());

    $baseUrl = "http://development.local"; 
    $redirectUrls = new RedirectUrls(); 
    $redirectUrls->setReturnUrl("$baseUrl/ExecutePayment.php?success=true") 
                ->setCancelUrl("$baseUrl/ExecutePayment.php?success=false");

    $payment = new Payment(); 
    $payment->setIntent("sale") 
            ->setPayer($payer) 
            ->setRedirectUrls($redirectUrls) 
            ->setTransactions(array($transaction));

    $request = clone $payment;
    try { $payment->create($apiContext); } catch (Exception $ex) {
        ResultPrinter::printError("Created Payment Using PayPal. Please visit the URL to Approve.", 
                                    "Payment", null, $request, $ex); exit(1); 
    }
    $approvalUrl = $payment->getApprovalLink();
    ResultPrinter::printResult("Created Payment Using PayPal. Please visit the URL to Approve.", 
                                    "Payment", "<a href='$approvalUrl' >$approvalUrl</a>", $request, $payment); 

    return array();
}

3 个答案:

答案 0 :(得分:1)

您是否正在针对PayPal Sandbox API端点进行测试? PayPal昨晚升级了他们的Sandbox API端点,要求TLS 1.2并提供(仅)SHA256签名证书。

更多详细信息包括herehere

通过它的声音,你要么试图强制执行TLS 1.2以外的东西(可能),要么你的openssl libs太旧了,它们不支持TLS 1.2(任何低于OpenSSL 1.0.1c的东西,所以不太可能)。

您可能想尝试从SDK

运行TlsCheck.php

答案 1 :(得分:0)

SDK升级了:

https://github.com/paypal/PayPal-PHP-SDK/issues/474

列出当前系统要求的清单。

在我的情况下,不同的CLI PHP和服务器上的不同导致了问题。

答案 2 :(得分:0)

PHP使用系统提供的CURL库。需要7.34.0或更高版本。 - 从第二个链接。

我遇到了同样的问题,并按照更新指南进行操作。

我发现php仍在使用curl版本7.19.0即使我运行curl --version,我也得到7.46.0。使用服务器管理员重新编译php。