La LCO fue actualizada por última vez el 31/mar/2025
Consuming Webservices
This section shows examples in some programming languages for consuming Webservices.
Note: the examples in this section are based on the "Timbrado" WSDL. Each WSDL has its own structure and the request code must be modified according to the Webservices being connected.
PHP
<?php $fname = "/tmp/cfdi_a_timbrar.xml"; if(!file_exists($fname)){ die(PHP_EOL . "File not found" . PHP_EOL . PHP_EOL); } $handle = fopen($fname, "r"); $sData = ''; $usuario = "testing@solucionfactible.com"; $password = "timbrado.SF.16672"; while(!feof($handle)) $sData .= fread($handle, filesize($fname)); fclose($handle); $b64 = base64_encode($sData); $response = ''; /* Porfavor note: Este ejemplo está basado en el WSDL De timbrado cada WSDL tiene su propia estructura y deberá modificarse la petición acorde al webservice que se esté conectando.*/ try { $client = new SoapClient("https://testing.solucionfactible.com/ws/services/Timbrado?wsdl"); $params = array('usuario' => $usuario, 'password' => $password, 'cfdiBase64'=>$b64, 'zip'=>False); $response = $client->__soapCall('timbrarBase64', array('parameters' => $params)); } catch (SoapFault $fault) { echo "SOAPFault: ".$fault->faultcode."-".$fault->faultstring."\n"; } $ret = $response->return; print_r("Estatus request: " . $ret->status . PHP_EOL); print_r("Mensjae request: " . $ret->mensaje . PHP_EOL); if($ret->status == 200) { print_r("Contenido resultados: " . PHP_EOL); print_r($ret->resultados); } ?>
Python
#!/usr/bin/env python # -*- coding: utf-8 -*- from zeep import Client xmlFile = open("/tmp/cfdi-testing.xml", "rb") xmlBytes = xmlFile.read() xmlFile.close() isZipFile = 0 client = Client('https://testing.solucionfactible.com/ws/services/Timbrado?wsdl') result = client.service.timbrar('testing@solucionfactible.com', 'timbrado.SF.16672', xmlBytes, isZipFile) if result.status == 200:#si la autenticación fue correcta y el servicio está disponible para el usuario resultadoTimbrado = result.resultados[0] print(resultadoTimbrado.status) print(resultadoTimbrado.mensaje) if resultadoTimbrado.status==200:#si el timbrado del comprobante fue exitoso print(resultadoTimbrado.uuid) print(resultadoTimbrado.cfdiTimbrado) else:#ocurrió un error con la autenticación o la disponibilidad del servicio para el usuario print(result.mensaje)
Perl
use SOAP::Lite; use MIME::Base64; use POSIX qw(tzset); my $TZ = 'America/Mexico_city'; $user = 'testing@solucionfactible.com'; $password = 'timbrado.SF.16672'; $file = 'ruta_al_cfdi.xml'; $base64 = ""; open(FILE, $file) or die "$!"; while (read(FILE, $buf, 60*57)) { $base64 .= encode_base64($buf); } $proxy = "https://testing.solucionfactible.com/ws/services/Timbrado"; $response = SOAP::Lite->uri('http://timbrado.ws.cfdi.solucionfactible.com')->proxy($proxy)->timbrar($user, $password, $base64, false); $status = $response->result->{'status'}; $mensaje = $response->result->{'mensaje'}; print "Status: $status\n"; print "Mensaje: $mensaje\n\n"; print "Detalle por comprobante\n"; for my $t ($response->valueof('//resultados')) { print "Status $t->{'status'}\nMensaje $t->{'mensaje'}\n"; if(defined($t->{'uuid'})) { $ENV{TZ} = 'GMT'; tzset; $fTimbrado = $t->{'fechaTimbrado'}; print("UUID: $t->{'uuid'}\n"); print("CFDI: ".decode_base64($t->{'cfdiTimbrado'})."\n"); print("Fecha Timbrado: $fTimbrado\n"); print("Cadena original: $t->{'cadenaOriginal'}\n"); print("Certificado: $t->{'certificadoSAT'}\n"); print("Sello: $t->{'selloSAT'}\n"); print("QRCode: $t->{'qrCode'}\n"); } print "\n\n"; } print("\n\n");
