Metodi['unicredit']->nome_metodo = 'Carta di Credito'; // $this->Metodi['unicredit']->userID = "9999888_BIOSINF";//"Importante: è consigliato evitare di far coincidere l'utenza di accesso al back office con l'utenza utilizzata per colloquiare con PagOnline durante la transazione. Questo eviterà che, a seguito di un blocco dell'utenza di amministrazione per l'accesso al back office, non ne conseguirà un blocco dell'operatività nei pagamenti" // $this->Metodi['unicredit']->stabilimento = "99988";// oppure 99888 // $this->Metodi['unicredit']->numeroCommerciante = "9999888"; // $this->Metodi['unicredit']->secret = "b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1"; // $this->Metodi['unicredit']->password = "YcVqywtw1"; // $this->Metodi['unicredit']->tipoPagamento = "CartCred";//si può forzare solo carta / solo bonifico o lasciare vuoto per scelta sul sito require_once("MedodoDiPagamento.php"); class UnicreditPagOnlineOld extends MedodoDiPagamento{ var $nome_metodo = "Unicredit"; //configurazione var $numeroCommerciante = ""; var $userID = ""; var $stabilimento = ""; var $secret = ""; var $password = ""; var $tipoPagamento = "";//CartCred oppure ContoCorr, se vuoto fa fare la scelta sul sito var $lingua = "it";//it, en, de, fr, es var $restart_params = array(//non essendoci un errorurl il restart non dovrebbe mai esserci, comunque li metto... "TIMECREATED" => '', "statoattuale" => '', "PREVIOUSSTATE" => '', "CURRENTSTATE" => '', "tipomessaggio" => '', "DESCRIZIONE" => '', "datacreazione" => '', "stabilimento" => '', "MerchantNumber" => '', "descrizione" => '', "OBJECT" => '', "TIMEGENERATED" => '', "MERCHANTNUMBER" => '', "statoprecedente" => '', "MERCHANTACCOUNT" => '', "numeroOrdine" => '', "numeroCommerciante" => '', "datagenerazione" => '', "ORDERNUMBER" => '', "Stabilimento" => '', "mac" => '', "MAC" => '', ); function demoInfo(){ if($this->tipoPagamento == 'ContoCorr') return ''; return "Per il pagamento usare:
Titolare carta nome a piacere
Tipo di carta VISA
PAN della carta 4444499922200000
CVV2 111
Data scadenza 11/2019. Per la configurazione del server di produzione è necessario inserire dal backoffice utente (arriva la pass per email, bisogna fare login e cambiarla), url S2S (".$this->Procedura->genera_link(array($this->step_var=>"s2s")).") e IP autorizzati"; } function ignoreSetupError(){ if(in_array($_GET[$this->step_var], array('s2s'))) return true; return false; } function calcolaMacUnicreditPagOnline($params){ $stringa_per_mac = ''; foreach($params as $a=>$b) $stringa_per_mac .= "$a=".trim($b)."&"; $stringa_per_mac .= $this->secret; /* DALLA DOCUMENTAZIONE (stesso risultato con mia riga sotto): //Calcolo della firma digitale della stringa in input $MAC = md5($stringa_per_mac); $MACtemp = ""; for($i=0;$iindiLingua(); if($this->demo){ $this->numeroCommerciante = '9999888'; $this->userID = '9999888_BIOSINF'; $this->stabilimento = '99888';// oppure 99988 $this->password = 'YcVqywtw1'; $this->secret = 'b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1'; } switch($_GET[$this->step_var]){ default: $this->Procedura->iniziato($this->nome_metodo); $params = array( //NON CAMBIARE QUESTO ORDINE, E' FISSO NEL CALCOLO DEL MAC 'numeroCommerciante' => $this->numeroCommerciante, 'userID' => $this->userID, 'password' => $this->password,//inoltre si osservi, fatto importante, come non sia necessario (anzi vivamente sconsigliato!) inviare il valore esatto della password dell'utente (che verrà invece rimpiazzata dal sistema in ricezione, per la verifica), evitando di inviare in rete dati sensibili dell'utente. 'numeroOrdine' => $this->identificativo, 'totaleOrdine' => round(floatval(str_replace(",", ".", $this->importo)) * 100), 'valuta' => '978', 'flagDeposito' => 'Y',//N = autorizzazione manuale 'urlOk' => $this->Procedura->genera_link_agg(array($this->step_var=>"return_ok")), 'urlKo' => $this->Procedura->genera_link_agg(array($this->step_var=>"return_ko")), 'tipoRispostaApv' => 'Wait',//oppure 'Click' 'flagRiciclaOrdine' => 'Y',//Indica se si intende riutilizzare un identificativo ordine che fa riferimento ad un precedente ordine abbandonato 'stabilimento' => $this->stabilimento, ); $params['mac'] = $this->calcolaMacUnicreditPagOnline($params); $params['password'] = rand(0,99999999); //facoltativi non vanno inserite nel calcolo mac $params['emailCompratore'] = $this->cliente_email; $params['langCompratore'] = $this->lingua; if($this->tipoPagamento) $params['tipoPagamento'] = $this->tipoPagamento; $params['causalePagamento'] = substr($this->descrizione, 0, 90); // echo '
';
// 				print_r($params);
// 				die;
				
				$this->Procedura->redirect("https://pagamenti.unicredito.it/initInsert.do?".http_build_query($params));

				break;
				
			case 's2s':
				$params = array();
				foreach($_GET as $k=>$v) if(!in_array($k, array('indi_rew1','l','p','1','2',$this->Procedura->metodo_var,$this->step_var))){
					$params[$k] = stripslashes($v);
				}
