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.
Esempio di funzionamento:
file1.php (quello che esegue il redirect al sito di paypal)
file2.php (quello che controlla se il pagamento è avvenuto e esegue per esempio l'aggiunta delle monete)
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.
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
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