# SDICOOP (canale web services) - Rinnovo Certificati

**URL:** <https://forum.italia.it/t/sdicoop-canale-web-services-rinnovo-certificati/10726>\
**Category:** Fatturazione Elettronica\
**Created:** [1 Agosto 2019, 2:07pm UTC](https://forum.italia.it/t/sdicoop-canale-web-services-rinnovo-certificati/10726 "2019-08-01T14:07:02Z")\
**Posts on this page:** 20\
**Page:** 13

<div class="post-metadata">

**Author:** ![Massi](https://forum.italia.it/letter_avatar_proxy/v4/letter/m/b9e5f3/32.png) [@Massi](https://forum.italia.it/u/Massi)\
**Post date:** [1 Giugno 2021, 10:46am UTC](https://forum.italia.it/t/sdicoop-canale-web-services-rinnovo-certificati/10726/244 "2021-06-01T10:46:10Z")

</div>

io, per la pare inoltro al SDI, Ho generato il pfx a partire dalla chiave privata che avevo già e del nuovo certificato che ho ricevuto … e adesso funziona regolarmente

---

<div class="post-metadata">

**Author:** ![Rocco\_Milluzzo](https://forum.italia.it/user_avatar/forum.italia.it/rocco_milluzzo/32/6969_2.png) [@Rocco\_Milluzzo](https://forum.italia.it/u/Rocco_Milluzzo)\
**Post date:** [1 Giugno 2021, 11:11am UTC](https://forum.italia.it/t/sdicoop-canale-web-services-rinnovo-certificati/10726/245 "2021-06-01T11:11:10Z")

</div>

Grazie Mille per le risposte,

mi sa che per me non è attualmente una strada percorribile perchè pare che il client SOAP di php non supporti l’invio in pfx ma non capisco perchè non dovrebbero andare bene i nuovi certificati con la “vecchia” chiave inviati separatamente (funzionante fino a ieri) piuttosto che tutto in un unico file pfx combinato ☹

Qualcuno ha affrontato il problema in php e riesce a darmi un feedback specifico?

---

<div class="post-metadata">

**Author:** ![cesco69](https://forum.italia.it/user_avatar/forum.italia.it/cesco69/32/1672_2.png) [@cesco69](https://forum.italia.it/u/cesco69)\
**Post date:** [1 Giugno 2021, 11:48am UTC](https://forum.italia.it/t/sdicoop-canale-web-services-rinnovo-certificati/10726/246 "2021-06-01T11:48:15Z")

</div>

> [@gianni\_p](#):
>
> ore 19:30 inviata pec di richiesta certificati  
> ore 19:55 aperto ticket di sollecito emissione urgente (scadevano ieri)  
> ore 20:15 ricevuta pec con i nuovi certificati

Questo è il client che uso io per inviare

```auto
<?php 
namespace App\Utils;

class MySoapClient extends \SoapClient
{
    const USER_AGENT = 'Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)';
    const REGEX_ENV = '/<soap[\s\S]*nvelope>/i';
    const REGEX_XOP = '/<xop:include[\s\S]*cid:%s@[\s\S]*?<\/xop:Include>/i';
    const REGEX_CID = '/cid:([0-9a-zA-Z-]+)@/i';
    const REGEX_CON = '/Content-ID:[\s\S].+?%s[\s\S].+?>([\s\S]*?)--MIMEBoundary/i';
    
    /**
     * Path al certificato della CA
     * @var string
     */
    public $caCertFile;
    
    /**
     * Path alla chiave privata
     * @var string
     */
    public $privateKeyFile;
    
    /**
     * Path al certificato client
     * @var string
     */
    public $clientCertFile;
    
    /**
     * Url del proxy (es. host:port)
     * @var string
     */
    public $proxyUrl;
    
    /**
     * Autenticazione del proxy (es. username:password)
     * @var string
     */
    public $proxyAuth;
    
    /**
     * Headers dell'ultima richiesta
     * @var array
     */
    private $lastRequestHeaders;
    
    /**
     * Headers dell'ultima risposta
     * @var array
     */
    private $lastResponseHeaders;
    
    /**
     * Body dell'ultima richiesta
     * @var string
     */
    private $lastRequestBody;
    
    /**
     * Body dell'ultima risposta
     * @var string
     */
    private $lastResponseBody;
    
    
    /**
     * @inheritdoc
     */
    public function __doRequest($request, $location, $action, $version, $one_way = null)
    {
        // reset
        $this->lastResponseBody = '';
        $this->lastResponseHeaders = array();

        $this->lastRequestHeaders = array(
            'Content-type: text/xml;charset="utf-8"',
            'Accept: text/xml',
            'Cache-Control: no-cache',
            'Pragma: no-cache',
            'SOAPAction: '.$action,
            'Content-length: ' . strlen($request),
        );
        $this->lastRequestBody = $request;
        
        $ch = curl_init();
        
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
        curl_setopt($ch, CURLOPT_SSL_ENABLE_ALPN, false);
        curl_setopt($ch, CURLOPT_SSLKEY, $this->privateKeyFile);
        curl_setopt($ch, CURLOPT_SSLCERT, $this->clientCertFile);
        curl_setopt($ch, CURLOPT_CAINFO, $this->caCertFile);

        curl_setopt($ch, CURLOPT_TIMEOUT, 30);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
        curl_setopt($ch, CURLOPT_USERAGENT, self::USER_AGENT);
        curl_setopt($ch, CURLOPT_URL, $location);
        curl_setopt($ch, CURLOPT_POST , true);
        
        curl_setopt($ch, CURLOPT_HTTPHEADER, $this->lastRequestHeaders);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $this->lastRequestBody);
        
        curl_setopt($ch, CURLOPT_HEADERFUNCTION, array(&$this, 'handleHeaderLine'));
        
        if( !empty($this->proxyUrl) ){
            curl_setopt($ch, CURLOPT_PROXY, $this->proxyUrl);
            if( !empty($this->proxyAuth) ){
                curl_setopt($ch, CURLOPT_PROXYUSERPWD, $this->proxyAuth);
            }
        }
        
        $this->lastResponseBody = curl_exec($ch);
        
        // $time = time();
        // file_put_contents('F:\srv-sdi\var\request\\'.$time .'-raw.txt', $this->lastResponseBody);

        if ( false === $this->lastResponseBody ) {
            $err_num = curl_errno($ch);
            $err_desc = curl_error($ch);
            $httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
            
            curl_close($ch);
            
            throw new \Exception('[HTTP:'. $httpcode .'] ' . $err_desc, $err_num);
        }
        
        curl_close($ch);
        
        $this->lastResponseBody = $this->__processResponse($this->lastResponseBody);
        
        // file_put_contents('F:\srv-sdi\var\request\\'.$time .'-parsed.txt', $this->lastResponseBody);

        return $this->lastResponseBody;
    }
    
    /**
     * Processa la risposta per supportare il formato MTOM
     * NB teniamo il metodo pubblico per favorire i test unitari
     * @param string $response
     * @throws \Exception
     * @return string
     */
    public function __processResponse($response){
        
        $xml_response = null;
        
        // recupera la risposta xml isolandola da quella mtom
        preg_match(self::REGEX_ENV, $response, $xml_response);
        
        if ( !is_array($xml_response) || count($xml_response) <= 0 ) {
            throw new \Exception('No XML has been found.');
        }
        // prendiamo il primo elemento dell'array
        $xml_response = reset($xml_response);

        // recuperiamo i tag xop
        $xop_elements = null;
        preg_match_all(sprintf(self::REGEX_XOP, '.*'), $response, $xop_elements);
        // prendiamo il primo elemento dell'array
        $xop_elements = reset($xop_elements);
        
        if ( is_array($xop_elements) && count($xop_elements) > 0 ) {
            foreach ($xop_elements as $xop_element) {
                
                // recuperiamo il cid
                $matches = null;
                preg_match(self::REGEX_CID, $xop_element, $matches);
                
                if( isset($matches[1]) ){
                    $cid = $matches[1];
                    
                    // recuperiamo il contenuto associato al cid
                    $matches = null;
                    preg_match(sprintf(self::REGEX_CON, $cid), $response, $matches);
                    
                    if( isset($matches[1]) ){
                        $binary = trim($matches[1]);
                        $binary = base64_encode($binary);
                        
                        // sostituiamo il tag xop:Include con base64_encode(binary)
                        // nota: SoapClient fa automaticamente il base64_decode(binary)
                        $old_xml_response = $xml_response;
                        $xml_response = preg_replace(sprintf(self::REGEX_XOP, $cid), $binary, $xml_response);
                        if( $old_xml_response === $xml_response ){
                            throw new \Exception('xop replace failed');
                        }
                    } else {
                        throw new \Exception('binary not found.');
                    }
                } else {
                    throw new \Exception('cid not found.');
                }
            }
        }
        
        return $xml_response;
    }
    
    /**
     * @inheritdoc
     */
    public function __getLastRequestHeaders(){
        return implode("\n", $this->lastRequestHeaders);
    }
    
    /**
     * @inheritdoc
     */
    public function __getLastResponseHeaders(){
        return implode("\n", $this->lastResponseHeaders);
    }
    
    /**
     * @inheritdoc
     */
    public function __getLastRequest(){
        return $this->lastRequestBody;
    }
    
    /**
     * @inheritdoc
     */
    public function __getLastResponse(){
        return $this->lastResponseBody;
    }
    
    /**
     * Handle singolo header richiesta cURL
     * return integer
     */
    public function handleHeaderLine($curl, $header_line){
        $this->lastResponseHeaders[] = $header_line;
        return strlen($header_line);
    }
}

```

---

<div class="post-metadata">

**Author:** ![Rocco\_Milluzzo](https://forum.italia.it/user_avatar/forum.italia.it/rocco_milluzzo/32/6969_2.png) [@Rocco\_Milluzzo](https://forum.italia.it/u/Rocco_Milluzzo)\
**Post date:** [1 Giugno 2021, 11:53am UTC](https://forum.italia.it/t/sdicoop-canale-web-services-rinnovo-certificati/10726/247 "2021-06-01T11:53:56Z")

</div>

E’ la stessa classe che uso io quindi anche tu non utilizzi il pfx ma avvalori le tre variabili sotto col la CA, il cert client e la chiave giusto?

> [@cesco69](#):
>
> ```auto
> public $caCertFile;
> public $privateKeyFile;
> public $clientCertFile;
> 
> ```

---

<div class="post-metadata">

**Author:** ![MaxBet](https://forum.italia.it/letter_avatar_proxy/v4/letter/m/ba9def/32.png) [@MaxBet](https://forum.italia.it/u/MaxBet)\
**Post date:** [1 Giugno 2021, 12:50pm UTC](https://forum.italia.it/t/sdicoop-canale-web-services-rinnovo-certificati/10726/248 "2021-06-01T12:50:11Z")

</div>

Ciao a tutti. Finora funzionava tutto bene ma da circa le 14.30 abbiamo problemi nell’invio di fatture. Qualcun altro ha lo stesso problema?

---

<div class="post-metadata">

**Author:** ![cesco69](https://forum.italia.it/user_avatar/forum.italia.it/cesco69/32/1672_2.png) [@cesco69](https://forum.italia.it/u/cesco69)\
**Post date:** [1 Giugno 2021, 12:56pm UTC](https://forum.italia.it/t/sdicoop-canale-web-services-rinnovo-certificati/10726/249 "2021-06-01T12:56:58Z")

</div>

è una classe che ho fatto io e condiviso su questo forum…  
Si non uso il pfx

---

<div class="post-metadata">

**Author:** ![Morris](https://forum.italia.it/letter_avatar_proxy/v4/letter/m/d2c977/32.png) [@Morris](https://forum.italia.it/u/Morris)\
**Post date:** [1 Giugno 2021, 12:59pm UTC](https://forum.italia.it/t/sdicoop-canale-web-services-rinnovo-certificati/10726/250 "2021-06-01T12:59:43Z")

</div>

Idem. Tutto rotto. Aspettiamo… e poi recupereremo le notifiche…

---

<div class="post-metadata">

**Author:** ![Giulio](https://forum.italia.it/letter_avatar_proxy/v4/letter/g/45deac/32.png) [@Giulio](https://forum.italia.it/u/Giulio)\
**Post date:** [1 Giugno 2021, 1:01pm UTC](https://forum.italia.it/t/sdicoop-canale-web-services-rinnovo-certificati/10726/251 "2021-06-01T13:01:42Z")

</div>

un saluto a tutti  
anche noi dalle 14:40 circa non riusciamo più ad inviare:  
`"Nessun endpoint in ascolto su https://servizi.fatturapa.it/ricevi_file in grado di accettare il messaggio"`

---

<div class="post-metadata">

**Author:** ![antonio.difra](https://forum.italia.it/letter_avatar_proxy/v4/letter/a/67e7ee/32.png) [@antonio.difra](https://forum.italia.it/u/antonio.difra)\
**Post date:** [1 Giugno 2021, 1:12pm UTC](https://forum.italia.it/t/sdicoop-canale-web-services-rinnovo-certificati/10726/252 "2021-06-01T13:12:26Z")

</div>

confermo, ultima fattura inviata alle 14.29, poi sono spariti 😃

---

<div class="post-metadata">

**Author:** ![cesco69](https://forum.italia.it/user_avatar/forum.italia.it/cesco69/32/1672_2.png) [@cesco69](https://forum.italia.it/u/cesco69)\
**Post date:** [1 Giugno 2021, 1:13pm UTC](https://forum.italia.it/t/sdicoop-canale-web-services-rinnovo-certificati/10726/253 "2021-06-01T13:13:31Z")

</div>

Confermo anch’io… attualmente ogni richiesta fallische con un timeout (dopo 30 secondi di attesa)

---

<div class="post-metadata">

**Author:** ![Laischon](https://forum.italia.it/user_avatar/forum.italia.it/laischon/32/3769_2.png) [@Laischon](https://forum.italia.it/u/Laischon)\
**Post date:** [1 Giugno 2021, 1:17pm UTC](https://forum.italia.it/t/sdicoop-canale-web-services-rinnovo-certificati/10726/254 "2021-06-01T13:17:08Z")

</div>

Confermo, **Connection timed out after 30001 milliseconds**

---

<div class="post-metadata">

**Author:** ![Antonino\_Caccamo1](https://forum.italia.it/user_avatar/forum.italia.it/antonino_caccamo1/32/2465_2.png) [@Antonino\_Caccamo1](https://forum.italia.it/u/Antonino_Caccamo1)\
**Post date:** [1 Giugno 2021, 1:39pm UTC](https://forum.italia.it/t/sdicoop-canale-web-services-rinnovo-certificati/10726/255 "2021-06-01T13:39:17Z")

</div>

Anche da noi stesso problema, connection timeout. Noi tra l’altro aspettiamo 180s

---

<div class="post-metadata">

**Author:** ![FMapelli](https://forum.italia.it/letter_avatar_proxy/v4/letter/f/7ba0ec/32.png) [@FMapelli](https://forum.italia.it/u/FMapelli)\
**Post date:** [1 Giugno 2021, 2:05pm UTC](https://forum.italia.it/t/sdicoop-canale-web-services-rinnovo-certificati/10726/256 "2021-06-01T14:05:30Z")

</div>

Cavolo, stavo sostituendo proprio oggi i certificati… pensavo era un mio problema ed invece…  
Da circa un’ora mi da il seguente errore:  
2021/06/01 16:03:39 [error] 17915#17915: \*1817 FastCGI sent in stderr: "PHP message: PHP Fatal error: Uncaught Exception: [HTTP:100] Operation timed out after 30000 milliseconds with 0 bytes received in send-invoice-to-sdi/sdiSoapClient.php:122

---

<div class="post-metadata">

**Author:** ![Morris](https://forum.italia.it/letter_avatar_proxy/v4/letter/m/d2c977/32.png) [@Morris](https://forum.italia.it/u/Morris)\
**Post date:** [1 Giugno 2021, 2:18pm UTC](https://forum.italia.it/t/sdicoop-canale-web-services-rinnovo-certificati/10726/257 "2021-06-01T14:18:56Z")

</div>

Parrebbe intervento di manutenzione che dovrebbe terminare entro le 17.  
Nel frattempo tra i sistemi di notifica funzionano solo quelli PA (ci sono arrivate solo diverse notifiche di accettato da parte della PA), mentre non ci sono arrivate fatture ricevute.  
No panic. C’è l’Italia ferma, nessuno di noi è l’unico a subire.  
Domani è festa, c’è tutto il tempo per recuperare eventualmente… 😃

---

<div class="post-metadata">

**Author:** ![Antonino\_Caccamo1](https://forum.italia.it/user_avatar/forum.italia.it/antonino_caccamo1/32/2465_2.png) [@Antonino\_Caccamo1](https://forum.italia.it/u/Antonino_Caccamo1)\
**Post date:** [1 Giugno 2021, 3:30pm UTC](https://forum.italia.it/t/sdicoop-canale-web-services-rinnovo-certificati/10726/258 "2021-06-01T15:30:20Z")

</div>

> [@Morris](#):
>
> Parrebbe intervento di manutenzione che dovrebbe terminare entro le 17.

Ciao come hai avuto questa informazione sull’intervento di manutenzione? (Che ancora sembra in atto in realtà).  
Sarebbe bello se potessero avvisarci per tempo in questi casi, o quanto meno una status page che mostri lo stato di salute dei loro sistemi.

---

<div class="post-metadata">

**Author:** ![Morris](https://forum.italia.it/letter_avatar_proxy/v4/letter/m/d2c977/32.png) [@Morris](https://forum.italia.it/u/Morris)\
**Post date:** [1 Giugno 2021, 3:33pm UTC](https://forum.italia.it/t/sdicoop-canale-web-services-rinnovo-certificati/10726/259 "2021-06-01T15:33:22Z")

</div>

Antonino… e come ho avuto l’informazione… Ho chiamato incazzato!  
E scordiamoci “l’avviso per tempo”. Ormai dopo 2 anni e mezzo di fattura elettronica credo sia chiaro che le giornate come questa siano prive di preavviso.  
E siano prive anche di tempistiche precise: sono le 17.32 e siamo già a 3 ore di vuoto completo.

---

<div class="post-metadata">

**Author:** ![Antonino\_Caccamo1](https://forum.italia.it/user_avatar/forum.italia.it/antonino_caccamo1/32/2465_2.png) [@Antonino\_Caccamo1](https://forum.italia.it/u/Antonino_Caccamo1)\
**Post date:** [1 Giugno 2021, 4:01pm UTC](https://forum.italia.it/t/sdicoop-canale-web-services-rinnovo-certificati/10726/260 "2021-06-01T16:01:37Z")

</div>

Speravo esistesse un modo a me sconosciuto per avere le comunicazioni per tempo 😒

---

<div class="post-metadata">

**Author:** ![CarmenGiannuzzi](https://forum.italia.it/letter_avatar_proxy/v4/letter/c/94ad74/32.png) [@CarmenGiannuzzi](https://forum.italia.it/u/CarmenGiannuzzi)\
**Post date:** [1 Giugno 2021, 4:01pm UTC](https://forum.italia.it/t/sdicoop-canale-web-services-rinnovo-certificati/10726/261 "2021-06-01T16:01:56Z")

</div>

Ciao a Tutti, Anche io ho lo stesso problema.  
da dopo le 12:30 [https://servizi.fatturapa.it/ricevi\_file](https://servizi.fatturapa.it/ricevi_file) non risponde.  
Sono rimasta molto tempo in attesa al telefono nel tentativo di parlare con un operatore ma non ho avuto successo.  
Qualcuno ho visto invece ha ricevuto informazioni su quando è previsto il ripristino, ma che numero avete usato? io ho usato il **800 299 940**  
Grazie infinite

---

<div class="post-metadata">

**Author:** ![Giovanni\_four](https://forum.italia.it/letter_avatar_proxy/v4/letter/g/a4c791/32.png) [@Giovanni\_four](https://forum.italia.it/u/Giovanni_four)\
**Post date:** [1 Giugno 2021, 4:06pm UTC](https://forum.italia.it/t/sdicoop-canale-web-services-rinnovo-certificati/10726/262 "2021-06-01T16:06:36Z")

</div>

Ciao,  
anche noi stesso problema.  
Ottimo lavoro ragazzi.  
Grazie mille.  
Saluti e buon lavoro.

---

<div class="post-metadata">

**Author:** ![Laischon](https://forum.italia.it/user_avatar/forum.italia.it/laischon/32/3769_2.png) [@Laischon](https://forum.italia.it/u/Laischon)\
**Post date:** [1 Giugno 2021, 4:11pm UTC](https://forum.italia.it/t/sdicoop-canale-web-services-rinnovo-certificati/10726/263 "2021-06-01T16:11:36Z")

</div>

Sogniamo il giorno in cui avremo una pagina per verificare lo stato del servizio e una mail che ci avvisi di un’eventuale manutenzione prima che avvenga. 🙂

> “…ma non è questo il giorno!”

[Pagina precedente](https://forum.italia.it/t/sdicoop-canale-web-services-rinnovo-certificati/10726.md?page=12)

[Pagina seguente](https://forum.italia.it/t/sdicoop-canale-web-services-rinnovo-certificati/10726.md?page=14)
