"", "shopID"=>"", "error"=>"", ); var $emailDebugBnl = '';//attiva un dump via mail delle comunicazioni ai server bnl // var $emailDebugBnl = "c@localhost"; function demoInfo(){ return "Il sito deve essere SSL (in uscita altrimenti genera alert causa passaggio dati in chiaro). Per il pagamento usare dati carta con data e cvv qualsiasi, numero 4557773333333335 (visa, esito positivo) o 5430131234567891 (mastercard, esito negativo). Se non funziona copia e incolla, puoi usare il drag e drop. Accesso back office di test con credenziali mhtest2 / Mhtest2016 (usa le maiuscole nel captcha). La S2S arriva dopo qualche secondo."; } function initPagamentoBnl($params = array()){ $shopID = $this->uniqueID(256); if(!$GLOBALS['DATI']["lang"]) $lingua = "IT"; else { switch($GLOBALS['DATI']["lang"]) { case "ita": $lingua = "IT"; break; case "ger": $lingua = "DE"; break; default: $lingua = "EN"; break; } } $params = array_merge( $params, array( //torna qui sia in caso di esito ok sia in caso di annulla "notifyURL" => $this->Procedura->genera_link_agg(array($this->step_var=>"return", 'shopID' => $shopID)), "trType" => "PURCHASE",//o AUTH "amount" => round($this->importo*100), "shopID" => $shopID, "errorURL" => $this->Procedura->genera_link_agg(array($this->step_var=>"error")), "shopUserRef" => $this->cliente_email, "currencyCode" => "EUR", "langID" => $lingua ) ); //visitata da loro client (solo bnl, no unicredit, da problemi con PayWayIccreaBcc) if($this->s2sPrevista) $params["callbackURL"] = $this->Procedura->genera_link_agg(array($this->step_var=>"s2s")); return $this->apiBnl("IgfsCgInit", $params); } function verificaPagamentoBnl($shopID, $paymentID, $isS2S){ $lib = $this->apiBnl("IgfsCgVerify", array( "trType" => "VERIFY", "shopID" => $shopID, "paymentID" => $paymentID, )); if($isS2S){ $identificativo = $this->identificativoFromUniqueID($shopID); if(!$lib->error){ $this->Procedura->comunicazione_s2s($identificativo, "Pagamento verificato"); $this->Procedura->confermato($identificativo); } else{ $this->Procedura->comunicazione_s2s($identificativo, $lib->errorDesc); } } return $lib; } function getApiUrl(){ return "https://merchant.s2s".($this->demo ? 'test' : '').".bnlpositivity.it/BNL_CG_SERVICES/services/";//.($this->demo ? 'test' : 'pf').".bnlpositivity.it/BNL_CG_SERVICES/services"; } function apiBnl($file, $parametri){ $dir = getcwd(); chdir($GLOBALS['DATI']['libPath'].'bnl'); // require_once('IGFS_CG_API-2.4.1.5/init/'.$file.'.php'); require_once('IGFS_CG_API/init/'.$file.'.php'); $lib = new $file(); $lib->serverURL = $this->getApiUrl(); $lib->kSig = $this->kSig; $lib->tid = $this->terminalId; foreach($parametri as $k=>$v) $lib->{$k} = $v; $res = $lib->execute(); if($this->emailDebugBnl){ mail($this->emailDebugBnl, "Debug TNX BNL: dati dalla chiamata $file della libreria PHP", __FILE__.":".__LINE__."\n".print_r(array("esito" => $res, $lib, $_REQUEST, $_SERVER), true)); } chdir($dir); return $lib; } function auto(){ // $this->Procedura->logga(array( // 'identificativo_ordine' => $this->identificativo, // 'ultimo_stato' => 'Fine procedura di conferma' // )); $GLOBALS['debugTnxBnl'] = $this->emailDebugBnl; // $this->importo = 102; if($this->demo){ // $this->terminalId = '08000001 - 08000001_S'; // $this->terminalId = '08000001_S';$this->terminalId $this->terminalId = $this->demoTerminalId; $this->kSig = $this->demoKSig; } //All’interno del campo “oid” sono accettati esclusivamente i caratteri presentati nella seguente lista. Le transazioni presentate con caratteri non validi verranno scartate. $this->identificativo = preg_replace("|[^a-z\d/-\?:\(\)\.,'\+\s]|i", "-", $this->identificativo); // $this->importo = number_format($this->importo, 2, ".", ""); switch($_GET[$this->step_var]){ default: $this->Procedura->iniziato($this->nome_metodo); $lib = $this->initPagamentoBnl(); //la pagina di ritorno è unica, questo parametro è necessario per la verifica dell'esito insieme allo shopID //non posso accodare questo parametro all'url perchè lo ricevo dopo l'init $_SESSION['bnlPaymentId'] = $lib->paymentID; if($lib->error){ $errore = "Errore inizializzazione pagamento: ".$lib->rc.' '.$lib->errorDesc; $this->Procedura->logga(array( 'identificativo_ordine' => $this->identificativo, 'ultimo_stato' => $errore )); trigger_error($errore); return $this->Procedura->errore("Si è verificato un errore, è stata inviata una segnalazione al reparto tecnico"); } else $this->Procedura->redirect($lib->redirectURL); case 'return': $lib = $this->verificaPagamentoBnl($_GET['shopID'], $_SESSION['bnlPaymentId'], !$this->s2sPrevista); $this->Procedura->redirect($this->Procedura->genera_link_agg(array( $this->step_var => $lib->error ? "return_ko" : "return_ok", "error" => $lib->errorDesc ))); case 'return_ok': return $this->Procedura->concluso(); case 'return_ko': return $this->Procedura->errore($_GET['error']); case 'error': /* Buongiorno, purtroppo la chiamata sulla errorURL viene effettuata esclusivamente in caso di errori di sistema o applicativi per cui è impossibile continuare a processare la transazione. ( Ad esempio errore iniziale in fase di init(). ) In questi casi, il merchant potrebbe visualizzare una pagina in cui si comunica al titolare l'impossibilità di processare la transazione. Siamo a disposizione per ulteriori chiarimenti. Cordiali Saluti, */ // trigger_error("Non è possibile simulare l'uso di errorURL durante i test, controllare se il log è stata salvato correttamente");//controllato con errore 19:21:05.24 del 27/03/2021 (lievitomadre00) $errore = $this->descrizioneErrore($_GET['rc']); if(!$errore) $errore = "Errore generico"; return $this->Procedura->errore($errore); // case 'verify': // echo "Verifica ".$_GET['id'].":
"; // $lib = $this->verificaPagamentoBnl( // $_GET['shopID'], // $_GET['paymentID'] // ); // echo '
';
				// $printMe = $lib; ob_start(); if(is_object($printMe)||is_array($printMe)) print_r($printMe); else var_dump($printMe); $printMe = htmlentities(ob_get_clean(), ENT_COMPAT|ENT_HTML401, 'UTF-8'); echo $printMe === "" ? "Stringa vuota o non convertibile in UTF-8 (prova ISO o output diretto)" : $printMe;
				// echo '
