2015-09-12 29 views
0

我知道這個問題有很多問題,我已經看到所有與此問題有關的問題,但似乎沒有解決我的問題。基本上,當我在沙箱中運行我的代碼時,它可以正常工作,但不在現場。那就是:IPN無效直播,但不在沙箱中

<?php 

class Paypal_IPN 
{ 

    /** @var string $_url The paypal url to go through cURL 
    $private $_url; 
    /** 
    * @param string $mode 'live' or 'sandbox' 
    */ 

    public function __construct($mode = 'live') 
    { 
     if ($mode == 'live') 
     $this->_url = 'https://www.paypal.com/cgi-bin/webscr'; 

     else 
     $this->_url = 'https://www.sandbox.paypal.com/cgi-bin/webscr'; 
    } 

    public function run() 
    { 
     $postFields = 'cmd=_notify-validate'; 

     foreach ($_POST as $key => $value) { 

      if(function_exists('get_magic_quotes_gpc') and get_magic_quotes_gpc()){ 
       $varvalue = urlencode(stripslashes($varvalue)); 
      } 
      else { 
       $value = urlencode($value); 
      } 
      $postFields .= "&$key=$varvalue"; 
     } 

     $ch = curl_init(); 

     curl_setopt_array($ch, array(
      CURLOPT_URL => 'https://www.paypal.com/cgi-bin/webscr', 
      CURLOPT_RETURNTRANSFER => true, 
      CURLOPT_SSL_VERIFYPEER => false, 
      CURLOPT_POST => true, 
      CURLOPT_POSTFIELDS => $postFields 
      )); 

     $result = curl_exec($ch); 
     curl_close($ch); 

     $price = $_POST['mc_gross']; 


     if ($result == 'VERIFIED') { 

      try 
          { 
           $bdd = new PDO('mysql:host=HOST;dbname=DBNAME', 'LOGIN', 'PASS'); 

          } catch(PDOexception $e) 
          { 
           echo "erreur"; 
          } 



          $bdd->exec("UPDATE users SET price='$price' WHERE pseudo='CUSTOMER'"); 

     } else { 
    // IPN invalid, log for manual investigation 
    echo "The response from IPN was: <b>" .$result ."</b>"; 

     } 

    } 
} 

?> 

所以,是的,每次我去到確認頁面運行此代碼:

<?php 
    require 'ipn.php'; 
    $paypal = new Paypal_IPN(); 
    $paypal->run(); 
?> 

我得到這個錯誤:從IPN的反應是:無效

我在我的PayPal帳戶中輸入了正確的IPN文件的URL。我真的不明白我做錯了什麼。你們能幫我嗎?

謝謝!

+0

你能嘗試登錄下跌$ _ POST和$ postFields這兩個數據進行比較。 PayPal要求兩者相同。另外,請確保您發佈回正確的端點。 – Joseph

+0

埃姆我可能會聽起來像一個初學者(我是),但我該怎麼做? :X – MEGADEVOPS

回答

0

在公共職能,運行else聲明:

$value = urlencode($value); 

應改爲:

$varvalue = urlencode($value);