2011-04-17 112 views
0

我想實現PayPal IPN,但它永遠不會到達我設置的網址。我寫了一個腳本記錄訪問這個網址,我得到的只是我的訪問。PayPal IPN無法驗證

Paypal發送通知需要多長時間?

編輯

互穿網絡突然開始來了,但我現在無法確認...以下是代碼:

$url = 'https://www.paypal.com/cgi-bin/webscr'; 
     $postdata = ''; 
     foreach ($_POST as $i => $v) { 
      $postdata .= $i . '=' . urlencode($v) . '&'; 
     } 
     $postdata .= 'cmd=_notify-validate'; 

     $web = parse_url($url); 
     if ($web['scheme'] == 'https') { 
      $web['port'] = 443; 
      $ssl = 'ssl://'; 
     } else { 
      $web['port'] = 80; 
      $ssl = ''; 
     } 
     $fp = @fsockopen($ssl . $web['host'], $web['port'], $errnum, $errstr, 30); 

     if (!$fp) { 
      echo $errnum . ': ' . $errstr; 
     } else { 
      fputs($fp, "POST " . $web['path'] . " HTTP/1.1\r\n"); 
      fputs($fp, "Host: " . $web['host'] . "\r\n"); 
      fputs($fp, "Content-type: application/x-www-form-urlencoded\r\n"); 
      fputs($fp, "Content-length: " . strlen($postdata) . "\r\n"); 
      fputs($fp, "Connection: close\r\n\r\n"); 
      fputs($fp, $postdata . "\r\n\r\n"); 

      while (!feof($fp)) { 
       $info[] = @fgets($fp, 1024); 
      } 
      fclose($fp); 
      $info = implode(',', $info); 
      if (eregi('VERIFIED', $info)) { 

      } else { 

} 

}

+0

您是否在控制面板中啓用了IPN? – PiZzL3 2011-04-17 17:10:46

+0

你在用什麼語言?另外,你應該發佈有問題的代碼。 – 2011-04-17 17:11:08

+0

是的,網址是正確的... – chchrist 2011-04-17 17:11:23

回答

0

我上面已經評論。但我很確定編碼爲&的html正在搞亂你的回調。

URL編碼HTML編碼有很大的區別。

將此'&'更改爲此'&'&是用於分隔不同組鍵/值對的url/post字符。通過將其更改爲&,您將整個回調設置爲單個值。

而且,只是一些建議,但我會溝壑

if (eregi('VERIFIED', $info)) {} else {} 

以及與此

if (preg_match('/VERIFIED/', $info)) {} else {} 

eregi更換折舊。
http://php.net/manual/en/function.eregi.php

+0

我希望你是對的! :)現在試試 – chchrist 2011-04-17 18:21:10

+0

Thnx男人!有效!現在,我需要弄清楚如何獲得「自定義」變量... – chchrist 2011-04-17 18:32:20

+0

從您的購買表單提交的任何自定義值應該包含在上面的代碼中的數組中:'$ _POST'(請務必清理任何您從那拉)。回調只是爲了驗證你收到的是一個真正的命令,而不是某人無意識的欺騙你的ipn腳本。 – PiZzL3 2011-04-17 18:40:41