'; // break; case 's2s': /* I tentativi verranno fatti finché il server non risponde con esito http 200. Per ogni esito differente, ad esempio 3xx, la notifica verrà considerata fallita. Il primo tentativo è fatto al termine della transazione dell'utente. Se il primo tentativo di notifica non va a buon fine, i contatti verso il server dell'esercente verranno tentati ogni ora fino ad una corretta risposta. Verranno selezionate le transazioni eseguite e non notificatedelle ultime 24 ore e fino ad un‘ora prima dell'esecuzione dell'autorizzazione. */ $lib = $this->verificaPagamentoBnl( stripslashes($_POST['shopID']), stripslashes($_POST['paymentID']), true ); $this->pulisciOutput(); die(); } } function descrizioneErrore($chiave){ if(!$this->erroriBnl) $this->erroriBnl = $this->convertiTabellaDellaDocumentazionePdfInUnArray(); // return $this->erroriBnl[str_replace('BNLP_', 'IGFS_', $chiave)]; return $this->erroriBnl[$chiave]; } function convertiTabellaDellaDocumentazionePdfInUnArray(){ $righe = explode("\n", $this->tabellaDellaDocumentazionePdf); $return = array(); $k = 0; while($righe[$k]){ $return[trim($righe[$k])] = strtolower(trim($righe[$k+1])); $k += 2; } return $return; } var $tabellaDellaDocumentazionePdf = "IGFS_000 TRANSAZIONE OK IGFS_00051 INSTITUTION ID NON PRESENTE. IGFS_001 DESTINATARIO SCONOSCIUTO IGFS_00155 BATCH TRACK ID NON VALIDO. IGFS_00156 BATCH TRACK ID NON UNIVOCO IGFS_00157 STRUMENTO PAGAMENTO NON VALIDO. IGFS_00158 NUMERO CARTA NON NUMERICO IGFS_00159 NUMERO CARTA NON PRESENTE IGFS_002 CARTA SCADUTA IGFS_00202 TENTATIVO HACK RILEVATO IGFS_00203 ACCESSO NON VALIDO:ULITIZZARE METODO POST IGFS_00253 MAXIMUM CREDIT VOLUME EXCEEDED. IGFS_00254 MAXIMUM CARD DEBIT VOLUME EXCEEDED. IGFS_00255 MAXIMUM CARD CREDIT VOLUME EXCEEDED. IGFS_00256 MAXIMUM CARD TRANSACTION COUNT EXCEEDED. IGFS_00257 MAXIMUM TRANSACTION AMOUNT EXCEEDED. IGFS_00260 TRANSACTION DENIED: CREDITS EXCEED CAPTURES IGFS_00261 TRANSACTION DENIED: CAPTURES EXCEED AUTHORIZATIONS IGFS_003 CARTA ERRATA IGFS_00300 INSTITUTION ID NON PRESENTE. IGFS_00301 RISK PROFILE ID NON PRESENTE. IGFS_00302 CODICE VALUTA NON PRESENTE. IGFS_004 CARTA IN BLACK LIST - RITIRARE IGFS_00451 MERCHANT ID NON PRESENTE. IGFS_00452 TERMINAL ID NON PRESENTE. IGFS_00453 TERMINAL ID NON PRESENTE. IGFS_00454 TERMINAL ID NON VALIDO IGFS_00456 TERMINAL ID NON VALIDO IGFS_005 ERRORE DI FORMATO IGFS_006 ERRORE FILE SYSTEM IGFS_007 ERRORE DI COMUNICAZIONE IGFS_00701 IL BATCH NON PROCESSATO IGFS_00702 IL BATCH NON RIAVVIATO IGFS_00704 BATCH ID NON NUMERICO IGFS_00705 BATCH ID NON PRESENTE IGFS_008 AUTORIZZAZIONE NEGATA IGFS_009 RITIRARE CARTA IGFS_00950 DIRECTORY BATCH UPLOAD NON PRESENTE IGFS_00951 DIRECTORY BATCH DOWNLOAD NON PRESENTE IGFS_00952 NOME DIRECTORY ARCHIVIAZIONE BATCH NON PRESENTE IGFS_010 MERCHANT NON ABILITATO IGFS_01000 TRANSAZIONE NEGATA DAL RISCHIO IGFS_011 CONTATTARE ACQUIRER IGFS_014 MERCHANT NON CONVENZIONATO IGFS_015 ACQUIRER NON GESTITO IGFS_016 CARTA IN RANGE NEGATIVO O STRANIERA IGFS_018 CARTA INESISTENTE IGFS_020 CARTA INVALIDA IGFS_021 CODICE MERCHANT ERRATO IGFS_029 DATA SCADENZA ERRATA IGFS_030 FONDI INSUFFICIENTI IGFS_032 IMPORTO NON VALIDO IGFS_033 TRANSAZIONE ORIGINALE NON TROVATA IGFS_083 ERRORE CIFRATURA TRANSAZIONE IGFS_085 CODICE DIVISA ERRATO IGFS_086 MALFUNZIONAMENTO SISTEMA IGFS_087 ACQUIRER NON RAGGIUNGIBILE IGFS_088 MANCATA RISPOSTA DA ACQUIRER IGFS_091 MALFUNZIONAMENTO SISTEMA ACQUIRER IGFS_092 TRANSAZIONE SCONOSCIUTA IGFS_093 CONFERMA GIA' PRESENTE IGFS_094 CREDITO GIA' PRESENTE IGFS_095 STORNO PER NOTIFICA INESISTENTE IGFS_096 STORNO PER AUTORIZZAZIONE INESISTENTE IGFS_097 CONFERMA PER AUTORIZZAZIONE INESISTENTE IGFS_098 IMPORTO SUPERIORE AD IMPORTO AUTORIZZATO IGFS_10000 CARATTERI NON VALIDI IGFS_101 MAC ERRATO IGFS_102 SOSPETTA FRODE IGFS_104 CARTA SOGGETTA A RESTRIZIONI IGFS_107 CONTATTARE ISSUER IGFS_108 CONTATTARE ISSUER:CASO SPECIALE IGFS_112 INSERIRE PIN IGFS_115 FUNZIONE NON SUPPORTATA SU CARTA IGFS_117 PIN ERRATO IGFS_118 CONTO NON TROVATO O NON ABILITATO IGFS_119 OPERAZIONE NON PERMESSA AL TITOLARE IGFS_121 SUPERATO LIMITE IMPORTO IGFS_122 ERRORE SICUREZZA IGFS_123 SUPERATO LIMITE FREQUENZA IGFS_125 ACQUIRER NON GESTITO IGFS_129 SOSPETTA FRODE SU CARTA IGFS_160 CARTA PERSA IGFS_164 DATA ANTEC. A BLOCCO CARTA IGFS_180 DATI ERRATI IGFS_181 DATI SENSIBILI ERRATI IGFS_189 BIN IN RANGE NEGATIVO IGFS_1921 3DS:UNABLE TO AUTENTICATE IGFS_1922 3DS:AUTENTICATION ERROR IGFS_1923 3DS:UNABLE TO VERIFY (VERES=U) IGFS_200 RITIRARE CARTA IGFS_20000 DATI MANCANTI IGFS_20001 CODICE AZIONE NON VALIDO IGFS_20002 SESSIONE SCADUTA IGFS_20003 COOKIES NON ABILITATI IGFS_20006 BRAND NON VALIDO IGFS_20007 STATO ORDINE NON VALIDO IGFS_20010 URL INVIO RISPOSTA NON VALIDO IGFS_20011 URL INVIO ERRORE NON VALIDO IGFS_20012 TRACK ID NON VALIDO IGFS_20013 CODICE LINGUA NON VALIDO IGFS_20014 CAMPO UDF NON VALIDO IGFS_20015 NOME CARTA NON VALIDO IGFS_20016 INDIRIZZO NON VALIDO IGFS_20017 CAP NON VALIDO IGFS_20018 CVV2 NON VALIDO IGFS_20019 TRANSACTION ID. NON VALIDO IGFS_20020 CAMPO USER IDENTIFIER NON VALIDO IGFS_20021 CAMPO API VERSION NON VALIDO IGFS_20022 CAMPO SIGNATURE NON VALIDO IGFS_20023 CAMPO PAYMENT ID NON VALIDO IGFS_20024 CODICE AUTORIZZAZIONE MANCANTE IGFS_20025 CAMPO REFERENCE DATA NON VALIDO IGFS_20026 SHOP ID DUPLICATO IGFS_20027 FORMATO RICHIESTA NON VALIDO IGFS_20028 DATI BATCH MANCANTI IGFS_20029 DATI BATCH NON VALIDI IGFS_20030 DIRECTORY DATI BATCH NON VALIDA IGFS_20031 DATI BATCH DUPLICATI IGFS_20032 NOME BATCH FILE NON VALIDO IGFS_20033 DATI BATCH NON TROVATI IGFS_20034 BATCH TRACK ID NON VALIDO IGFS_20035 ORDERID NON VALIDO IGFS_20036 PAN NON VALIDO IGFS_20037 CVV2 NON VALIDO IGFS_20038 EXPIRE DATE NON VALIDA IGFS_20040 MPI VERIFIED NON VALIDA IGFS_20041 MPI AUTHORIZED NON VALIDA IGFS_20042 MPI CAVV NON VALIDA IGFS_20043 MPI XID DATE NON VALIDA IGFS_20044 CAMPO PAYMENT DESCRIPTION NON VALIDO IGFS_20045 PAYMENT INSTRUMENT TOKEN ID ERRATO IGFS_20046 FREE TEXT ERRATO IGFS_20048 ERRORE PROCESSAMENTO PAYMENT INSTRUMENT TOKEN IGFS_20049 TOPUPID ERRATO IGFS_20050 CODICE POSTALE MITTENTE NON VALIDO IGFS_20051 CODICE POSTALE DESTINATARIO NON VALIDO IGFS_20052 CODICE NAZIONE DESTINATARIO NON VALIDO IGFS_20053 IMPORTO SPEDIZIONE NON VALIDO IGFS_20056 IMPORTO TASSE NON VALIDO IGFS_20057 ELENCO ARTICOLI MANCANTE IGFS_20058 CODICE ARTICOLO NON VALIDO IGFS_20059 DESCRIZIONE ARTICOLO NON VALIDO IGFS_20060 NUMERO NON VALIDO IGFS_20062 IMPORTO ARTICOLO NON VALIDO IGFS_20065 NUMERO MASSIMO PRODOTTI SUPERATO IGFS_20066 CODICE NAZIONE MITTENTE NON VALIDO IGFS_20067 NOME DESTINATARIO NON VALIDO IGFS_20068 INDIRIZZO DESTINATARIO NON VALIDO IGFS_20069 CITTA DESTINATARIO NON VALIDA IGFS_20070 STATO DESTINATARIO NON VALIDO IGFS_20071 CODICE VAT NON VALIDO IGFS_20072 NOME FATTURA NON VALIDO IGFS_20073 INDIRIZZO FATTURA NON VALIDO IGFS_20074 CITTA FATTURA NON VALIDA IGFS_20075 STATO FATTURA NON VALIDO IGFS_20076 CODICE POSTALE FATTURA NON VALIDO IGFS_20077 CODICE NAZIONE FATTURA NON VALIDO IGFS_20078 NUMERO FATTURA NON VALIDO IGFS_20079 NOTE AL VENDITORE NON VALIDE IGFS_20080 PAYPASSDATA ERRATO IGFS_20081 PROMOCODE ERRATO IGFS_20082 ACCNTNAME ERRATO IGFS_20083 AUTHCODE ERRATO IGFS_20084 BUYERNAME ERRATO IGFS_20085 BUYERACCNT ERRATO IGFS_20086 IPBUYER ERRATO IGFS_20090 TRANSAZIONE CANCELLATA DALL'UTENTE IGFS_20100 ERRORE NOTIFICA MERCHANT IGFS_208 CARTA PERSA IGFS_209 CARTA RUBATA IGFS_400 STORNO OK IGFS_800 TERMINALE NON ABILITATO IGFS_801 BANCA SELEZIONATA ERRATA IGFS_802 TENTATIVI PIN ESAURITI IGFS_803 CODICE TERMINALE ERRATO IGFS_804 CHIAVE DISALLINEATA IGFS_805 ERRORE CIFRATURA IGFS_807 TERMINALE CHIUSO IGFS_808 TERMINALE NON CHIUSO IGFS_809 ERRORE SEQUENZA IGFS_810 TERMINALE NON RICONOSCIUTO IGFS_811 TERMINALE BLOCCATO IGFS_812 TERMINALE CHIUSO FORZ. IGFS_813 OPERAZIONE NON PERMESSA IGFS_814 TRANSAZIONE IN CORSO IGFS_815 CARTA BLOCCATA IGFS_888 IN ATTESA DI COMPLETAMENTO IGFS_90000 DATABASE ERROR IGFS_90005 TIMESTAMP ERRATO. IGFS_902 TRANSAZIONE NON VALIDA IGFS_903 REINVIARE TRANSAZIONE IGFS_907 EMITTENTE NON ADERENTE IGFS_908 DESTINAZIONE NON TROVATA IGFS_909 ERRORE DI SISTEMA IGFS_910 SISTEMA ISSUER NON ATTIVO IGFS_911 TIME OUT IGFS_912 ISSUER NON RAGGIUNGIBILE IGFS_913 TRANSAZIONE DUPLICATA IGFS_934 NOTIFICA RIFIUTATA IGFS_990 STRUMENTO PAGAMENTO NON ATTIVO"; } // function hashBnl($stringa){ // return sha1(bin2hex($stringa)); // } // $time = strftime("%Y:%m:%d-%T"); // $form = '
// // // // // // // // // // // // // // // // //
'; // $form = '
// // // // // // // // // // // // // // //
'; // if(is_tnx() && $this->demo) // $form = nl2br(htmlentities($form)).$form; // else // $form .= $this->autoSubmitForm('form_pagamento_tnx'); ?>