使用 this code (从 this tutorial 粘贴),我成功执行了 PayPal DoDirectPayment 方法。请注意,CURLOPT_SSL_VERIFYPEER 设置为 FALSE。
然而,当我设置正常值 (CURLOPT_SSL_VERIFYPEER = TRUE) 时,我没有从 PayPal 得到任何响应,甚至没有失败响应,尽管我的代码在具有有效 SSL 证书的服务器上运行(所有页面都使用 HTTPS URL) ).
有人知道是什么导致了这个问题吗?
最佳答案
如果您使用的是有效证书,但问题仍然存在,您可能需要仔细检查您是否以有效格式(X.509 证书 PEM)保存了 CA。我看到您已将您的 CA 导出到一个名为 cacert.pem 的文件 - 确保此文件有效,并且 curl 确实能够检索此文件(有效路径等)
您可以尝试再次导出证书 - 从浏览器(即:firefox),这可以通过在浏览器(即:Firefox)中访问 PayPal https url 并查看证书然后导出来完成。 (确保您使用前面所述的正确格式 - X.509 证书 PEM)。
保存 CA 后,您可以将其传递给已有的 CURLOPT_CAINFO 参数:
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($ch, CURLOPT_CAINFO, getcwd() . "/CAcerts/BuiltinObjectToken-EquifaxSecureCA.crt");
有关更详细的解释,请访问这篇精彩的文章: http://unitstep.net/blog/2009/05/05/using-curl-in-php-to-access-https-ssltls-protected-sites/
引用关于证书的最后部分:
If you have the CA certificate, but it is not in the PEM format (i.e. it is in a binary or DER format that isn’t Base64-encoded), you’ll need to use something like OpenSSL to convert it to the PEM format.
编辑 - 如果在导出证书后出现错误,您还可以尝试使用 X.509 证书 PEM(带链)保存证书
关于ssl - 如果 CURLOPT_SSL_VERIFYPEER 为真,PayPal DoDirectPayment 将因 SSL 而失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14822372/