[英]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/webscr或https://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.