2015-09-12 2 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(); 
?> 

Я получаю эту ошибку: Ответ от СПИ был: Invalid

Я ввел правильный URL-адрес файла IPN в свою учетную запись PayPal. Я действительно не вижу, что я делаю неправильно. Можете ли вы, ребята, помочь мне?

Спасибо!

+0

Не могли бы вы попробовать войти вниз $ _POST и $ postFields сравнить оба данных. PayPal требует, чтобы оба были одинаковыми. Кроме того, убедитесь, что вы вернетесь к правильной конечной точке. – Joseph

+0

ehm Я, вероятно, буду звучать как новичок (который я есть), но как это сделать? :Икс – MEGADEVOPS

ответ

0

В публичной функции запустите else заявление:

$value = urlencode($value); 

следует читать:

$varvalue = urlencode($value); 
Смежные вопросы