我在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();
}
答案 0 :(得分:1)
您是否正在针对PayPal Sandbox API端点进行测试? PayPal昨晚升级了他们的Sandbox API端点,要求TLS 1.2并提供(仅)SHA256签名证书。
通过它的声音,你要么试图强制执行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。