["descrizione" => "DA COMPLETARE (verifica i dati inseriti)", "operazione" => "incerto"], 102 => ["descrizione" => "DA COMPLETARE (verifica i documenti da inviare)", "operazione" => "incerto"], 103 => ["descrizione" => "VERIFICA DOCUMENTALE","operazione" => "incerto"], 104 => ["descrizione" => "ESAME IN CORSO", "operazione" => "incerto"], 105 => ["descrizione" => "DA COMPLETARE (inserisci i dati carta)", "operazione" => "incerto"], 106 => ["descrizione" => "APPROVATA IN ATTESA FIRMA", "operazione" => "concluso"], 107 => ["descrizione" => "APPROVATA IN ATTESA RICHIESTA DI LIQUIDAZIONE", "operazione" => "concluso"], 108 => ["descrizione" => "RITIRATA", "operazione" => "concluso"], 109 => ["descrizione" => "COMPLETA E CONTABILIZZATA", "operazione" => "incerto"], 110 => ["descrizione" => "RITIRATA", "operazione" => "incerto"], 111 => ["descrizione" => "CHIUSA", "operazione" => "concluso"], 112 => ["descrizione" => "LIQUIDAZIONE IN CORSO", "operazione" => "concluso"], 113 => ["descrizione" => "CHIUSA CON ESTINZIONE ANTICIPATA", "operazione" => "concluso"], 114 => ["descrizione" => "COMPLETA", "operazione" => "concluso"], 115 => ["descrizione" => "STORNATA", "operazione" => "concluso"], 116 => ["descrizione" => "RESPINTA", "operazione" => "errore"], 117 => ["descrizione" => "NON RECUPERABILE (crea nuovo preventivo)", "operazione" => "errore"], 120 => ["descrizione" => "RITIRATA", "operazione" => "errore"], 121 => ["descrizione" => "RITIRATA", "operazione" => "errore"], 122 => ["descrizione" => "PRATICA SOSPESA IN ATTESA DI DOCUMENTI/EVENTI", "operazione" => "incerto"], ]; function demoInfo(){ return "Per il pagamento usare..."; } function ignoreSetupError(){ if(in_array($_GET[$this->step_var], ['s2s'])) return true; return false; } function auto(){ if($this->demo){ $this->redirectBaseUri = 'https://e2e-caricamento-c.santanderconsumer.it'; $this->apiUri = 'https://api-gateway-c.santanderconsumer.it'; } switch($_GET[$this->step_var]){ case 'return_ok': return $this->Procedura->concluso(); case 'return_ko': return $this->Procedura->annulla(); case 'error': return $this->Procedura->errore(); case 'configurationError': return $this->Procedura->errore($this->erroreConfigurazione); case 's2s': if($_GET["callbackTest"]){ $content = '{"practice":"123456","quotationId":"1000000000844","statusCode":"111","statusDescription":"close","orderId":"74-2023"}'; } else { $content = file_get_contents("php://input"); } $jsonResponse = json_decode($content); if($jsonResponse){ $identificativo = (string) $jsonResponse->orderId; $status = (int) $jsonResponse->statusCode; if($this->statiPratiche && $this->statiPratiche[$status]){ $this->Procedura->logga([ 'identificativo_ordine' => $identificativo, 'ultimo_metodo_scelto' => $this->Procedura->metodo_scelto,//era $tipo 'ultimo_stato' => "Ricevuta callback con codice " . $status . ": ". $this->statiPratiche[$status]["descrizione"], ]); http_response_code(204); if($this->statiPratiche[$status]["operazione"] == "concluso"){ return $this->Procedura->confermato($identificativo); } else { return $this->Procedura->errore(); } } else { trigger_error("Ricevuta S2S Santander con stato pratica non gestito ($status)"); http_response_code(500); return $this->Procedura->errore(); } } else { http_response_code(500); return $this->Procedura->errore(); } break; default: $this->importo = number_format(str_replace(",", ".", $this->importo), 2, ".", ""); if(!$this->clientId || !$this->secret || !$this->intermediario){ trigger_error("Pagamento tramite santander non configurato correttamente, manca clientId, secret o intermediario"); $this->Procedura->redirect($this->Procedura->genera_link_agg(array($this->step_var=>"error"))); } $startProcesso = $this->startProcesso(); if($startProcesso){ $this->Procedura->iniziato($this->nome_metodo); $redirectUri = $this->redirectBaseUri . (string) $startProcesso->basePath . (string) $startProcesso->token; $this->Procedura->redirect($redirectUri); } else { $this->Procedura->redirect($this->Procedura->genera_link_agg(array($this->step_var=>"error"))); } break; } } function startProcesso(){ // Recupero JWT per attivare il processo iniziale $loginUri = $this->apiUri . "/auth/login"; $loginRequestHeader = []; $loginRequestHeader[] = "X-IBM-Client-id: " . $this->clientId; $loginRequestHeader[] = "X-IBM-Client-secret: " . $this->secret; $santanderLoginRequest = curl_init(); curl_setopt($santanderLoginRequest, CURLOPT_URL, $loginUri); curl_setopt($santanderLoginRequest, CURLOPT_HTTPHEADER, $loginRequestHeader); curl_setopt($santanderLoginRequest, CURLOPT_RETURNTRANSFER, true); curl_setopt($santanderLoginRequest, CURLOPT_HEADER, true); curl_setopt($santanderLoginRequest, CURLOPT_VERBOSE, true); curl_setopt($santanderLoginRequest, CURLOPT_SSL_VERIFYHOST, FALSE); curl_setopt($santanderLoginRequest, CURLOPT_SSL_VERIFYPEER, FALSE); $santanderLoginResponse = curl_exec($santanderLoginRequest); $santanderLoginRequestInfo = curl_getinfo($santanderLoginRequest); curl_close($santanderLoginRequest); if($santanderLoginResponse && $santanderLoginRequestInfo["http_code"] == 200 && $santanderLoginRequestInfo["header_size"]){ $authorizzationHeader = ""; $headerSize = $santanderLoginRequestInfo["header_size"]; $requestHeaders = explode("\r\n", substr($santanderLoginResponse, 0, $headerSize)); if($requestHeaders) foreach($requestHeaders as $headerInfo){ $headerValue = explode(":", $headerInfo); if($headerValue && count($headerValue) > 1 && strtolower($headerValue[0]) == "authorization"){ $authorizzationHeader = $headerInfo; break; } } if($authorizzationHeader){ $startProcessoBody = []; $startProcessoBody["intermediario"] = $this->intermediario; $startProcessoBody["orderId"] = $this->identificativo; $startProcessoBody["processo"] = 0; $startProcessoBody["exitUrl"] = $this->Procedura->genera_link_agg(array($this->step_var=>"return_ok")); $startProcessoBody["controparte"]["tipoControparte"] = "CL"; $startProcessoBody["controparte"]["tipoanagrafica"] = "P"; $startProcessoBody["preventivo"]["prezzoVendita"] = (float) $this->importo; $startProcessoUri = $this->apiUri . "/whiteLabel/startProcesso"; $startProcessoHeader = []; $startProcessoHeader[] = "Accept: application/json"; $startProcessoHeader[] = $authorizzationHeader; $startProcessoHeader[] = "Content-Type: application/json"; $startProcessoRequest = curl_init(); curl_setopt($startProcessoRequest, CURLOPT_URL, $startProcessoUri); curl_setopt($startProcessoRequest, CURLOPT_HTTPHEADER, $startProcessoHeader); curl_setopt($startProcessoRequest, CURLOPT_RETURNTRANSFER, true); curl_setopt($startProcessoRequest, CURLOPT_VERBOSE, true); curl_setopt($startProcessoRequest, CURLOPT_SSL_VERIFYHOST, FALSE); curl_setopt($startProcessoRequest, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($startProcessoRequest, CURLOPT_POST, 1); curl_setopt($startProcessoRequest, CURLOPT_POSTFIELDS, json_encode($startProcessoBody)); $startProcessoResponse = curl_exec($startProcessoRequest); $startProcessoRequestInfo = curl_getinfo($startProcessoRequest); curl_close($startProcessoRequest); if($startProcessoRequestInfo["http_code"] == 200){ return json_decode($startProcessoResponse); } else { if($startProcessoRequestInfo["content_type"] == "application/problem+json" && $startProcessoResponse){ $startProcessoResponse = json_decode($startProcessoResponse); if($startProcessoResponse->description) trigger_error("Errore su startProcesso Santander: " . (string) $startProcessoResponse->description); } } } } return false; } } ?>