PayPal与OpenShift Online集成 - SSL IPN问题

时间:2016-08-23 18:59:40

标签: openshift paypal-ipn

我在OpenShift Online上构建了一个应用程序,现在我尝试与PayPal集成。我遇到了SSL cURL错误,我不知道如何处理。我已经浏览过SO,OpenShift Online,PayPal和其他地方,但无法解决这个问题。

背景:

  • 基于PHP的应用程序在OpenShift Online v2上运行
  • 设置为 https://*******.rhcloud.com/test/test_IPN.php ---所以我可以使用他们的 * .rhcloud.com通配符证书
  • 使用PayPal"立即购买"具有PayPal付款标准的按钮,在其沙箱中进行测试
  • 使用在的IPN示例代码 https://github.com/paypal/ipn-code-samples/blob/master/paypal_ipn.php

以下是代码的一部分,似乎是我问题的根源:

// CONFIG: Please download 'cacert.pem' from "http://curl.haxx.se/docs/caextract.html" and set the directory path
// of the certificate as shown below. Ensure the file is readable by the webserver.
// This is mandatory for some environments.

//$cert = __DIR__ . "./cacert.pem";
//curl_setopt($ch, CURLOPT_CAINFO, $cert);

问题:

[1]使用代码"原样" (第79-80行注释掉)引发卷曲错误:" SSL连接错误"

[2]使用第79-80行未注释掉(和cacert.pem放在与php脚本相同的目录中)引发curl错误:" SSL CA证书问题(路径?访问权限?)&#34 ;

我很可能在这里错过了一些简单的东西。任何有助于在OpenShift Online上正常工作的帮助非常感谢。谢谢!

2 个答案:

答案 0 :(得分:0)

这条线很可疑:

$cert = __DIR__ . "./cacert.pem";

基本上你会得到像$ cert equaling /home/path./cacert.pem这样的东西,我很确定这不是你想要的,为什么你得到ssl错误,它找不到证书。 这可以纠正为:

$cert = __DIR__ . "/cacert.pem";

最好将cacert.pem存储在$ OPENSHIFT_DATA_DIR中并引用它:

$cert = getenv("OPENSHIFT_DATA_DIR")."cacert.pem";

并确保cacert.pem上的权限至少为0644

chmod 0644 $OPENSHIFT_DATA_DIR/cacert.pem

答案 1 :(得分:0)

解决方案:

强制使用TLS 1.2

评论第79-80行并添加

curl_setopt($ch, CURLOPT_SSLVERSION, 6); // Force TLS 1.2

为我做了诀窍。希望这有助于其他人。

P.S。 TLS 1.2的需求来自这篇PayPal文章https://www.paypal-knowledge.com/infocenter/index?page=content&widgetview=true&id=FAQ1914&viewlocale=en_US