使用this code(粘贴自this tutorial),我获得了成功的PayPal DoDirectPayment方法执行。请注意,CURLOPT_SSL_VERIFYPEER设置为FALSE。
然而,当我设置正常值(CURLOPT_SSL_VERIFYPEER = TRUE)时,尽管我的代码在具有有效SSL证书的服务器上运行(所有页面都使用HTTPS URL),但我没有得到PayPal的响应,甚至没有响应失败)。
有谁知道会导致这个问题的原因?
答案 0 :(得分:0)
如果您使用的是有效证书且问题仍然存在,则可能需要再次检查以有效格式保存CA(X.509证书PEM)。我看到你已经将你的CA导出到一个名为cacert.pem的文件中 - 确保这个文件有效,并且该卷曲确实能够检索到这个文件(有效路径等)。
您可以尝试再次从浏览器(即:firefox)导出证书,这可以通过访问浏览器中的PayPal https网址(即:Firefox)来完成 - 并查看证书然后将其导出。 (确保使用前面所述的正确格式 - 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/
引用关于证书的最后一部分:
如果您拥有CA证书,但它不是PEM格式(即 它是二进制或DER格式,不是Base64编码的),你会 需要使用类似OpenSSL的东西将其转换为PEM格式。
编辑 - 如果导出证书后出错,您还可以尝试使用X.509证书PEM(带链)保存证书