PHP

A continuación encontrara los ejemplos para consumir los servicios de SmartWeb; cabe resaltar que todos los ejemplos fueron probados exitosamente con la versión 5.3 de PHP. De igual manera puede descargar los proyectos con los código de ejemplo de la pagina de github para SmarterWeb.

Todas las URLs mostradas en esta documentación apuntan al servicio de pruebas, para obtener las URLs del servicio productivo es necesario contratar un paquete.

Autenticación

Antes de realizar cualquier otra operación es necesario autenticarse, para consumir este servicio se usa la URL: http://pruebascfdi.smartweb.com.mx/Autenticacion/wsAutenticacion.asmx?WSDL.

El servicio de autenticación básico recibe un usuario y una contraseña, si ambos son correctos devuelve un token de autenticación, en caso contrario se lanza una excepción.

<?php
    $options = array('trace' => 1, 'exceptions' => true);
    $urlAutentica = 'http://pruebascfdi.smartweb.com.mx/Autenticacion/wsAutenticacion.asmx?WSDL';
    try
    {
        $autentica = new SoapClient($urlAutentica, $options);
        $credentials = array('usuario' => 'demo', 'password' => '123456789');
        $token = $autentica->AutenticarBasico($credentials)->AutenticarBasicoResult;
        echo $token;
    }
    catch(SoapFault $e)
    {
        echo $e->faultstring;
    }
?>

Timbrado

Para el servicio de timbrado se usa la URL: http://pruebascfdi.smartweb.com.mx/Timbrado/wsTimbrado.asmx?WSDL

TimbrarXML

TimbrarXML Recive el contenido de una factura en string y el token de autenticación, si la factura y el token son correctos devuelve el complemento timbre en un string, en caso contrario lanza una excepción.

<?php
    $options = array('trace' => 1, 'exceptions' => true);
    $urlAutentica = 'http://pruebascfdi.smartweb.com.mx/Autenticacion/wsAutenticacion.asmx?WSDL';
    $urlTimbrado = 'http://pruebascfdi.smartweb.com.mx/Timbrado/wsTimbrado.asmx?WSDL';
    
    try
    {
        $autentica = new SoapClient($urlAutentica, $options);
        $timbrado = new SoapClient($urlTimbrado, $options);
        $credentials = array('usuario' => 'demo', 'password' => '123456789');
        $token = $autentica->AutenticarBasico($credentials)->AutenticarBasicoResult;
        $xml = file_get_contents('factura1peso.xml');
        $timbrarData = array('xmlComprobante' => $xml, 'tokenAutenticacion' => $token);
        $result = $timbrado->TimbrarXML($timbrarData)->TimbrarXMLResult;
        echo $result;
    }
    catch(SoapFault $e)
    {
        echo $e->faultstring;
    }
?>

TimbrarXMLV2

TimbrarXMLV2 es muy similar a TimbrarXML, con la diferencia de que el resultado en lugar de ser solo el complemento timbre, es la factura ya timbrada.

<?php
    $options = array('trace' => 1, 'exceptions' => true);
    $urlAutentica = 'http://pruebascfdi.smartweb.com.mx/Autenticacion/wsAutenticacion.asmx?WSDL';
    $urlTimbrado = 'http://pruebascfdi.smartweb.com.mx/Timbrado/wsTimbrado.asmx?WSDL';
    
    try
    {
        $autentica = new SoapClient($urlAutentica, $options);
        $timbrado = new SoapClient($urlTimbrado, $options);
        $credentials = array('usuario' => 'demo', 'password' => '123456789');
        $token = $autentica->AutenticarBasico($credentials)->AutenticarBasicoResult;
        $xml = file_get_contents('factura1peso.xml');
        $timbrarData = array('xmlComprobante' => $xml, 'tokenAutenticacion' => $token);
        $result = $timbrado->TimbrarXMLV2($timbrarData)->TimbrarXMLResult;
        echo $result;
    }
    catch(SoapFault $e)
    {
        echo $e->faultstring;
    }
?>

Cancelación

