2013-02-12 93 views
3

几天前,突然停止接收来自PayPal的IPN消息。 我已经写在下面无法获得PayPal IPN沙箱的回复

$url_parsed=parse_url('https://www.sandbox.paypal.com/cgi-bin/webscr'); 
$post_string = '';  
foreach ($_POST as $field=>$value) { 
    $post_string .= $field.'='.urlencode(stripslashes($value)).'&'; 
} 
$post_string.="cmd=_notify-validate"; 
$fp = fsockopen($url_parsed['host'],"80",$err_num,$err_str,30); 

$myFile = "testpaypal.txt"; 

$fh = fopen($myFile, 'w') or die("can't open file"); 
$stringData = $post_string; 
fwrite($fh, $stringData); 
fwrite($fh, "------------"); 


if(!$fp){ 
    return false; 
} else { 

    fputs($fp, "POST $url_parsed[path] HTTP/1.0\r\n"); 
    fputs($fp, "Host: $url_parsed[host]\r\n"); 
    fputs($fp, "Content-type: application/x-www-form-urlencoded\r\n"); 
    fputs($fp, "Content-length: ".strlen($post_string)."\r\n"); 
    fputs($fp, "Connection: close\r\n\r\n"); 
    fputs($fp, $post_string . "\r\n\r\n");  
    while(!feof($fp)) 
    { 
     $ipn_response .= fgets($fp, 1024); 
    } 
    fclose($fp); 
    if (eregi("VERIFIED",$ipn_response)) { 
     fwrite($fh, "VERIFIED"); 
     return true; 
    } else { 
     fwrite($fh, "UNVERIFIED"); 
     return false; 
    } 
} 
    fclose($fh); 

该代码的代码返回到err_num “” 以及当我后打印$ ipn_response “FCLOSE($ FP);”行它打印 “HTTP/1.0 302找到的位置:https://www.sandbox.paypal.com服务器:BIGIP连接:关闭内容长度:0

,但无法在$ ipn_respnse得到 “已检查”。

我已经尝试了所有可能的方法,如更改解析网址与“ssl://sandbox.paypal.com” 和网络上建议的所有其他解决方案。

自从最近三天以来,我一直陷在这个问题中。所以,请帮助我。

在此先感谢。

回答

0

我也一度为这个问题而苦苦挣扎。它完全工作我疯了!问题在于Hetzner(托管在哪里)出于某种原因阻止了PayPal IP。在这种情况下,当您在PayPal账户中查看IPN账户时,您会发现IPN已经停止发送来自某个日期的通知。

0

尝试将parse_url(https://www.paypal.com/cgi-bin/webscr)更改为沙箱网址(https://sandbox.paypal.com/cgi-bin/webscr)。

接下来,使用phpinfo()函数检查您的服务器是否已启用openssl以接收来自HTTPS的响应。

+0

是的,我已经做了沙箱为了在这里提到它,以及在我的phpinfo卷曲启用。 cURL支持\t已启用 cURL信息\t libcurl/7.16。0 OpenSSL/0.9.8i zlib/1.2.3 – user1996999 2013-02-12 08:44:30

5

您应该通过SSL连接。尝试改变这一点:

$fp = fsockopen($url_parsed['host'],"80",$err_num,$err_str,30); 

要这样:

$fp = fsockopen("tls://" . $url_parsed['host'],"443",$err_num,$err_str,30); 
+0

我使用了一个我从Internet上下载的类。看起来像过去在80港口的连接是允许的。但是,现在这个脚本无法连接。该解决方案解决了这个问题。 – DreamWave 2014-06-02 08:04:07

+0

感谢它适合我.....真棒的家伙 – 2015-08-19 14:58:53

0

在贝宝的消息:

为了提高我们网站的性能,可扩展性和可用性,我们 将扩大www.paypal.com的IP地址数量。我们 公布了一个公告于10月18日,2011年作为这个 扩张计划的一部分,我们将在 停止对HTTP 1.0协议支持2013年2月1,...

据称更多信息可在http://www.paypal.com/pdthttp://www.paypal.com/ipn

发现我在你的代码注意这里:

fputs($fp, "POST $url_parsed[path] HTTP/1.0\r\n"); 

你还在使用HTTP 1.0

我不知道这是否能解决您的问题,但希望它能帮助您解决问题。