// 				$params:
// 				Array
// 				(
// 				    [TIMECREATED] => 28.05.2014 14:22:18
// 				    [statoattuale] => AB
// 				    [PREVIOUSSTATE] => indefinito
// 				    [CURRENTSTATE] => AB
// 				    [tipomessaggio] => PAYMENT_STATE
// 				    [DESCRIZIONE] => w
// 				    [datacreazione] => 28.05.2014 14:22:18
// 				    [stabilimento] => 99888
// 				    [MerchantNumber] => 9999888
// 				    [descrizione] => w
// 				    [OBJECT] => PAYMENT
// 				    [TIMEGENERATED] => 28.05.2014 14:31:11
// 				    [MERCHANTNUMBER] => 9999888
// 				    [statoprecedente] => indefinito
// 				    [MERCHANTACCOUNT] => 999988801
// 				    [numeroOrdine] => yt7zfip840
// 				    [numeroCommerciante] => 9999888
// 				    [datagenerazione] => 28.05.2014 14:31:11
// 				    [ORDERNUMBER] => yt7zfip840
// 				    [Stabilimento] => 99888
// 				    [mac] => LRdw9jCLotwxKGj07gYtFg==
// 				    [MAC] => b9gPgM2uY+kvQLJkJwRCfg==
// 				)
				
				
				
				$params_per_mac = array();
				foreach($params as $k=>$v){
					if($k == 'mac') break;//"tutto ciò che si trova a sinistra del MAC è stato utilizzato per il calcolo del MAC stesso"
					$params_per_mac[$k] = $v;
				}
					
				$identificativo = $params['numeroOrdine'];
					
				if($params['mac'] == $this->calcolaMacUnicreditPagOnline($params_per_mac)){	
					
					$stati = array(
						"ON" => "ordine inserito nuovo",
						"RO" => "ordine inserito richiesto",
						"IN" => "ordine inserito in attesa di input del cliente",
						"AR" => "ordine in attesa di risposta dal circuito autorizzativo",
						"OK" => "ordine autorizzato e in attesa di conferma",
						"KO" => "ordine non autorizzato",
						"IC" => "ordine confermato",
						"CO" => "ordine contabilizzato definitivo",
						"AB" => "ordine abbandonato definitivo",
						"ST" => "ordine stornato",
						"EX" => "ordine scaduto",
						"IP" => "ordine in rimborso parziale",
						"IT" => "ordine in rimborso totale",
						"CP" => "ordine rimborsato parzialmente definitivo",
						"CT" => "ordine rimborsato totalmente definitivo",
						"RC" => "rimborso cancellato definitivo",
						"indefinito" => "indefinito",
					);	
					
					$comunicazione = $stati[$params['statoprecedente']] . " > " . $stati[$params['statoattuale']] . " (" . $params['descrizione'] . ")";
					
					$this->Procedura->comunicazione_s2s($identificativo, $comunicazione);
					
					if($params['statoattuale'] == 'OK' || $params['statoattuale'] == 'IC'){
						$this->Procedura->confermato($identificativo);
					}		
				}
				else{		
					$body = "ERRORE VERIFICA FIRMA DELLA COMUNICAZIONE S2S";
					foreach($params as $k=>$v) $body .= "\n| $k:\t$v";
					$this->Procedura->comunicazione_s2s($identificativo?$identificativo:$this->identificativo, $body);
					
					$body .= "\nhttp://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI] " . date ("d-M-Y H:i:s", mktime()) . " " . __FILE__ . " " . __LINE__;
					$body .= "\n\n" . print_r(array('$_GET'=>$_GET, '$_POST'=>$_POST, '$_SERVER'=>$_SERVER, '$_SESSION'=>$_SESSION), TRUE);
					mail("carlo@tnx.it", "ERRORE S2S ".$this->nome_metodo, $body);
				}
				
				break;
				
			case 'return_ok':
				return $this->Procedura->concluso();
				break;
				
			case 'return_ko':
				//qui arriva se preme "indietro" dalla pagina della banca
				return $this->Procedura->annulla();
				break;
		}
	}
	
	
	
	
	function indiLingua(){
		//it, en, de, fr, es
		switch($GLOBALS['DATI']["lang"]) {
		    case "ita":
		        $this->lingua = "it";
		        break;
		    case "fra":
		        $this->lingua = "fr";
		        break;
		    case "spa":
		        $this->lingua = "es";
		        break;
		    case "ger":
		        $this->lingua = "de";
		        break;
		    default:
		        $this->lingua = "en";
		        break;
		}
	}
	
}

?>