簡體   English   中英

無法從paypal IPN沙箱獲得回復

[英]Unable to getting response from paypal IPN sandbox

幾天前突然停止接收來自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返回到“ 0 ”以及在“fclose($ fp);”之后打印$ ipn_response時 行打印“ HTTP / 1.0 302找到位置: https ://www.sandbox.paypal.com服務器:BigIP連接:關閉Content-Length:0

但無法在$ ipn_respnse中獲得“驗證”。

我已經嘗試了所有可能的方法,例如使用“ssl://sandbox.paypal.com”更改解析網址以及在網絡上建議的所有其他解決方案。

自從過去三天以來,我一直陷入這個問題。 所以,請幫幫我。

提前致謝。

您應該通過SSL連接。 嘗試改變這個:

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

對此:

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

我曾經一度努力解決這個問題。 它完全讓我瘋了! 問題是Hetzner(托管位置)因某種原因阻止了PayPal IP。 在這種情況下,當您查看PayPal帳戶中的IPN網絡時,您會看到IPN已從某個日期停止發送通知。

嘗試將parse_url( https://www.paypal.com/cgi-bin/webscr )更改為沙箱網址( https://sandbox.paypal.com/cgi-bin/webscr )。

接下來,使用phpinfo()函數檢查您的服務器是否已啟用openssl以接收來自HTTPS的響應。

來自PayPal的消息:

為了提高我們網站的性能,可擴展性和可用性,我們將擴大www.paypal.com的IP地址數量。 我們在2011年10月18日的公告中宣布了這一點。作為此擴展的一部分,我們將在2013年2月1日停止支持HTTP 1.0協議......

據說可以在http://www.paypal.com/pdthttp://www.paypal.com/ipn找到更多信息

我在你的代碼中注意到:

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

你還在使用HTTP 1.0

我不知道這是否會解決您的問題,但希望如果您仍然遇到問題會有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM