【发布时间】:2016-06-21 05:39:05
【问题描述】:
我很难过,因为这是有效的,但是现在,突然之间,它不起作用了。
我使用 Paypal 的 Express Checkout 并拥有以下代码:
$post = array(
'USER'=>$username,
'PWD'=>$password,
'SIGNATURE'=>$signature,
'METHOD'=>'SetExpressCheckout',
'VERSION'=>'119',
[... All the other info to be sent to Paypal...]
);
$post = http_build_query($post);
$live_curl = "https://api-3t.paypal.com/nvp";
$sandbox_curl = "https://api-3t.sandbox.paypal.com/nvp";
$ch = curl_init();
curl_setopt ($ch, CURLOPT_URL, $live_curl);
curl_setopt ($ch, CURLOPT_POST, 1);
curl_setopt ($ch, CURLOPT_POSTFIELDS, $post);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, 3); // 3 seconds to connect
curl_setopt ($ch, CURLOPT_TIMEOUT, 10); // 10 seconds to complete
$output = curl_exec($ch);
curl_close($ch);
当我使用沙盒 url 时它工作正常,但在实时服务器上我收到此错误:
cUrl 错误 (#28):操作在 0 毫秒后超时,收到 0 个字节中的 0 个字节
这个好久了,最近我也收到了一个订单,但是现在不行了!
编辑:我的网站有 SSL,所以像我们在很多此类问题的答案中看到的那样设置 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 不是一种选择。这违背了安全结账的目的。另外,我所有的调试都试过了,还是不行。
更新:我将 CURLOPT_VERBOSE 设置为 TRUE 并得到了这个:
在 DNS 缓存中找到主机名
DNS 缓存中的主机名已过时,已损坏
正在尝试 173.0.84.69...
连接到 api-3t.paypal.com (173.0.84.69) 端口 443 (#0)
成功设置证书验证位置:
CAfile:/etc/pki/tls/certs/ca-bundle.crt
CApath:无
0 毫秒后操作超时,收到 0 个字节中的 0 个
关闭连接 0
【问题讨论】:
-
尝试添加以下
CURLOPT选项:curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);- PayPal 已经推出了一些安全升级,但没有什么应该刚刚上线paypal-knowledge.com/infocenter/…跨度> -
首先:那行不通。第二:这违背了安全结账的目的。加上
CURLOPT_SSL_VERIFYHOST已经默认为2。见curl.haxx.se/libcurl/c/CURLOPT_SSL_VERIFYHOST.html -
有点...加密仍然存在,但 CA 链没有得到验证 - 我遇到了某个版本的 cURL 问题,它无法连接到 PayPal (或通过 HTTPS 的任何内容)当主机验证设置为
true但那是不久前的事了,认为值得一试作为测试,但它确实让你对 MITM 攻击持开放态度......你正在做很多就我所知,我和我是一样的。 -
我能看到的唯一区别是我使用了更长的超时时间并将
CURLOPT_INTERFACE设置为$_SERVER['SERVER_ADDR'](因为我通过一个安装的代码库运行多个站点) -
嗯,就是这样。这只是几天前的工作。我什么都没改变!这可能是 Paypal 端的问题吗?
标签: php curl paypal express-checkout