2013-03-05 3 views
1

Это мой код для интерпретации уведомления PayPal. Я продолжаю получать «INVALID» из PayPal. Мне жаль, что этот вопрос - это всего лишь фрагмент кода, но я долгое время работаю над ним и не вижу никакого прогресса.PayPal IPN, возвращающий INVALID

Если у кого-то есть какие-то идеи, но вам нужно увидеть некоторую отладочную информацию, то способ, которым я получаю это, - это функция php mail(), поэтому просто спросите, и я могу ее получить.

<?php 
    $debugmessage = ""; 

    require($_SERVER['DOCUMENT_ROOT'] . '/xxxx.php'); 
    mysql_connect("$server", "$user", "$password") or die(mysql_error()); 
    mysql_select_db("$database") or die(mysql_error()); 

    // read the post from PayPal system and add 'cmd' 
    $req = 'cmd=_notify-validate'; 
    foreach ($_POST as $key => $value) { 
     $value = urlencode(stripslashes($value)); 
     $req .= "&$key=$value"; 
    } 

    // post back to PayPal system to validate 
    $header = "POST /cgi-bin/webscr HTTP/1.0\r\n"; 
    $header .= "Content-Type: application/x-www-form-urlencoded\r\n"; 
    $header .= "Content-Length: " . strlen($req) . "\r\n\r\n"; 
    $fp = fsockopen ('ssl://www.paypal.com', 443, $errno, $errstr, 30); 

    if (!$fp) { 
     // HTTP ERROR 
     echo "http error"; 
    } else { 
     fputs ($fp, $header . $req); 
     while (!feof($fp)) { 
      $res = fgets ($fp, 1024); 
      $debugmessage .= "|".$res; 
      $debugmessage .= "|".strlen($req); 
      if (strcmp ($res, "VERIFIED") == 0) { 
       // PAYMENT VALIDATED & VERIFIED! 
       $debugmessage .= "|"+"payment VALID"; 

       $email = $_POST['payer_email']; 
       $password = mt_rand(100000, 999999); 
       mysql_query("INSERT INTO users (email, password) VALUES('". mysql_escape_string($email) ."', '".md5($password)."') ") or die(mysql_error()); 
       $to  = $email; 
       $subject = 'Download Area | Login Credentials'; 
       $message = ' 
       Thank you for your purchase! 
       Your account information 
       ------------------------- 
       Email: '.$email.' 
       Password: '.$password.' 
       ------------------------- 
       You can now login at xxxxxxxxxxxx'; 
       $headers = 'From:[email protected]' . "\r\n"; 
       mail($to, $subject, $message, $headers); 
      } 
      else if (strcmp ($res, "INVALID") == 0) { 
       $debugmessage .= "|"."payment INvalid"; 
       // PAYMENT INVALID & INVESTIGATE MANUALY! 
       $to  = '[email protected]'; 
       $subject = 'Download Area | Invalid Payment'; 
       $message = ' 
       Dear Administrator, 
       A payment has been made but is flagged as INVALID. 
       Please verify the payment manualy and contact the buyer. 
       Buyer Email: '.$email.' 
       '; 
       $headers = 'From:[email protected]' . "\r\n"; 
       mail($to, $subject, $message, $headers); 

      } 
     } 
     fclose ($fp); 
    } 
    mail("[email protected]",$debugmessage,""); 
?> 

Только в случае, если кто-нибудь понимает, что ужасный беспорядок, $debugmessage содержит этот раз скрипт запуска:

|HTTP/1.0 200 OK |840|X-Frame-Options: SAMEORIGIN |840|Strict-Transport-Security: max-age=14400 |840|Strict-Transport-Security: max-age=14400 |840|Content-Type: text/html; charset=UTF-8 |840|Date: Tue, 05 Mar 2013 04:42:09 GMT |840|Content-Length: 7 |840|Connection: close |840| |840|INVALID|840|payment INvalid 

Я прочитал вещи о не используя fsockopen, а также используя то, что называется «CURL», но я не слишком уверен в этом.

Любая помощь была бы действительно оценена.

+0

Можете ли вы показать, что вы отправляете на paypal для обработки? –

+0

Проверьте, что порт 443 открыт на вашем компьютере/сервере или нет. – kwelsan

+0

@Sandy Я считаю, что порт открыт, у меня нет брандмауэра. Это стандартный веб-сервер HostGator с установленной Cpanel. @RavinderSingh Я использую песочницу и пробовал отправлять всевозможные переводы. Вышеприведенный результат был получен из передачи Web Accept с помощью 'payment_type = instant',' payer_status = verified', 'address_status = confirm'. – JoeRocc

ответ

-1

Вы можете попробовать тестовые инструменты PayPal Sandbox (Instant Motion Notification (IPN) Simulator) для тестирования IPN. В файле IPN вы можете записать файл с данными POST и проверить, что не так.

1

Через 5 часов ... Мое решение заключалось в том, чтобы вытолкнуть код и переделать его, используя this tutorial.

Настоятельно рекомендуется.

0

Это может показаться очевидным для многих, но я потратил некоторое время на то, чтобы понять это. Запросы симулятора IPN были ПРОВЕРЕНЫ, но IPN из истории были INVALID. На самом деле симы работают только с песочницей, а история работает только с обычным URL-адресом. Вы не можете тестировать исторические IPN-сообщения с помощью песочницы.