Para el servicio de cancelación se usa el servicio con la URL: http://pruebascfdi.smartweb.com.mx/Cancelacion/wsCancelacion.asmx?WSDL.

CancelarCSD

Este servicio recibe los archivos *.cer y *.key en base 64, la contraseña del archivo *.key, el RFC del emisor que desea cancelar la facturas, los UUIDs de las facturas a cancelar (estos se encuentran dentro del complemento timbre) y el token de autentificación.

<?php
    $options = array('trace' => 1, 'exceptions' => true);
    $urlAutentica = 'http://pruebascfdi.smartweb.com.mx/Autenticacion/wsAutenticacion.asmx?WSDL';
    $urlCancelacion = 'http://pruebascfdi.smartweb.com.mx/Cancelacion/wsCancelacion.asmx?WSDL';
    
    try
    {
        $autentica = new SoapClient($urlAutentica, $options);
        $cancelacion = new SoapClient($urlCancelacion, $options);
        $credentials = array('usuario' => 'demo', 'password' => '123456789');
        $token = $autentica->AutenticarBasico($credentials)->AutenticarBasicoResult;
        $cer = file_get_contents('aad990814bp7_1210261233s.cer');
        $key = file_get_contents('aad990814bp7_1210261233s.key');
        $cerB64 = base64_encode($cer);
        $keyB64 = base64_encode($key);
        //Los UUIDs para este ejemplo fueron generados de manera aleatoria
        $uuids = array('17aeeccc-6ec0-49af-b786-0878d34e0b27', 'a3216283-078c-418e-bf2c-2fb62e418d45');
        $cancelacionData = array(
            'CSDCer' => $cerB64,
            'CSDKey' => $keyB64,
            'password' => '12345678a',
            'RFCEmisor' => 'AAD990814BP7',
            'UUIDs' => $uuids,
            'tokenAutenticacion' => $token
        );
        $acuse = $cancelacion->CancelarCSD($cancelacionData)->CancelarCSDResult;
        echo $acuse;
    }
    catch(SoapFault $e)
    {
        echo $e->faultstring;
    }
?>

CancelarPEM

Este servicio es muy similar a “CancelarCSD”, con la diferencia de que deben de mandarse el certificado y el key en formato *.pem, ademas de que no se envia la contraseña del key, ya que no es requerida.

<?php
    $options = array('trace' => 1, 'exceptions' => true);
    $urlAutentica = 'http://pruebascfdi.smartweb.com.mx/Autenticacion/wsAutenticacion.asmx?WSDL';
    $urlCancelacion = 'http://pruebascfdi.smartweb.com.mx/Cancelacion/wsCancelacion.asmx?WSDL';
    
    try
    {
        $autentica = new SoapClient($urlAutentica, $options);
        $cancelacion = new SoapClient($urlCancelacion, $options);
        $credentials = array('usuario' => 'demo', 'password' => '123456789');
        $token = $autentica->AutenticarBasico($credentials)->AutenticarBasicoResult;
        $cer = file_get_contents('aad990814bp7_1210261233s.cer.pem');
        $key = file_get_contents('aad990814bp7_1210261233s.key.pem');
        $cerB64 = base64_encode($cer);
        $keyB64 = base64_encode($key);
        //Los UUIDs para este ejemplo fueron generados de manera aleatoria
        $uuids = array('17aeeccc-6ec0-49af-b786-0878d34e0b27', 'a3216283-078c-418e-bf2c-2fb62e418d45');
        $cancelacionData = array(
            'PEMCer' => $cerB64,
            'PEMKey' => $keyB64,
            'RFCEmisor' => 'AAD990814BP7',
            'UUIDs' => $uuids,
            'tokenAutenticacion' => $token
        );
        $acuse = $cancelacion->CancelarPEM($cancelacionData)->CancelarPEMResult;
        echo $acuse;
    }
    catch(SoapFault $e)
    {
        echo $e->faultstring;
    }
?>

Timbres disponibles

