scusatemi ragazzi ma sono nuovissimo di questo forum e volevo sapere se qualcuno mi potesse dare una mano con l'ipn di paypal perchè cerco di testarlo su siti fittizi cioè ho un finto sito eshop in locale che mi permette di comprare un oggetto tramite paypal. Cliccando sul bottone per acquistare si passa su una pagina che salva la richiesta sul database e tramite redirect passa la palla alla sandbox di paypal (passa quindi le variabili necessarie tramite URL e non tramite form) la transazione viene portata a termine dal cliente registrato anch'esso con paypal e che alla fine viene reindirizzato sulla pagina di ringraziamento del sito eshop.
Il mio file ipn.php apparentemente non viene neanche letto se uso il passaggio delle variabili tramite URL mentre se opto per il passaggio di dati tramite form il file viene letto da paypal ma non viene salvato nessun record sul database.
Codice PHP:
<?php

ini_set
("SMTP","smtp.tiscali.it");
//metti come secondo parametro l'indirizzo del server SMTP

ini_set("smtp_port","25");
//metti come secondo parametro il la porta del server SMTP

ini_set("sendmail_from","mia@email.com");
//metti come secondo parametro l'indirizzo e-mail del mittente

mail('mia@email.com''test''è stato letto il file ipn','From: [email]altra@mail.com[/email]');


/////////////////////////////////////////////////
/////////////Begin Script below./////////////////
/////////////////////////////////////////////////

// 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 ('www.paypal.com'80$errno$errstr30);


// assign posted variables to local variables
$item_name $_POST['item_name'];
$business $_POST['business'];
$item_number $_POST['item_number'];
$payment_status $_POST['payment_status'];
$mc_gross $_POST['mc_gross'];
$payment_currency $_POST['mc_currency'];
$txn_id $_POST['txn_id'];
$receiver_email $_POST['receiver_email'];
$receiver_id $_POST['receiver_id'];
$quantity $_POST['quantity'];
$num_cart_items $_POST['num_cart_items'];
$payment_date $_POST['payment_date'];
$first_name $_POST['first_name'];
$last_name $_POST['last_name'];
$payment_type $_POST['payment_type'];
$payment_status $_POST['payment_status'];
$payment_gross $_POST['payment_gross'];
$payment_fee $_POST['payment_fee'];
$settle_amount $_POST['settle_amount'];
$memo $_POST['memo'];
$payer_email $_POST['payer_email'];
$txn_type $_POST['txn_type'];
$payer_status $_POST['payer_status'];
$address_street $_POST['address_street'];
$address_city $_POST['address_city'];
$address_state $_POST['address_state'];
$address_zip $_POST['address_zip'];
$address_country $_POST['address_country'];
$address_status $_POST['address_status'];
$item_number $_POST['item_number'];
$tax $_POST['tax'];
$option_name1 $_POST['option_name1'];
$option_selection1 $_POST['option_selection1'];
$option_name2 $_POST['option_name2'];
$option_selection2 $_POST['option_selection2'];
$for_auction $_POST['for_auction'];
$invoice $_POST['invoice'];
$custom $_POST['custom'];
$notify_version $_POST['notify_version'];
$verify_sign $_POST['verify_sign'];
$payer_business_name $_POST['payer_business_name'];
$payer_id =$_POST['payer_id'];
$mc_currency $_POST['mc_currency'];
$mc_fee $_POST['mc_fee'];
$exchange_rate $_POST['exchange_rate'];
$settle_currency  $_POST['settle_currency'];
$parent_txn_id  $_POST['parent_txn_id'];
$pending_reason $_POST['pending_reason'];
$reason_code $_POST['reason_code'];


// subscription specific vars

$subscr_id $_POST['subscr_id'];
$subscr_date $_POST['subscr_date'];
$subscr_effective  $_POST['subscr_effective'];
$period1 $_POST['period1'];
$period2 $_POST['period2'];
$period3 $_POST['period3'];
$amount1 $_POST['amount1'];
$amount2 $_POST['amount2'];
$amount3 $_POST['amount3'];
$mc_amount1 $_POST['mc_amount1'];
$mc_amount2 $_POST['mc_amount2'];
$mc_amount3 $_POST['mcamount3'];
$recurring $_POST['recurring'];
$reattempt $_POST['reattempt'];
$retry_at $_POST['retry_at'];
$recur_times $_POST['recur_times'];
$username $_POST['username'];
$password $_POST['password'];

