require_once("MedodoDiPagamento.php");
class BnlPositivity extends MedodoDiPagamento{
var $nome_metodo = "Carta di credito";
var $terminalId = '';
var $kSig = '';
var $valuta = 'EUR';
var $cliente_email = '';
var $pulisciUniqueID = false;
var $demoTerminalId = '08000001';
var $demoKSig = 'xHosiSb08fs8BQmt9Yhq3Ub99E8=';
var $s2sPrevista = true;
var $restart_params = array(
"rc"=>"",
"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'); ?>