2017-03-04 2 views
0

Wenn jemand will Website etwas von mir kaufen, die er ein Formular ausfüllen muss, der eine URL wie diese und die Umleitung zu PayPal schaffe:PayPal; zeigen keine Ordnung Token öffentliche

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 

Dadurch werden die Rechnungsdaten übertragen zu PayPal. Wenn die Zahlung erfolgreich ist, wird PayPal zu http://www.example.com/product/Product_Number_11/&payment=success&order_token=a3f7e6fc6273c368ab374c5152ff2b63 umleiten. Das Skript auf meiner Website wird die order_token erhalten und die Bestellung abschließen, indem Sie das Produkt an den Käufer senden.

Problem ist: Ein Benutzer könnte die Zeichenfolge http://www.example.com/product/Product_Number_11/&payment=success&order_token=a3f7e6fc6273c368ab374c5152ff2b63 kopieren und im Browser manuell aufrufen, ohne bezahlt zu haben.

Was kann ich tun, um dies zu verhindern? Ist PayPal Website-Zertifikat das Richtige?

Antwort

0

In der Tat können Sie nicht verhindern, dass ein Benutzer die Zahlungs-URL manuell aufruft. Was Sie tun müssen, ist eine Bestätigung von PayPal selbst anzufordern.

Jedes Mal, wenn Sie eine Zahlung erhalten, ist das erste, was zu tun, um eine Verbindung mit www.paypal.com, zu öffnen und all POST-Daten die Sie erhalten hat, mit dem zusätzlichen Variable cmd senden: cmd = _notify- Validiere. Hier

ist ein Beispiel Zahlungsvalidierung:

// 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); 
} 

Fazit: nicht automatisch ein Produkt an einen Kunden senden, wenn Sie nicht über die Status von PayPal GEPRÜFT bekommen.

Verwandte Themen