class MedodoDiPagamento{
var $Procedura;//istanza della classe che gestisce le operazioni
var $demo = true;
//dietro questo appendo 11 caratteri (underscore+timestamp), rimanere sotto i 7 caratteri o meno (setefi max 18 caratteri)
//questa stringa viene ritornata dal server del pagamento e tramite SOLO questa deve essere possibile riassociare la relativa procedura per realizzare operazioni automatiche
var $identificativo;
var $importo;
var $descrizione;
//opzionali per precompilare i campi sul server del pagamento
var $cliente_nome;
var $cliente_email;
var $cliente_indirizzo;
var $cliente_citta;
var $cliente_cap;
var $cliente_nazione;
var $cliente_telefono;
//pagina di uscita senza messaggi di esito operazioni
var $exit_url;
//cambiando questo paramentro non viene usato un ts intero ma solo le ultime X cifre
//l'id non sarà più unico, ma sara come usare un random, quindi meglio non scendere troppo
//4 cifre ad esempio, vuol dire che regolarmente ogni 10000 secondi (2,77 ore) viene generato lo stesso suffisso
//quindi se si cambia assicurarsi che $this->identificativo sia sufficiente univoco altrimenti metodi che richiedono che sia unico potrebbero bloccarsi facilmente<
var $uniqueID_cifre_timestamp = 10;
var $pulisciUniqueID = true;//per creare l'unique id toglievo dei caratteri, questo ha generato un problema quando sono arrivate le s2s e non sono potuto risalire all'identificativo originale
var $uniqueID_separator = "_";//SINGOLO CARATTERE (gli id spesso hanno vincoli di lunghezza e ci vado sempre preciso, metterne due potrebbe essere un casino!)
var $restart_params = array();//parametri da resettare (genera_link) per pulire l'url in caso di restart
var $metodo_key;//la chiave usata nell'array metodi per questo metodo
var $controllaConfermatoInStep = ['s2s'];
var $confermabile = true;//il metodo ha una procedura di conferma automatica (nei contanti è false), lo split payment tramite credito non può usare metodi non confermabili
var $loadingImg = '
';
function demoInfo(){
return '';
}
function ignoreSetupError(){
//necessario SOLO in caso di url s2s statici tipo bancasella, unicredit e ideal (non implementato su ideal)
//if(in_array($_GET[$this->step_var], array('s2s', 'return_ok'))) return true;
return false;
}
function pulisciOutput(){//se non si deve produrre output in uno step s2s (vesuvio ha due ob_start())
while(ob_get_level()) ob_get_clean();
}
function identificativoFromUniqueID($uniqueID){
$uniqueID = explode($this->uniqueID_separator, $uniqueID);
array_pop($uniqueID);//tolgo il timestamp in fondo
return implode($this->uniqueID_separator, $uniqueID);
}
function uniqueID($max_legnth=99, $ignoraCaratteriIdentificativoPersi = false){
//crea un campo uniqueid mescolando prefisso_identificativo e timestamp
//se non ho un prefisso uso il timestamp completo
//strlen(round(microtime(true))) => 10
if($this->identificativo){
$ts = (string)round(microtime(true));
$ts = substr($ts, -1*$this->uniqueID_cifre_timestamp);
$id = $this->identificativo;
if($this->pulisciUniqueID){
$id = preg_replace("/[^\d\w-_]/ims", "", $this->identificativo, -1, $count);
if($count) trigger_error("Qui c'è del codice malfatto che ha tolto dei caratteri creando lo uniqueID (".$this->identificativo." > $id), potrebbero esserci dei problemi a riassociare la chiamata S2S con l'ordine");
}
$lunghezzaMassimaId = $max_legnth-1-$this->uniqueID_cifre_timestamp;
if(strlen($id) > $lunghezzaMassimaId){
if(!$ignoraCaratteriIdentificativoPersi) trigger_error("Devo trimmare l'identificativo, la s2s non funzionerà. Devi usare un identificativo più corto o impostare meno cifre di timestamp perchè il fornitore in tutto vuole al massimo $max_legnth cifre");
$id = substr($id, 0, $lunghezzaMassimaId);
}
$trackid = $id.$this->uniqueID_separator.$ts;
}
else $trackid = substr(preg_replace("/[^0-9]/ims", "p", microtime(true)), 0, $max_legnth);
return $trackid;
}
function autoSubmitForm($id){
return "";
}
function waitForOutcome(){
// print_r_tnx($this->Procedura->isErrore(), 1) || die;
if($this->Procedura->isConfermato()){
$this->Procedura->redirect($this->Procedura->genera_link_agg(array($this->step_var=>"return_ok")));
}
else if($this->Procedura->isErrore()){
$this->Procedura->redirect($this->Procedura->genera_link_agg(array($this->step_var=>"error")));//non devo tornare alla scelta metodo, non funzionerebbe in webview
}
else{
return "
Procedura->classeDivContainer."\">
".$this->loadingImg."
In attesa del pagamento su app esterna...
";
}
}
}
?>