Paypal Express Checkout Curl 在 Live 上失败,但在 Sandbox 中工作
Posted
技术标签:
【中文标题】Paypal Express Checkout Curl 在 Live 上失败,但在 Sandbox 中工作【英文标题】:Paypal Express Checkout Curl Failing on Live, but working in Sandbox 【发布时间】: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 端的问题吗?
【参考方案1】:
我联系了我的房东,询问他们最近是否有任何改变可能会影响到这一点。他们说:
我想我知道是什么原因造成的。我们将 MTU 设置为 1476 公司范围 解决一些问题。我把它改回了 1500。
好吧,那没用。于是他把它改成了1400,突然就可以了!
所以对我来说合乎逻辑的问题是
为什么减少 MTU 会使其工作?
他们的回答:
这是由于新的 DDOS 保护。我想升级此票并对其进行进一步调查,以便我们可以缩小为什么减少到 1476 并不能为您解决此问题。
所以升级的支持代理说:
1476 应该可以正常工作,我已尝试连接到 https://api-3t.paypal.com 站点来自 MTU 设置为 1476 的系统和 对我来说效果很好。
嗯,是的。它实际上总是从命令行为我工作。
所以他将我网站的 MTU 改回 1476,这让他大吃一惊! 它工作得很好。
那么,到底真正的问题是什么?我不知道。 据我所知,所有设置都恢复到不工作时的状态。
【讨论】:
【参考方案2】:我遇到了同样的问题,我的头撞在桌子上,然后阅读了这篇文章,所以我联系了我的托管服务提供商,这是他们的回答
感谢您联系我们的技术支持部门。
我们最近更改了 DDoS 保护提供商,并且 在 curl 查询中遇到此类问题。
您应该不会再收到错误消息了。
请验证。
贝宝网关又开始工作了。因此,请先联系您的托管服务提供商。
【讨论】:
以上是关于Paypal Express Checkout Curl 在 Live 上失败,但在 Sandbox 中工作的主要内容,如果未能解决你的问题,请参考以下文章
PayPal Express Checkout Instant Update 不更新运费
Paypal Sandbox (express-checkout) 返回内部错误
php 更改YITH PayPal Express Checkout for WooCommerce的Set Express Checkout Request参数
PayPal Express Checkout 通行证 transactionID