IPN PayPal

  • Creatore Discussione Creatore Discussione Mr. PHP
  • Data di inizio Data di inizio

Mr. PHP

Utente Attivo
31 Gen 2013
141
0
0
Salve ragazzi, qualcuno sa come gestire le info inviate da paypal ??? potreste mostrarmi degli esempi ? In giro su internet ho trovato questo.
PHP:
// intercetta le variabili IPN inviate da PayPal   
$req = 'cmd=_notify-validate';
 
 
// legge l'intero contenuto dell'array POST e replica una nuova variabile
foreach ($_POST as $key => $value){
    $value = urlencode(stripslashes($value));
    	$req .= '&'.$key.'='.$value;
}
//Generazione degli header secondo il nuovo standard PayPal
$header = "POST /cgi-bin/webscr HTTP/1.1\r\n";
$header .= "Content-Type: application/x-www-form-urlencoded\r\n";
$header .= "Host: www.paypal.com\r\n";  // www.paypal.com for a live site
$header .= "Content-Length: " . strlen($req) . "\r\n";
$header .= "Connection: close\r\n\r\n";
 
// apre una connessione al socket PayPal 
$fp = fsockopen ('ssl://www.paypal.com', 443, $errno, $errstr, 30);
 
 
// converte le variabili inviate da IPN in variabili locali
$custom             = filter_var($_POST['custom']           , FILTER_SANITIZE_STRING);
$txn_id             = filter_var($_POST['txn_id']           , FILTER_SANITIZE_STRING);
$payment_status     = filter_var($_POST['payment_status']   , FILTER_SANITIZE_STRING);
$receiver_email     = filter_var($_POST['receiver_email']   , FILTER_SANITIZE_EMAIL);
$payer_email        = filter_var($_POST['payer_email']      , FILTER_SANITIZE_EMAIL);
$first_name         = filter_var($_POST['first_name']       , FILTER_SANITIZE_STRING);
$last_name          = filter_var($_POST['last_name']        , FILTER_SANITIZE_STRING);
$address_street     = filter_var($_POST['address_street']   , FILTER_SANITIZE_STRING);
$address_city       = filter_var($_POST['address_city']     , FILTER_SANITIZE_STRING);
$address_state      = filter_var($_POST['address_state']    , FILTER_SANITIZE_STRING);
$address_zip        = filter_var($_POST['address_zip']      , FILTER_SANITIZE_STRING);
 
if( ! $fp ){
        exit();
    } else {     
 
        fputs ($fp, $header . $req);
 
        while (!feof($fp)) {
           $res = fgets ($fp, 1024);
           if (stripos($res, "VERIFIED") !== false)  {
                if($receiver_email == "[email protected]"){
                         
                }
           }
 
 
            if (strcmp ($res, "INVALID") == 0) {
 
 
            } 
        }//while   
    }//else
Vorrei approfondire la cosa...
 
Ho creato una pagina transition.php ed ho inserito questo codice. Che ne di te ??? Cmq mi servirebbe l id della transazione qualcuno sa dirmi quale ? magari spiegarmi meglio tutti i campi...
PHP:
<?php

! isset( $_POST ) && exit;

$paypal = array (
				  'residence_country',
				  'invoice',
				  'address_city',
				  'first_name',
				  'payer_id',
				  'shipping',
				  'mc_fee',
				  'txn_id',
				  'receiver_email',
				  'quantity',
				  'custom',
				  'reason_code',
				  'payment_date',
				  'for_auction',
				  'address_country_code',
				  'address_zip',
				  'item_name1',
				  'mc_handling',
				  'mc_handling1',
				  'tax',
				  'item_name',
				  'address_name',
				  'auction_buyer_id',
				  'last_name',
				  'receipt_ID',
				  'receiver_id',
				  'item_number',
				  'verify_sign',
				  'address_country',
				  'payment_status',
				  'address_status',
				  'business',
				  'payer_email',
				  'notify_version',
				  'txn_type',
				  'test_ipn',
				  'payer_status',
				  'mc_currency',
				  'mc_gross',
				  'mc_shipping',
				  'mc_shipping1',
				  'item_number1',
				  'auction_closing_date',
				  'quantity1',
				  'address_state',
				  'mc_gross1',
				  'pending_reason',
				  'parent_txn_id',
				  'payment_type',
				  'address_street',
);

foreach( $paypal as $val ){
	
	$$val = isset( $_POST[$val] ) ? $_POST[$val] : null;

	$insert = array(
					'author' => $_COOKIE['ID'],
					'key' => $val,
					'value' => isset( $_POST[$val] ) ? $_POST[$val] : null,
	);
	
	insert( 'premiummeta', $insert );

}

$payment_status != 'Completed' || $payer_status != 'verified' && exit;


// Controllo ID per aggiungere o meno i mesi
$add = '+1 month';

// Verifica s è già un utente premium
select( '*', 'premium', 'premium_author="'.$_COOKIE['ID'].'" AND premium_status="1"' );

if( num_rows() == 1 ){
	
	$obj = fetch_object();
		
	$date_end = $obj->premium_date_end;

}

// Controllo se la data di scadenza premium esitte
$end = isset( $date_end ) ? date( 'Y-m-d', strtotime( $date_end.' '.$add ) ) : date( 'Y-m-d', strtotime( $add ) );

//Aggiornare tutti i campi a 0
update( 'premium', 'premium_status="0"', 'premium_author="'.$_COOKIE['ID'].'"' );

$insert = array(
				'premium_author' => Cookie::get('ID'),
				'premium_date_start' => date('Y-m-d'),
				'premium_date_end' => $end,
				
);

// Inserire il nuovo record
insert( 'premium', $insert );

// Aggiornare a Premium
update( 'users', 'users_premium="1"', 'users_ID="'.$_COOKIE['ID'].'"' );

$header = '';

$message = '';

// Invio Email
send( $_COOKIE['email'], $header, $message );

?>
 
Ultima modifica:

Discussioni simili