• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

ipn erweitern?

syuam

Neues Mitglied
hey ich hätte da mal eine Frage, also es geht grundsätzlich um den Umgang mit einem ipn-script. Ganz am Anfang geht es ja darum, ein Produkt auszuwählen und dann den "buy-now-Button" zu drücken, der dann schlussendlich auf das ipn-Script umleitet. Das Schema für das script wäre dann:
PHP:
<?php
// Check to see there are posted variables coming into the script
if ($_SERVER['REQUEST_METHOD'] != "POST") die ("No Post Variables");
// Initialize the $req variable and add CMD key value pair
$req = 'cmd=_notify-validate';
// Read the post from PayPal
foreach ($_POST as $key => $value) {
    $value = urlencode(stripslashes($value));
    $req .= "&$key=$value";
}
// Now Post all of that back to PayPal's server using curl, and validate everything with PayPal
// Use CURL instead of PHP for this for a more universally operable script (not fsockopen)
//$url = "https://www.sandbox.paypal.com/cgi-bin/webscr?cmd=_notify-validate;
$url = "https://www.sandbox.paypal.com/cgi-bin/webscr?cmd=_notify-validate";
$curl_result=$curl_err='';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $req);
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type: application/x-www-form-urlencoded", "Content-Length: " . strlen($req)));
curl_setopt($ch, CURLOPT_HEADER , 0);   
curl_setopt($ch, CURLOPT_VERBOSE, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
$curl_result = @curl_exec($ch);
$curl_err = curl_error($ch);
curl_close($ch);
$req = str_replace("&", "\n", $req);  // Make it a nice list => Possibility to email it to yourselve for reporting
// Check that the result verifies
if (strpos($curl_result, "VERIFIED") !== false) {
    $req .= "\n\nPaypal Verified OK";
} else {
 $req .= "\n\nData NOT verified from Paypal!";
 exit();
}                                      
/* CHECK THESE 4 THINGS BEFORE PROCESSING THE TRANSACTION, HANDLE THEM AS YOU WISH
1. Make sure that business email returned is your business email
2. Make sure that the transaction’s payment status is “completed”
3. Make sure there are no duplicate txn_id
4. Make sure the payment amount matches what you charge for items. (Defeat Price-Jacking) */
 
// END ALL SECURITY CHECKS NOW IN THE DATABASE IT GOES ------------------------------------
////////////////////////////////////////////////////
// Assigning local variables from the POST variables

// Place the transaction into the database

// Mail yourself the details
?>
Aber was wenn der user nun bevor er den "buy-now-Button" betätigt, noch eine andere Option auswählen muss( z.B. select-option mit den Farben rot,blau und grün )? Angenommen, der user vergisst diese Option auszuwählen und drückt auf den "buy-now-Button". Sollte ich es dann so machen? :
PHP:
 if(isset($_POST['Farbe'])) { // das ganze ipn-script von oben }
sollte ich es dann so machen?
 
ja klar danke :) es ging mir nur darum, ob ich ein ganzes ipn-script in eine if-Bedingung setzen kann oder es anders machen sollte..
 
ne warte mal,

das ist doch der IPN script der prüft doch erst nach dem Bezahlen die Daten die von Paypal kommen hin und her ab und gibt dann ein "Paypal Verified OK" aus (normal wird ja eine Mail verschickt oder DB was geändert).
Das hat also nichts mit senden zu tun an Paypal.

Das passiert doch eher mit einer head() weiterleitung nach dem alle Daten geprüft wurden wie radio richtig gesetzt.

Cheffchen
 
hmm und wie sollte ich jetzt prüfen ob "radio" überhaupt gesetzt wurde mit einer head() weiterleitung?
 
Hallo,

also da gibts 2 wege dich ich gehe, je nach dem.

zb: ein Bestellformular das die daten immer an sich selber schickt (affenformular) und beim wieder empfangen prüft, Zb Alle felder richtig ausgefüllt.
Wenn alles schick wird der paypal Link zusammen gesetzt und per header() an paypal geschickt.

PHP:
$query="cmd=_xclick&business=PAYPALKONTO-EMAIL&notify_url=http://IPNURL/ipn.php&return=http://ZURÜCKurlWENNbezahlt.de&cancel_return=http:/ZURÜCKurlWENNangebrochen.de&lc=DE&currency_code=EUR&custom=WERSTECKTEinformationenDIEmitGESENDETwerdenABERkeinerSIEHTzbPREISidODERnichts&item_name=BESTELLUNGSnameArtikel&amount=".str_replace(",", ".", $_SESSION['summe'])."&shipping=".$_SESSION['versand']."&on0=Produkte ".$_SESSION['anzahl']; 

      # urldecode .sandbox
      $url                = 'https://www.paypal.com/cgi-bin/webscr?'.utf8_decode($query); 

      ob_end_clean();
      header("Location: ".$url);
      exit;

Das ganze mach ich entweder als extra Datei um verschieden Bestellseiten machen zu können oder gleich mit einer Art warenkorb was ich aber eher ungern mache.

Cheffchen
 
ok danke erstmal, dass du dich an meinem thread beteiligst :) Größere Projekte mit Warenkorb etc würde ich erstmal meiden und mich an etwas einfacherem versuchen: Angenommen, man hat einfach nur ein Produkt (z.B. ein Pullover) und ein select-Menü mit drei Farben. Nun ist am Anfang erstmal keine Farbe ausgewählt, aber der user klickt auf den "paypal-Button". Nun muss aber noch eine Farbe ausgewählt werden, denn sonst weiß der Verkäufer nicht, welche Farbe der Pullover haben soll. Deine Methode verstehe ich leider nicht ganz, könntest du das vielleicht genauer erklären oder auf die Literatur verweisen die sich damit auseinandersetzt? fände ich echt nett, danke
 
Hallo,

ich mach das in der regel so, kann sein das dies schon etwas viel ist aber selects mach ich halt so.

PHP:
<?php
$fehler=array();

if(isset($_POST['senden'])){

    
    if($_POST['farbe']==''){
        $fehler['farbe']='keine Farbe gefählt.';
    }    
    
    if(empty($fehler)){
        #hier ist dann der link zu Paypal
        header('Location: http://www.google.de');
    }    
}
?>
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Unbenanntes Dokument</title>
</head>
<body>
<?php echo implode('<br>', $fehler); ?>
<form action="" method="post">

    Farbe:
    <select name="farbe" size="1">  
    <?php
    foreach (array(''=>'Auswählen', 'red'=>'Rot', 'blue'=>'Blau') as $value => $key) {
        echo '<option value="'.$value.'" ';      
        if (isset($_POST['farbe']) && $_POST['farbe']=="$value" ) {
            echo 'selected="selected" ';
        }
        echo '>'.$key.'</option>';
    }
    ?>
    </select><br>  

  <br>
  <input name="senden" type="submit" value="Kaufen">
  </select>
</form>
</body>
</html>
Cheffchen
 
mhm ok in die Materie werde ich mich jetzt einlesen, danke :) Nur eine Frage: Wieso kommt noch ein zweites "</select>" ?
 
Zurück
Oben