Files
2021-09-17 12:41:45 +02:00

95 lines
3.2 KiB
PHP

<?php
class App_Service_FeAuthInfo
{
private $_model;
public function __construct()
{
$this->_model = new Application_Model_Generic();
}
/**
* Funzione per il recupero delle credenziali di accesso al servizio fatturaB2B
*
* Le cerca prima nella tabella di appoggio interna fe_authdata
* se non le trova le cerca tramite il collegamento al sito fattuab2b.it e le memorizza per i successvi utilizzi
*
* @param string $piva
* @return mixed
* @throws App_Controller_Errors_WebServiceError
*/
public function getFeAuthCredential(string $piva)
{
$piva = str_replace('IT','', $piva);
$credenziali = $this->_model->getByColumnName('FeAuthData', 'PartitaIva', $piva);
if (!$credenziali) { // se non le trovo le cerco sul servizio del sito fattura b2b
$credenziali = $this->getFeAuthFatturaB2B($piva);
}
return $this->decriptaCredenziali($credenziali);
}
/**
* Recuper le credenziali dal sito fatturab2b.it e nel caso non sono presenti le memorizza sulla tabella delle credenziali
* @param $piva
* @return array|array[]
* @throws App_Controller_Errors_WebServiceError
*/
private function getFeAuthFatturaB2B($piva)
{
//Controllo se il cliente ha il servizio di fatturazione elettronica attivo sul sito FatturaB2B
$ApiFatturaB2B = new App_Model_CurlHttpClient('https://www.fatturab2b.it/services/checkserviziofe');
$credenzialiFe = $ApiFatturaB2B->getCall(array('piva' => $piva, 'info' => 1));
if (!$credenzialiFe || !$credenzialiFe['success'] || !$credenzialiFe['data']['StatoServizio']) {
throw new App_Controller_Errors_WebServiceError("Credenziali non esistenti o servizio non attivo per la partita iva $piva");
}
$credenziali = $credenzialiFe['data'];
$credenziali['PartitaIva'] = str_replace('IT','', $credenziali['PartitaIva']);
return $this->insertUpdateFeAuthRecord($credenziali);
}
/**
* Memorizza le credenziali nella tabella di appoggio fe_authdata
*
* @param $credenziali
* @return array|array[]
* @throws App_Controller_Errors_WebServiceError
* @throws Zend_Form_Exception
*/
private function insertUpdateFeAuthRecord($credenziali)
{
$feAuthDataForm = new Application_Form_Admin_Index_FeAuthData_Add();
if(!$feAuthDataForm->isValid($credenziali)){
throw new App_Controller_Errors_WebServiceError("Dati da inserire nel fe auth data non validi");
}
$credenziali = $feAuthDataForm->getValues();
$credenziali['DataUpdate'] = date('Y-m-d H:i:s');
$this->_model->deleteWhere('FeAuthData', array("PartitaIva = '?'" => $credenziali['PartitaIva']));
$credenziali['id'] = $this->_model->insert('FeAuthData', $credenziali);
return $credenziali;
}
/**
* Decripta le credenziali e le restituisce
*
* @param $credenziali
* @return mixed
*/
private function decriptaCredenziali($credenziali){
$credenziali['Password'] = App_Service_CodificaPiva::decriptaHex($credenziali['Password']);
return $credenziali;
}
}