Para obtener los timbres disponibles es necesario agregar el servicio que corresponde a la siguiente URL: https://pruebascfdi.smartweb.com.mx/Account/wsAccount.svc?wsdl. Notese que esta URL trabaja con HTTP seguro.

<?php
    $context = stream_context_create(
        array(
            'ssl' => array(
                'verify_peer' => false,
                'verify_peer_name'  => false
            )
        )
    );
    
    $options = array('trace' => 1, 'exceptions' => true);
    $urlAccount = 'https://pruebascfdi.smartweb.com.mx/Account/wsAccount.svc?WSDL';
    $optionsCertificate = array(
        'cache_wsdl' => WSDL_CACHE_NONE,
        'trace' => 1,
        'exceptions' => true,
        'stream_context' => $context
    );
    $urlAutentica = 'http://pruebascfdi.smartweb.com.mx/Autenticacion/wsAutenticacion.asmx?WSDL';
    
    try
    {
        $autentica = new SoapClient($urlAutentica, $options);
        $account = new SoapClient($urlAccount, $optionsCertificate);
        $credentials = array('usuario' => 'demo', 'password' => '123456789');
        $token = $autentica->AutenticarBasico($credentials)->AutenticarBasicoResult;
        $header = new SoapHeader('http://soapinterop.org/echoheader/', 'token', $token);
        $account->__setSoapHeaders($header);
        $client = $account->GetClientById()->GetClientByIdResult;
        $saldoCliente = $account->GetSaldoClientById(null)->GetSaldoClientByIdResult;
        echo $saldoCliente->SaldoTimbres;
        echo $saldoCliente->TimbresUtilizados;
    }
    catch(SoapFault $e)
    {
        echo $e->faultstring;
    }
?>

Obtener ID de usuario

Para obtener tu ID de usuario es necesario agregar el servicio que corresponde a la siguiente URL: https://pruebascfdi.smartweb.com.mx/Account/wsAccount.svc?wsdl. Notese que esta URL trabaja con HTTP seguro.




<?php



    $context = stream_context_create(
        array(
            'ssl' => array(
                'verify_peer' => false,
                'verify_peer_name'  => false
            )
        )
    );
     
    $options = array('trace' => 1, 'exceptions' => true);
    $urlAccount = 'https://pruebascfdi.smartweb.com.mx/Account/wsAccount.svc?WSDL';
    $optionsCertificate = array(
        'cache_wsdl' => WSDL_CACHE_NONE,
        'trace' => 1,
        'exceptions' => true,
        'stream_context' => $context
    );
    $urlAutentica = 'http://pruebascfdi.smartweb.com.mx/Autenticacion/wsAutenticacion.asmx?WSDL';
     
    try
    {
        $autentica = new SoapClient($urlAutentica, $options);
        $account = new SoapClient($urlAccount, $optionsCertificate);
        $credentials = array('usuario' => 'demo', 'password' => '123456789');
        $token = $autentica->AutenticarBasico($credentials)->AutenticarBasicoResult;
        $header = new SoapHeader('http://soapinterop.org/echoheader/', 'token', $token);

        $account->__setSoapHeaders($header);
        $usuario = $account->GetUserById(null)->GetUserByIdResult->IdUsuario;//Obtenemos el usuario provedor
        //por defecto nos devuelve el objeto completo, para obtener solo el id debemos especificarlo con el parametro 'IdUsuario'
        echo "Tu usuario ".$usuario;
        echo "<br/>";
        
        
    }
    catch(SoapFault $e)
    {
        echo $e->faultstring;
    }
?>


Crear un nuevo usuario

Para agregar un nuevo usuario es necesario agregar el servicio que corresponde a la siguiente URL: https://pruebascfdi.smartweb.com.mx/Account/wsAccount.svc?wsdl. Notese que esta URL trabaja con HTTP seguro.



