【问题标题】:How to pass curl options through OmniPay to Guzzle?如何通过 OmniPay 将 curl 选项传递给 Guzzle?
【发布时间】:2016-05-26 17:05:00
【问题描述】:

目前正在整合 OmniPay。看起来一切都很好,但是当我使用 PayPalExpress 网关时,它给了我以下错误:

[curl] 35: error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure [url] https://api-3t.sandbox.paypal.com/nvp?VERSION=119.0&USER=...

跟踪事情似乎是 PayPal 的 SSL 更新的一个问题,我需要告诉它使用 SSL3 和更新的密码列表:

curl_setopt($ch, CURLOPT_SSLVERSION, 3);
curl_setopt($ch, CURLOPT_SSL_CIPHER_LIST, 'SSLv3');

但是,我还没有找到一种方法将这些选项传递给 Guzzle,然后再传递给 curl。有谁知道我怎么能做到这一点?

【问题讨论】:

    标签: php curl paypal guzzle omnipay


    【解决方案1】:
    1. 要将选项传递给 curl 或 guzzle,您需要在 sendData 函数中执行以下操作:https://github.com/cherrytech/omnipay-paypal/commit/f520a015a91eb1bf2666892d3ef362607a74396f
    2. 您所建议的将密码列表显式设置为 SSLv3 将不起作用。 PayPal 已将其服务器更改为需要 TLS 1.2,并且任何 SSLv3 连接都将被拒绝。正确的做法是将系统上的 libcurl 版本更新到 > 7.40,这将自动协商正确的 TLS 1.2 版本。

    【讨论】:

    • #1 - 如果我没看错,我必须修改核心文件吗?那么,OmniPay 没有办法做到这一点吗? #2 - 我的服务器上的 curl 版本是 7.43.0,所以这个修复听起来好像不起作用。
    • 我自己在 CentOS 6 上使用 libcurl 7.44 进行了测试。它适用于我,无需使用 PayPal_Rest 网关更改任何代码。
    • 好的,我可能需要在我的本地服务器上重新安装以使其正常工作。而且你有一个关于将密码列表设置为 SSLv3 的好点子。看起来应该是 CURL_SSLVERSION_TLSv1_2(或 6)而不是设置次要版本。
    • 是的,我相信 6 是正确的答案,但是如果您没有支持它的 libcurl,您只会抛出异常。我已经在我的服务器上使用更新的 libcurl 进行了测试,没有设置 SSL 版本,并让 libcurl 自动协商。它工作正常。我没有看到任何证据表明将 SSL 版本设置为 6 或设置密码列表会产生任何影响,但是如果您有一个测试用例可以证明这两种方式,那么我希望看到这一点。
    猜你喜欢
    • 2013-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-08
    相关资源
    最近更新 更多