2011-10-23 408 views
0

用戶後,使它們返回到這個頁面付款:貝寶PDT - 沒有收到響應(PHP)

// read the post from PayPal system and add 'cmd' 
$req = 'cmd=_notify-synch'; 

$tx_token = $_GET['tx']; 
$auth_token = "REMOVEDFROMQUESTION"; 
$req .= "&tx=$tx_token&at=$auth_token"; 

// 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"; 

// url for paypal sandbox 
$fp = fsockopen ('www.sandbox.paypal.com', 80, $errno, $errstr, 30);  

// url for payal 
// $fp = fsockopen ('www.paypal.com', 80, $errno, $errstr, 30); 
// If possible, securely post back to paypal using HTTPS 
// Your PHP server will need to be SSL enabled 
// $fp = fsockopen ('ssl://www.paypal.com', 443, $errno, $errstr, 30); 

if (!$fp) { 
    // HTTP ERROR 
    echo "http error"; 
} else { 
    fputs ($fp, $header . $req); 
    // read the body data 
    $res = ''; 
    $headerdone = false; 
    while (!feof($fp)) { 
     $line = fgets ($fp, 1024); 
     if (strcmp($line, "\r\n") == 0) { 
      // read the header 
      $headerdone = true; 
     } 
     else if ($headerdone) { 
      // header has been read. now read the contents 
      $res .= $line; 
     } 
    } 

    // parse the data 
    $lines = explode("\n", $res); 
    $keyarray = array(); 
    if (strcmp ($lines[0], "SUCCESS") == 0) { 
     for ($i=1; $i<count($lines);$i++){ 
      list($key,$val) = explode("=", $lines[$i]); 
      $keyarray[urldecode($key)] = urldecode($val); 
     } 
     // check the payment_status is Completed 
     // check that txn_id has not been previously processed 
     // check that receiver_email is your Primary PayPal email 
     // check that payment_amount/payment_currency are correct 
     // process payment 
     $firstname = $keyarray['first_name']; 
     $lastname = $keyarray['last_name']; 
     $itemname = $keyarray['item_name']; 
     $amount = $keyarray['payment_gross']; 

     echo ("<p><h3>Thank you for your purchase!</h3></p>"); 

     echo ("<b>Payment Details</b><br>\n"); 
     echo ("<li>Name: $firstname $lastname</li>\n"); 
     echo ("<li>Item: $itemname</li>\n"); 
     echo ("<li>Amount: $amount</li>\n"); 
     echo (""); 
    } 
    else if (strcmp ($lines[0], "FAIL") == 0) { 
     // log for manual investigation 
     echo "fail"; 
    } else { 
     echo "fail2"; 
    } 
} 
fclose ($fp); 

PayPal是用戶成功地返回到與正確的GET變量頁:

?status=success&tx=203229VT863344T&st=Pending&amt=76.00&cc=GBP&cm=19&item_number= 

但是當腳本運行時,它返回「error2」。當我嘗試輸出迴應時,我什麼也得不到。

感謝您的幫助。

+0

不應該的fsockopen是指定SSL://sandbox.paypal.com?你還沒有提到ssl協議。還有哪裏會出現「error2」?你的代碼片段沒有「error2」。 – while1

回答

2

你應該張貼回:
$fp = fsockopen ('ssl://www.sandbox.paypal.com', 443, $errno, $errstr, 30);

而不是:
$fp = fsockopen ('www.sandbox.paypal.com', 80, $errno, $errstr, 30);