簡體   English   中英

沒有收到Paypal IPN Sandbox的回復

[英]Not receiving a response from Paypal IPN Sandbox

我正在將paypal結賬放到我的網站上,但是我和聽眾一起倒下了。 對於那些不熟悉Paypal IPN系統的人來說,Paypal基本上會向您的腳本發送一條有關交易的消息,您可以通過添加幾個位來發送回來。 如果Paypal收到正確的答復,它將回復'已驗證',如果沒有,它會說'無效'。

第一位我成功了。 我的代碼能夠從paypal接收信息,添加額外內容並將其發回。 但是,Sandbox沒有回復說“已驗證”或“無效”。 我幾乎從paypal網站上復制了我的代碼,所以我希望這會相當簡單,所以如果你花一點時間查看我的代碼,也許一些新的眼睛可以找出我出錯的地方。

這是代碼。 沒有什么特別的,它只是獲取信息,調整它,傳回它並讀取響應(它要么沒有得到或者沒有意識到它的到來)

<?php

$debug=true;

//Put together postback info

$postback = 'cmd=_notify-validate';

foreach($_POST as $key =>$value){
     $postback .= "&$key=$value";
}

// build the header string to post back to PayPal system to validate
$header = "POST /cgi-bin/webscr HTTP/1.1\r\n";
$header .= "Host: www.sandbox.paypal.com\r\n";
$header .= "Content-Type: application/x-www-form-urlencoded\r\n";
$header .= "Content-Length: " . strlen($postback) . "\r\n\r\n";

$fp = fsockopen ('www.sandbox.paypal.com', 80, $errno, $errstr, 30);//open the connection

if(!$fp){ //no conn
    die();
}

//post data back
fputs($fp, $header . $postback);

while(!feof($fp)){

    $res=fgets ($fp, 1024);

    if((strcmp($res, "VERIFIED")) == 0){ //verified!
        if($debug){         
            $filename = 'debug/debug5_verified.txt'; //create a file telling me we're verified
            $filehandle=fopen($filename, 'w');
            fwrite($filehandle,'VERIFIED!');
            fclose($filehandle);
        }
    }
}

?>

提前致謝!

切換到使用HTTPS網址,我不知道什么時候,但最近我的所有測試腳本都開始在普通的HTTP版本上失敗。 他們看起來正在遷移。

我使用的是相同的paypal示例代碼:

    $fp = fsockopen ('ssl://www.sandbox.paypal.com', 443, $errno, $errstr, 30);    

要么

    $fp = fsockopen ('ssl://www.paypal.com', 443, $errno, $errstr, 30);

所以我想我找到了一個解決方案。 事實證明連接到ssl:// sandbox ....沒有問題,它實際上正在檢索答案。 代碼被掛斷了

while(!feof($fp)){
    $res=fgets($fp,1024);
}

位。 我所做的只是替換為:

$res=stream_get_contents($fp, 1024);

它第一次工作! 現在我可以繼續我的生活。 再次感謝您對此的所有幫助。

也許原始代碼丟失了: $header .= "Connection: close\\r\\n\\r\\n";

請注意,Paypal 示例代碼使用HTTP / 1.0,因此沒有該行。 HTTP / 1.1很好,但可能需要該行。

在另一個問題上,Sandbox可能不再支持端口80.我正在獲得302重定向到https://www.sandbox.paypal.com

PayPal測試服務器移至:

$fp = fsockopen('ssl://ipnpb.paypal.com', 443, $errno, $errstr, 30);

檢查php版本tls socket。 它應該是tls 1.2來獲取沙箱帳戶的響應。 將php版本升級到5.5以獲得tls 1.2套接字。

paypal已禁用sslv3的服務並更改為tls 1.2。

如果你需要獲得響應,php版本必須要求tls 1.2,才能獲得tls 1.2 php可以升級到5.5或更高。

訪問鏈接

我注意到你發布的網址與下面的網址略有不同,這可能是嗎?

這是來自IPN Testing幫助頁面:

檢查您是否將回復發布到正確的URL,即https://www.sandbox.paypal.com/cgi-bin/webscrhttps://www.paypal.com/cgi-bin/webscr ,具體取決於無論您是在Sandbox中進行測試還是在現場進行測試。

驗證您的響應是否包含完全相同的IPN變量和值,順序為cmd = _notify-validate。

確保您對響應字符串進行編碼,並使用與原始郵件相同的字符編碼。

編輯:對不起我還想提到HTTP和HTTPS的端口是不同的,80而不是443.我不太熟悉Paypal API,但可以看看它,因為我看到你使用80。

暫無
暫無

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

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