function pruebaCancelacion()
{
    /**
     * Niveles de debug:
     * 0 - No almacenar
     * 1 - Almacenar mensajes SOAP en archivo log.
     */
    $debug = 1;
    /*RFC utilizado para el ambiente de pruebas*/
    $rfc_emisor = "ESI920427886";
    /*Datos de acceso al ambiente de pruebas*/
    $url_timbrado = "https://t1demo.facturacionmoderna.com/timbrado/wsdl";
    $user_id = "UsuarioPruebasWS";
    $user_password = "******";
    $parametros = array('emisorRFC' => $rfc_emisor, 'UserID' => $user_id, 'UserPass' => $user_password);
    $cliente = new FacturacionModerna($url_timbrado, $parametros, $debug);
    /*Cambiar este valor por el UUID que se desea cancelar*/
    $uuid = "3F938316-7E5E-4EE4-9D38-A8C3023120C9";
    $opciones = null;
    if ($cliente->cancelar($uuid, $opciones)) {
        echo "Cancelación exitosa\n";
    } else {
        echo "[" . $cliente->ultimoCodigoError . "] - " . $cliente->ultimoError . "\n";
    }
}
function pruebaActivacionCancelacion()
{
    /**
     * Niveles de debug:
     * 0 - No almacenar
     * 1 - Almacenar mensajes SOAP en archivo log.
     */
    $debug = 1;
    /*RFC utilizado para el ambiente de pruebas*/
    $rfc_emisor = "ESI920427886";
    /*Datos de acceso al ambiente de pruebas*/
    $url_timbrado = "https://t1demo.facturacionmoderna.com/timbrado/wsdl";
    $user_id = "UsuarioPruebasWS";
    $user_password = "******";
    $parametros = array('emisorRFC' => $rfc_emisor, 'UserID' => $user_id, 'UserPass' => $user_password);
    $cliente = new FacturacionModerna($url_timbrado, $parametros, $debug);
    /*Cambiar las variables de acuerdo a los archivos y pass del CSD que se desea activar*/
    $archCer = "utilerias/certificados/20001000000200000192.cer";
    $archKey = "utilerias/certificados/20001000000200000192.key";
    $passKey = "12345678a";
    if ($cliente->activarCancelacion($archCer, $archKey, $passKey)) {
        echo "Activación de Cancelación exitosa\n";
    } else {
        echo "[" . $cliente->ultimoCodigoError . "] - " . $cliente->ultimoError . "\n";
    }
}
function pruebaTimbrado()
{
    /**
     * Niveles de debug:
     * 0 - No almacenar
     * 1 - Almacenar mensajes SOAP en archivo log.
     */
    $debug = 1;
    //RFC utilizado para el ambiente de pruebas
    $rfc_emisor = "ESI920427886";
    //Datos de acceso al ambiente de pruebas
    $url_timbrado = "https://t1demo.facturacionmoderna.com/timbrado/wsdl";
    $user_id = "UsuarioPruebasWS";
    $user_password = "******";
    //generar y sellar un XML con los CSD de pruebas
    //$cfdi = 'layout_ini.txt';
    $cfdi = generarLayout($rfc_emisor);
    //$cfdi = sellarXML($cfdi, $numero_certificado, $archivo_cer, $archivo_pem);
    $parametros = array('emisorRFC' => $rfc_emisor, 'UserID' => $user_id, 'UserPass' => $user_password);
    $opciones = array();
    /**
     * Establecer el valor a true, si desea que el Web services genere el CBB en
     * formato PNG correspondiente.
     * Nota: Utilizar está opción deshabilita 'generarPDF'
     */
    $opciones['generarCBB'] = false;
    /**
     * Establecer el valor a true, si desea que el Web services genere la
     * representación impresa del XML en formato PDF.
     * Nota: Utilizar está opción deshabilita 'generarCBB'
     */
    $opciones['generarPDF'] = false;
    /**
     * Establecer el valor a true, si desea que el servicio genere un archivo de
     * texto simple con los datos del Nodo: TimbreFiscalDigital
     */
    $opciones['generarTXT'] = false;
    $cliente = new FacturacionModerna($url_timbrado, $parametros, $debug);
    if ($cliente->timbrar($cfdi, $opciones)) {
        //Almacenanos en la raíz del proyecto los archivos generados.
        $comprobante = 'comprobantes/' . $cliente->UUID;
        if ($cliente->xml) {
            echo "XML almacenado correctamente en {$comprobante}.xml\n";
            file_put_contents($comprobante . ".xml", $cliente->xml);
        }
        if (isset($cliente->pdf)) {
            echo "PDF almacenado correctamente en {$comprobante}.pdf\n";
            file_put_contents($comprobante . ".pdf", $cliente->pdf);
        }
        if (isset($cliente->png)) {
            echo "CBB en formato PNG almacenado correctamente en {$comprobante}.png\n";
            file_put_contents($comprobante . ".png", $cliente->png);
        }
        echo "Timbrado exitoso\n";
    } else {
        echo "[" . $cliente->ultimoCodigoError . "] - " . $cliente->ultimoError . "\n";
    }
}
 function timbrar($numero_de_certificado = "20001000000200000192")
 {
     $sucess = false;
     /**
      * Niveles de debug:
      * 0 - No almacenar
      * 1 - Almacenar mensajes SOAP en archivo log.
      */
     $debug = MODO_DEBUG == true ? 1 : 0;
     //RFC utilizado para el ambiente de pruebas
     $rfc_emisor = $this->mRFC;
     //"ESI920427886";
     //Archivos del CSD de prueba proporcionados por el SAT.
     //ver http://developers.facturacionmoderna.com/webroot/CertificadosDemo-FacturacionModerna.zip
     $archivo_cer = $this->mCERT;
     //"utilerias/certificados/20001000000200000192.cer";
     $archivo_pem = $this->mPEM;
     //"utilerias/certificados/20001000000200000192.key.pem";
     //Datos de acceso al ambiente de pruebas
     $url_timbrado = FACTURACION_URL_SERVICIO;
     // "https://t1demo.facturacionmoderna.com/timbrado/wsdl";
     $user_id = FACTURACION_USUARIO_NOMBRE;
     //"UsuarioPruebasWS";
     $user_password = FACTURACION_USUARIO_CLAVE;
     //"b9ec2afa3361a59af4b4d102d3f704eabdf097d4";
     //generar y sellar un XML con los CSD de pruebas
     $cfdi = $this->get();
     $cfdi = $this->sellarXML($numero_de_certificado);
     $parametros = array('emisorRFC' => $rfc_emisor, 'UserID' => $user_id, 'UserPass' => $user_password);
     $opciones = array();
     /**
      * Establecer el valor a true, si desea que el Web services genere el CBB en
      * formato PNG correspondiente.
      * Nota: Utilizar está opción deshabilita 'generarPDF'
      */
     $opciones['generarCBB'] = false;
     /**
      * Establecer el valor a true, si desea que el Web services genere la
      * representación impresa del XML en formato PDF.
      * Nota: Utilizar está opción deshabilita 'generarCBB'
      */
     $opciones['generarPDF'] = true;
     /**
      * Establecer el valor a true, si desea que el servicio genere un archivo de
      * texto simple con los datos del Nodo: TimbreFiscalDigital
      */
     $opciones['generarTXT'] = false;
     //setLog($url_timbrado);
     $cliente = new FacturacionModerna($url_timbrado, $parametros, $debug);
     if ($cliente->timbrar($cfdi, $opciones)) {
         //Almacenanos en la raíz del proyecto los archivos generados.
         $comprobante = PATH_FACTURAS . $cliente->UUID;
         $this->mUUID = $cliente->UUID;
         $this->mComprobante = $comprobante;
         if ($cliente->xml) {
             $this->mMessages .= "OK\tXML almacenado correctamente en {$comprobante}.xml\n";
             file_put_contents($comprobante . ".xml", $cliente->xml);
             $this->mXML = $cliente->xml;
         }
         if (isset($cliente->pdf)) {
             $this->mMessages .= "OK\tPDF almacenado correctamente en {$comprobante}.pdf\n";
             file_put_contents($comprobante . ".pdf", $cliente->pdf);
             $this->mPDF = $cliente->pdf;
         }
         if (isset($cliente->png)) {
             $this->mMessages .= "OK\tCBB en formato PNG almacenado correctamente en {$comprobante}.png\n";
             file_put_contents($comprobante . ".png", $cliente->png);
         }
         $this->mMessages .= "OK\tTimbrado exitoso\n";
         $sucess = true;
     } else {
         $this->mMessages .= "ERROR\t[" . $cliente->ultimoCodigoError . "] - " . $cliente->ultimoError . "\n";
     }
     return $sucess;
 }