Guida PHP - Automatizzazione itemshop

Stato
Discussione chiusa ad ulteriori risposte.

Webber

Utente Emerald
18 Giugno 2012
621
33
314
351
Ultima modifica da un moderatore:
Salve ragazzi, oggi vi pubblico una classe php che ho fatto per scopi personali che vi permette di automatizzare le vostre donazioni paypal.

PHP:
<?php
class Donation {
	private $url = 'https://www.sandbox.paypal.com/cgi-bin/webscr?cmd=_donations';
	private $options = array (
			'item_name' => '',
			'amount' => '',
			'currency_code' => 'EUR',
			'business' => '',
			'rm' => 2,
			'cbt' => 'Ritorna al sito',
			'return' => '',
			'cancel_return' => '',
			'notify_url' => '' 
	);
	private $status = null;
	public function set_request_options($options) {
		if (! is_array ( $options ))
			exit ( "Options argument must be an array" );
		if (! (isset ( $options ['item_name'] ) and isset ( $options ['amount'] ) and isset ( $options ['business'] ) and isset ( $options ['return'] ) and isset ( $options ['cancel_return'] )))
			exit ( "Wrong argument passed" );
		$this->options = array_merge ( $this->options, $options );
		$this->status = 'options_checked';
		$this->_buildurl ();
	}
	public function do_request() {
		if ($this->status === 'options_checked') {
			$url = $this->url;
			header ( "Location: $url" );
			exit ();
		}
	}
	private function _buildurl() {
		if ($this->status === 'options_checked') {
			foreach ( $this->options as $k => $v ) {
				$this->url .= '&' . $k . "=" . $v;
			}
		}
	}
	public function ipn() {
		$host = gethostbyaddr ( $_SERVER ['REMOTE_ADDR'] );
		if (!($host == "ipn.paypal.com" OR $host == "ipn.sandbox.paypal.com" OR $host == "paypal.com" OR $host == "sandbox.paypal.com")) {
			return FALSE;
		} else {
			if ($_POST) {
				$return = $_POST;
				return $return;
			} else {
				return FALSE;
			}
		}
	}
}

Esempio di funzionamento:
file1.php (quello che esegue il redirect al sito di paypal)

PHP:
<?php
require_once 'paypal_donation.php'; //nome del file che contiene la classe

$options = array(
'item_name'=>'Nome del prodotto',
'amount'=>'20',
'business'=>'[email protected]',
'return'=>'http://nomesito.it/',
'notify_url'=>'http://nomesito.it/file2.php',
'custom'=>'Nome Utente', //Campo che potete usare come volete, per esempio per il nome dell'utente
'cancel_return'=>'http://nomesito.it');

$paypal = new Donation();
$paypal->set_request_options($options); //Imposta le opzioni
$paypal->do_request(); //Esegue il redirect a paypal

file2.php (quello che controlla se il pagamento è avvenuto e esegue per esempio l'aggiunta delle monete)

PHP:
<?php
require_once 'paypal_donation.php';
$paypal = new Donation();
$return = $paypal->ipn();
	if($return){
        $nome_utente = $return['custom'];
        //Fai qualcosa
	}



Lista opzioni in formato key = spiegazione da passare al metodo set_request_options :
item_name = nome del prodotto
amount = il prezzo
currency_code = moneta (EUR, USD etc.) /opzionale
business = la tua email di paypal
rm = metodo in cui paypal invia i dati (non modificare se non sai come funziona) /opzionale
cbt = scritta che compare sul bottone di paypal che ti reindirizza all'ipn quando hai effettuato il pagamento
return = url di redirect alla fine della transazione
notify_url = url dell'ipn
cancel_return = url al quale il cliente viene rimandato se annulla la donazione
Piu opzioni qui http://www.paypalobjects.com/IntegrationCenter/ic_std-variable-ref-donate.html

Spiegazione IPN:
Quando l'utente ha effettuato il pagamento, paypal manda una richiesta all'ipn (file2.php) mandando dei parametri tramite post. Il metodo ipn() restituisce FALSE se la richiesta non è valida (es. tentativo di fregare) altrimenti restituisce tutti i parametri post che paypal manda. Ve li elenco qui sotto.

PHP:
mc_gross = 20.00
protection_eligibility = Eligible
address_status = confirmed
payer_id = LJLRRAYGCSF28
tax = 0.00
address_street = 1 Main St
payment_date = 14:26:23 Jan 08, 2014 PST
payment_status = Completed
charset = windows-1252
address_zip = 95131
first_name = Lore
mc_fee = 1.13
address_country_code = US
address_name = Lore ree
notify_version = 3.7
custom = 754080051
payer_status = verified
business = [email protected]
address_country = United States
address_city = San Jose
quantity = 0
payer_email = [email protected]
verify_sign = ABmSeeM9YKf7J1xd4CkIi4lOXClSA3TJ.gmQs4WVXeM41MNaKZy1Rg-Q
txn_id = 3XD26322YC9824203
payment_type = instant
last_name = ree
address_state = CA
receiver_email = [email protected]
payment_fee = 
receiver_id = DAJLT8S98U97Y
txn_type = web_accept
item_name = Nome del prodotto
mc_currency = EUR
item_number = 
residence_country = US
test_ipn = 1
transaction_subject = 754080051
payment_gross = 
merchant_return_link = Ottieni la moneta virtuale
auth = AF94oxt28b2H6jCxtpNQPn5.dZ0dJkwHkUfjZZHY4tEkBay-VmVsD4m7rdf4gKprGJnl5Bf0.nX6kJ4uSbP.Mqg

Nell'esempio del file2.php, per ottenere per esempio il paese di residenza di chi paga, basta fare $return['residenc_country'].

Spero di essere stato d'aiuto,
See you soon
 
Me lo salvo, questo codice mi tornerà utile in futuro XD
Mi ero sempre chiesto come si facesse l'automatizzazione del pagamento paypal, ma non credevo fosse così semplice, grazie mille! :D
 
Me lo salvo, questo codice mi tornerà utile in futuro XD
Mi ero sempre chiesto come si facesse l'automatizzazione del pagamento paypal, ma non credevo fosse così semplice, grazie mille! :D
Questo qui è il modo più semplice. Ci sono altre "modalità" più complesse che ti permettono di raccogliere più informazioni e fare più controlli(si può anche eseguire il pagamento direttamente sul tuo sito senza passare da paypal), ma il concetto è sempre lo stesso. Appena paghi(in certi casi anche prima) paypal manda una richiesta post/get al file che hai specificato come ipn e poi ci fai quel che vuoi <,<
 
Tolti i problemi di sicurezza e corretta una stronzata che avevo fatto <,< + aggiunta del link contenete tutte le opzioni possibili
 
Stato
Discussione chiusa ad ulteriori risposte.