2017-03-04 59 views
0

當有人想從我這裏買東西的網站,他不得不填補創造這樣的URL和重定向到PayPal的一種形式:PayPal;不顯示訂單令牌公共

https://www.paypal.com/cgi-bin/webscr?cmd=_xclick&[email protected]&Product_Number_11&amount=4.20&return=http://www.example.com/product/Product_Number_11/%26payment=success%26order_token=a3f7e6fc6273c368ab374c5152ff2b63&cancel_return=http://www.example.com/error.php 

這將發送帳單明細到PayPal。如果支付成功,PayPal將重定向到http://www.example.com/product/Product_Number_11/&payment=success&order_token=a3f7e6fc6273c368ab374c5152ff2b63。我網站上的腳本將獲得order_token,並通過將產品發送給買方來完成訂單。

問題是:用戶可以複製字符串http://www.example.com/product/Product_Number_11/&payment=success&order_token=a3f7e6fc6273c368ab374c5152ff2b63並手動在瀏覽器中調用它,而無需付費。

我能做些什麼來防止這種情況發生? PayPal網站證書是否正確?

回答

0

事實上,您無法阻止用戶手動撥打付款URL。 你需要做的是從PayPal本身請求驗證。

每次收到付款時,做的第一件事就是打開至www.paypal.com的連接,併發送所有收到的POST數據,如果加上可變CMD:CMD = _notify-驗證

下面是一個例子支付驗證:

// 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 => RETRY LATER and check $errstr 
} 
else { 
    fputs($fp, $header.$req); 
    while (!feof($fp)) { 
    $res = fgets($fp, 1024); 
    if (strcmp($res, "VERIFIED") == 0) { 
     // PAYMENT VALIDATED & VERIFIED! 
     break; 
    } 
    else if (strcmp($res, "INVALID") == 0) { 
     // PAYMENT INVALID => INVESTIGATE MANUALLY! 
     break; 
    } 
    } 
    fclose($fp); 
} 

結論:如果你沒有得到來自PayPal的VERIFIED狀態不自動發送的產品給客戶。