La LCO fue actualizada por última vez el 25/oct./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");