<?php



    $context = stream_context_create(
        array(
            'ssl' => array(
                'verify_peer' => false,
                'verify_peer_name'  => false
            )
        )
    );
     
    $options = array('trace' => 1, 'exceptions' => true);
    $urlAccount = 'https://pruebascfdi.smartweb.com.mx/Account/wsAccount.svc?WSDL';
    $optionsCertificate = array(
        'cache_wsdl' => WSDL_CACHE_NONE,
        'trace' => 1,
        'exceptions' => true,
        'stream_context' => $context
    );
    $urlAutentica = 'http://pruebascfdi.smartweb.com.mx/Autenticacion/wsAutenticacion.asmx?WSDL';
     
    try
    {
        $autentica = new SoapClient($urlAutentica, $options);
        $account = new SoapClient($urlAccount, $optionsCertificate);
        $credentials = array('usuario' => 'demo', 'password' => '123456789');
        $token = $autentica->AutenticarBasico($credentials)->AutenticarBasicoResult;
        $header = new SoapHeader('http://soapinterop.org/echoheader/', 'token', $token);

        $account->__setSoapHeaders($header);
        $usuario = $account->GetUserById(null)->GetUserByIdResult->IdUsuario;//Obtenemos el usuario provedor
        $data = array(
    	'email' => 'ricardo.barusta@uk.com',//email del nuevo usuario
        'password' => '654321',// password del nuevo usuario 
        'name'=> 'Ricardo',// Nombre del nuevo Usuario
     	'surnames'=>'Barusta', //Apellidos del nuevo usuario
      	'profile'=>'User',//Perfil del usuario
      	'stamps'=> 50,// cantidad de timbres que tendra el usuario
       	'idParent'=>'05f731af-4c94-4d6e-aa87-7b19a16ff891',// id del provedor que dara de lata el usuario
       	'unlimited'=>true);// Activar timbres ilimitados en el usuario
        $altaUsuario = $account->CreateUser($data)->CreateUserResult;//cremos el usuario con los parametros de data
        echo "<h1>ID de usuario creado:</h1><br>";
        echo $altaUsuario;

        
    }
    catch(SoapFault $e)
    {
        echo $e->faultstring;
    }
?>



Agregar timbres a usuario

Para agregar timbres a un usuario es necesario agregar el servicio que corresponde a la siguiente URL: https://pruebascfdi.smartweb.com.mx/Account/wsAccount.svc?wsdl. Notese que esta URL trabaja con HTTP seguro.





<?php



    $context = stream_context_create(
        array(
            'ssl' => array(
                'verify_peer' => false,
                'verify_peer_name'  => false
            )
        )
    );
     
    $options = array('trace' => 1, 'exceptions' => true);
    $urlAccount = 'https://pruebascfdi.smartweb.com.mx/Account/wsAccount.svc?WSDL';
    $optionsCertificate = array(
        'cache_wsdl' => WSDL_CACHE_NONE,
        'trace' => 1,
        'exceptions' => true,
        'stream_context' => $context
    );
    $urlAutentica = 'http://pruebascfdi.smartweb.com.mx/Autenticacion/wsAutenticacion.asmx?WSDL';
     
    try
    {
        $autentica = new SoapClient($urlAutentica, $options);
        $account = new SoapClient($urlAccount, $optionsCertificate);
        $credentials = array('usuario' => 'demo', 'password' => '123456789');
        $token = $autentica->AutenticarBasico($credentials)->AutenticarBasicoResult;
        $header = new SoapHeader('http://soapinterop.org/echoheader/', 'token', $token);

        $account->__setSoapHeaders($header);
        $data = array(
            'idDealer'=>'05f731af-4c94-4d6e-aa87-7b19a16ff891',//id del provedor
           'idUser'=>'0054ece0-867f-4933-bb93-eb9a4d79bb34',// id del usuario al que se le aumentaran los timbres
           'stamps'=> 50);//cantidad de timbres que se agregaran
        $agregaTimbres = $account->AddStampsUser($data)->AddStampsUserResponse;
        
        
        
    }
    catch(SoapFault $e)
    {
        echo $e->faultstring;
    }
?>



lenguajes/php.txt · Última modificación: 2016/08/10 09:34 (editor externo)
Volver arriba
CC Attribution-Share Alike 3.0 Unported
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0