2014-08-30 114 views
0

我正在使用以下代码将信息存储在数据库中的php。PayPal的原始交易ID不存储在数据库中

if (!isset($_POST["txn_id"]) && !isset($_POST["txn_type"])){ 

    // Firstly Append paypal account to querystring 
    @$querystring .= "?business=".urlencode($paypal_email)."&"; 

    // Append amount& currency (£) to quersytring so it cannot be edited in html 

    //The item name and amount can be brought in dynamically by querying the $_POST['item_number'] variable. 
    $querystring .= "item_name=".urlencode($item_name)."&"; 
    $querystring .= "amount=".urlencode($item_amount)."&"; 

    //loop for posted values and append to querystring 
    foreach($_POST as $key => $value){ 
     $value = urlencode(stripslashes($value)); 
     $querystring .= "$key=$value&"; 
    } 

    // Append paypal return addresses 
    $querystring .= "return=".urlencode(stripslashes($return_url))."&"; 
    $querystring .= "cancel_return=".urlencode(stripslashes($cancel_url))."&"; 
    $querystring .= "notify_url=".urlencode($notify_url); 

    // Append querystring with custom field 
    //$querystring .= "&custom=".USERID; 

    // Redirect to paypal IPN 
    header('location:https://www.sandbox.paypal.com/cgi-bin/webscr'.$querystring); 
    exit(); 

} else{ 

    // Response from Paypal 

    // read the post from PayPal system and add 'cmd' 
    $req = 'cmd=_notify-validate'; 
    foreach ($_POST as $key => $value) { 
     $value = urlencode(stripslashes($value)); 
     $value = preg_replace('/(.*[^%^0^D])(%0A)(.*)/i','${1}%0D%0A${3}',$value);// IPN fix 
     $req .= "&$key=$value"; 
    } 


    // assign posted variables to local variables 
    $data['userid']   = $_POST['userid']; 
    $data['quantity']  = $_POST['quantity']; 
    $data['item_name']  = $_POST['item_name']; 
    $data['item_number']  = $_POST['item_number']; 
    $data['payment_status']  = $_POST['payment_status']; 
    $data['payment_amount']  = $_POST['mc_gross']; 
    $data['payment_currency'] = $_POST['mc_currency']; 
    $data['txn_id']   = $_POST['txn_id']; 
    $data['receiver_email']  = $_POST['receiver_email']; 
    $data['payer_email']  = $_POST['payer_email']; 
    $data['custom']   = $_POST['custom']; 


    // 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.sandbox.paypal.com', 443, $errno, $errstr, 30); 

    if (!$fp) { 
     // HTTP ERROR 
    } else {  

     fputs ($fp, $header . $req); 
     while (!feof($fp)) { 
      $res = fgets ($fp, 1024); 

       $valid_txnid = check_txnid($data['txn_id']); 
       $valid_price = check_price($data['payment_amount'], $data['item_number']); 


     if($valid_txnid && $valid_price){ 

    $sql = "INSERT INTO payments (txnid, payment_amount, payment_status, packageID, createdtime,UserID) VALUES (
       '".$_POST['txn_id']."' , 
       '".$_POST['mc_gross']."' , 
       '".$_POST['payment_status']."' , 
       '".$_POST['item_number']."' , 
       '".date("Y-m-d H:i:s")."' , 
     '".$userid."')"; 
    $paymentQueryResult= mysql_query($sql,$link);    

      if($paymentQueryResult){ 

       echo "Payment has been made & successfully inserted into the Database";   
         // Payment has been made & successfully inserted into the Database   

      } 
      else{ 
       echo "Payment has been made but not recorded in system database. Please contact administrator ";        
         // Error inserting into DB 
         // E-mail admin or alert user 

        } 
       }else{ 
        echo "Payment made but data has been changed";    
        // Payment made but data has been changed 
        // E-mail admin or alert user 

       }      

     }  
    fclose ($fp); 
    } 
} 

但在我的情况下,从PayPal交易后显示交易ID不相同,其通过上面的代码存储在数据库中的事务ID。数据库中不同的事务标识存储或两个事务标识不同。

我已经寻找解决方案,但没有取得成功。

请给我这个问题的正确解决方案。

在此先感谢!

回答

0

PayPal为单次交易向买方和卖方分配不同的交易ID。听起来就像你正在通过结帐并在屏幕上看到一个交易ID,这是PayPal向买家呈现的。您的IPN解决方案正在接收他们向卖家提供的交易ID。

您应该可以在PayPal账户中搜索任何一个交易ID来查找交易详情,但是您将再次看到买家和卖家的不同ID。这个是正常的。

+0

谢谢@安德鲁。 – 2014-09-02 03:59:02