//auction specific vars

$for_auction $_POST['for_auction'];
$auction_closing_date  $_POST['auction_closing_date'];
$auction_multi_item  $_POST['auction_multi_item'];
$auction_buyer_id  $_POST['auction_buyer_id'];



//DB connect creds and email 
$notify_email =  "mia@email.com";         //email address to which debug emails are sent to
$DB_Server "localhost"//your MySQL Server
$DB_Username "project"//your MySQL User Name
$DB_Password "project"//your MySQL Password
$DB_DBName "project"//your MySQL Database Name


if (!$fp) {
// HTTP ERROR
} else {
fputs ($fp$header $req);
while (!
feof($fp)) {
$res fgets ($fp1024);
if (
strcmp ($res"VERIFIED") == 0) {



//create MySQL connection
$Connect = @mysql_connect($DB_Server$DB_Username$DB_Password)
or die(
"Couldn't connect to MySQL:
mysql_error() . "
mysql_errno());


//select database
$Db = @mysql_select_db($DB_DBName$Connect)
or die(
"Couldn't select database:
mysql_error(). "
mysql_errno());


$fecha date("m")."/".date("d")."/".date("Y");
$fecha date("Y").date("m").date("d");

//check if transaction ID has been processed before
$checkquery "select txnid from paypal_payment_info where txnid='".$txn_id."'";
$sihay mysql_query($checkquery) or die("Duplicate txn id check query failed:
mysql_error() . "
mysql_errno());
$nm mysql_num_rows($sihay);
if (
$nm == 0){

//execute query



    
if ($txn_type == "cart"){
    
$strQuery "insert into paypal_payment_info(paymentstatus,buyer_email,firstname,lastname,street,city,state,zipcode,country,mc_gross,mc_fee,memo,paymenttype,paymentdate,txnid,pendingreason,reasoncode,tax,datecreation) values ('".$payment_status."','".$payer_email."','".$first_name."','".$last_name."','".$address_street."','".$address_city."','".$address_state."','".$address_zip."','".$address_country."','".$mc_gross."','".$mc_fee."','".$memo."','".$payment_type."','".$payment_date."','".$txn_id."','".$pending_reason."','".$reason_code."','".$tax."','".$fecha."')";

     
$result mysql_query($strQuery) or die("Cart - paypal_payment_info, Query failed:
mysql_error() . "
mysql_errno());
     for (
$i 1$i <= $num_cart_items$i++) {
         
$itemname "item_name".$i;
         
$itemnumber "item_number".$i;
         
$on0 "option_name1_".$i;
         
$os0 "option_selection1_".$i;
         
$on1 "option_name2_".$i;
         
$os1 "option_selection2_".$i;
         
$quantity "quantity".$i;

         
$struery "insert into paypal_cart_info(txnid,itemnumber,itemname,os0,on0,os1,on1,quantity,invoice,custom) values ('".$txn_id."','".$_POST[$itemnumber]."','".$_POST[$itemname]."','".$_POST[$on0]."','".$_POST[$os0]."','".$_POST[$on1]."','".$_POST[$os1]."','".$_POST[$quantity]."','".$invoice."','".$custom."')";
         
$result mysql_query($struery) or die("Cart - paypal_cart_info, Query failed:
mysql_error() . "
mysql_errno());

     }
    }



    else{
     
$strQuery "insert into paypal_payment_info(paymentstatus,buyer_email,firstname,lastname,street,city,state,zipcode,country,mc_gross,mc_fee,itemnumber,itemname,os0,on0,os1,on1,quantity,memo,paymenttype,paymentdate,txnid,pendingreason,reasoncode,tax,datecreation) values ('".$payment_status."','".$payer_email."','".$first_name."','".$last_name."','".$address_street."','".$address_city."','".$address_state."','".$address_zip."','".$address_country."','".$mc_gross."','".$mc_fee."','".$item_number."','".$item_name."','".$option_name1."','".$option_selection1."','".$option_name2."','".$option_selection2."','".$quantity."','".$memo."','".$payment_type."','".$payment_date."','".$txn_id."','".$pending_reason."','".$reason_code."','".$tax."','".$fecha."')";
     
$result mysql_query("insert into paypal_payment_info(paymentstatus,buyer_email,firstname,lastname,street,city,state,zipcode,country,mc_gross,mc_fee,itemnumber,itemname,os0,on0,os1,on1,quantity,memo,paymenttype,paymentdate,txnid,pendingreason,reasoncode,tax,datecreation) values ('".$payment_status."','".$payer_email."','".$first_name."','".$last_name."','".$address_street."','".$address_city."','".$address_state."','".$address_zip."','".$address_country."','".$mc_gross."','".$mc_fee."','".$item_number."','".$item_name."','".$option_name1."','".$option_selection1."','".$option_name2."','".$option_selection2."','".$quantity."','".$memo."','".$payment_type."','".$payment_date."','".$txn_id."','".$pending_reason."','".$reason_code."','".$tax."','".$fecha."')") or die("Default - paypal_payment_info, Query failed:
mysql_error() . "
mysql_errno());
    }

//inizio aggiornamento della mia tabella sul db
$update="UPDATE tid_request SET status='commit' WHERE paldid='$business'";
$ins_update=@mysql_query($update);
//fine aggiornamento della mia tabella sul db

    // send an email in any case
 
echo "Verified";
     
mail($notify_email"VERIFIED IPN""$res\n $req\n $strQuery\n $struery\n  $strQuery2");
}
else {
// send an email

mail($notify_email"VERIFIED DUPLICATED TRANSACTION""$res\n $req \n $strQuery\n $struery\n  $strQuery2");
}

    
//subscription handling branch
    
if ( $txn_type == "subscr_signup"  ||  $txn_type == "subscr_payment"  ) {

      
// insert subscriber payment info into paypal_payment_info table
      
$strQuery "insert into paypal_payment_info(paymentstatus,buyer_email,firstname,lastname,street,city,state,zipcode,country,mc_gross,mc_fee,memo,paymenttype,paymentdate,txnid,pendingreason,reasoncode,tax,datecreation) values ('".$payment_status."','".$payer_email."','".$first_name."','".$last_name."','".$address_street."','".$address_city."','".$address_state."','".$address_zip."','".$address_country."','".$mc_gross."','".$mc_fee."','".$memo."','".$payment_type."','".$payment_date."','".$txn_id."','".$pending_reason."','".$reason_code."','".$tax."','".$fecha."')";
      
$result mysql_query($strQuery) or die("Subscription - paypal_payment_info, Query failed:
mysql_error() . "
mysql_errno());


         
// insert subscriber info into paypal_subscription_info table
        
$strQuery2 "insert into paypal_subscription_info(subscr_id , sub_event, subscr_date ,subscr_effective,period1,period2, period3, amount1 ,amount2 ,amount3,  mc_amount1,  mc_amount2,  mc_amount3, recurring, reattempt,retry_at, recur_times, username ,password, payment_txn_id, subscriber_emailaddress, datecreation) values ('".$subscr_id."', '".$txn_type."','".$subscr_date."','".$subscr_effective."','".$period1."','".$period2."','".$period3."','".$amount1."','".$amount2."','".$amount3."','".$mc_amount1."','".$mc_amount2."','".$mc_amount3."','".$recurring."','".$reattempt."','".$retry_at."','".$recur_times."','".$username."','".$password."', '".$txn_id."','".$payer_email."','".$fecha."')";
        
$result mysql_query($strQuery2) or die("Subscription - paypal_subscription_info, Query failed:
mysql_error() . "
mysql_errno());


             
mail($notify_email"VERIFIED IPN""$res\n $req\n $strQuery\n $struery\n  $strQuery2");

    }
}

// if the IPN POST was 'INVALID'...do this


else if (strcmp ($res"INVALID") == 0) {
// log for manual investigation

mail($notify_email"INVALID IPN""$res\n $req");
}
}
fclose ($fp);
}
?>
questo è il mio script ipn.php dove all'inizio ho messo un invio di una email per sapere quando è stato aperto da paypal