2013-04-16 4 views
0

PayPal IPN 시스템을 사용하려고합니다. 테스트를 위해 SandBox 플랫폼을 사용하도록 코드를 설정했습니다. 왜 내 코드의 if (strcmp ($res, "VERIFIED") == 0) { 부분이 실행되지 않는지에 대한 이유를 찾고 있습니다. 뿐만 아니라이 코드의 어느 부분도 "log.txt"에 출력을 쓰지 않습니다.PayPal IPN이 특정 부분의 코드를 실행하지 않습니다.

내가 잘못 가고있는 부분을 알기 위해 내 코드를 검토해 주시면 감사하겠습니다.

<?php 
require_once('includes/mysql.inc.php'); 

if($_POST) { 
    $req = 'cmd=' . urlencode('_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 .= "Host: sandbox.paypal.com\r\n"; 
    $header .= "Content-Type: application/x-www-form-urlencoded\r\n"; 
    $header .= "Content-Length: " . strlen($req) . "\r\n\r\n"; 
    $fp = fsockopen ('ssl://sandbox.paypal.com', 443, $errno, $errstr, 30); 

    if (!$fp) { 
     file_put_contents('log.txt', 'httperrrrr'); 
     die(); 
    } else { 
     file_put_contents('log.txt', 'die here'); 
     fputs ($fp, $header . $req); 
     while (!feof($fp)) { 
      $res = fgets ($fp, 1024); 
      $data = print_r($res, TRUE); 
      if (strcmp ($res, "VERIFIED") == 0) { 
       file_put_contents('log.txt', 'verified'); 
       $username = $_POST['custom']; 
       require_once('classes/admin.class.php'); 
       $activate = new Admin($db); 
       $activate->modifyUser($username, 'activate'); 
      } else { 
       file_put_contents('log.txt', 'noverifyshit'); 
      } 
     } 
    } else { 
     file_put_contents('log.txt', 'no post'); 
    } 
} 
?> 
+0

은 아마 파일에 쓸 수없는 이유는 무엇입니까? error_reporting (E_ALL)을 추가하십시오. 및 ini_set ('display_errors', 1)을 실행중인 코드 바로 앞에 추가합니다 (코드의 다른 위치에 코드가없는 경우). – Aeolun

+0

음, 그게 실제로 많은 도움이되었습니다. 조건은 지금 실행 중입니다. 실행해야하는 것은 아닙니다. "if (strcmp ($ res,"VERIFIED ") == 0) {" –

+0

아마도 paypal의 결과로 추가 공백이 포함될 수 있습니까? 비교 실패의 가장 분명한 이유는 문자열이 동일하지 않다는 것입니다. – Aeolun

답변

0

고쳐주었습니다. 간단히 "if ($ _POST [ 'payment_status'] ="Completed ") {"를 추가하면 코드가 true로 실행됩니다. 내 업데이트 된 코드는 다음

입니다 :

<?php 
error_reporting(E_ALL); 
ini_set('display_errors',1); 
require_once('includes/mysql.inc.php'); 

if($_POST) { 
    $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 .= "Host: www.paypal.com\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) { 
     file_put_contents('log.txt', 'httperrrrr'); 
     die(); 
    } else { 
     file_put_contents('log.txt', 'die here'); 
     fputs ($fp, $header . $req); 
     while (!feof($fp)) { 
      $res = fgets ($fp, 1024); 
      if (strcmp ($res, "VERIFIED") == 0) { 
       if ($_POST['payment_status'] = "Completed") { 
        file_put_contents('log.txt', 'verified'); 
        $username = $_POST['custom']; 
        require_once('classes/admin.class.php'); 
        $activate = new Admin($db); 
        $activate->modifyUser($username, 'activate'); 
       } 
      } else { 
       file_put_contents('log.txt', $_POST['payment_status']); 
      } 
     } 
    } 
} 
?> 
관련 문제