2013-05-02 4 views
-1

Я пытался выяснить последние 12 часов, почему это не работает. Я нашел самый последний и обновленный код, который каждый должен теперь использовать с системой IPN. В случае, если вы не уверены, почему заголовок POST теперь HTTP/1.1 вместо HTTP/1.0, смотрите здесь: https://www.x.com/content/bulletin-ipn-and-pdt-scripts-and-http-1-1PayPal IPN ничего не сделает

В любом блоке этого сценария, сообщение должно быть помещено в журнале. txt, но этого не происходит.

Любое понимание кто может предоставить бы удивительным:

<?php 

    //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 (replaces old headers) 
    $header .="POST /cgi-bin/webscr HTTP/1.1\r\n"; 
    $header .="Content-Type: application/x-www-form-urlencoded\r\n"; 
    $header .="Host: www.paypal.com\r\n"; 
    $header .="Connection: close\r\n"; 

    $fp = fsockopen ('ssl://paypal.com', 443, $errno, $errstr, 30); 
    // 

    //error connecting to paypal 
    if (!$fp) { 
    file_put_contents('log.txt', 'httperror'); 
    } 

    //successful connection  
    if ($fp) { 
    fputs ($fp, $header . $req); 

    while (!feof($fp)) { 
     $res = fgets ($fp, 1024); 
     $res = trim($res); //NEW & IMPORTANT 

     if (strcmp($res, "VERIFIED") == 0) { 
     if ($_POST["payment_status"] == "Completed") { 
      $link = mysqli_connect("localhost", "removedforsecurity", "removedforsecurity", "removedforsecurity"); 
      if (!$link) { 
      printf("Can't connect to localhost. Error: %s\n", mysqli_connect_error()); 
      exit(); 
      } 

      $username = $_POST["custom"]; 
      $date = date('Y-m-d'); 

      /* update rows */ 
      mysqli_query($link, "UPDATE users SET access='user' WHERE username='myusername'"); 

      file_put_contents('log.txt', 'veri'); 
      /* close connection */ 
      mysqli_close($link); 
     } 
     } 

     if (strcmp ($res, "INVALID") == 0) { 
     file_put_contents('log.txt', 'failed'); 
     } 
    } 
    fclose($fp); 
    } 

?> 

ответ

0

Взгляните на эти IPN Troubleshooting Steps. Это может помочь. Также проверьте свою историю IPN в своей учетной записи PayPal, чтобы убедиться, что IPN действительно отправляется. Он также должен показать, был ли он отправлен успешно, или если он не прошел и повторяет попытку. Также должен быть код состояния того, что ваш сервер хранит в деталях сообщения истории IPN. PayPal ожидает ответ 200ok.

Смежные вопросы