Ejemplos de código para implementación de timbrado desde xml
Cliente en VB.NET
Dim webServices As New WSTimbradoTexto.wsTimbradoTexto4 'referenciaWsLocal.wsTimbradoTexto()
Dim respuesta As New WSTimbradoTexto.resultado4 'referenciaWsLocal.resultado()
'Cargar en contenido el Archivo que contiene la cadena de texto
contenido
respuesta=webServices.TimbrarPorTexto4("demo.sifec@gmail.com","Acceso$01","511110", contenido)
'Manejo de ERRORES
If respuesta.errores<>""Then
TextBox1.Text=(respuesta.errores.ToString)
Else
TextBox1.Text=respuesta.folioUUID
'para descargar el xml timbrado
File.WriteAllBytes(RUTA+"\PruebaXMLTimbrado.xml",respuesta.XML)
'bajando el pdf formato generico
If respuesta.PDF IsNot Nothing Then
File.WriteAllBytes(RUTA+"\PruebaXMLPDFTimbrado.pdf",respuesta.PDF)
End If
TextBox1.Text=("Creacion exitosa")
End If
Cliente en C#
Cliente en Java
public static void main(String[] args) {
//declaramos nuestras variables
String ruta="K:\\miruta\\";
String correo="demo.sifec@gmail.com";
String pass="Acceso$01";
String rfc="AAA010101AAA";
boolean pdf=true;
String passCer="12345678a";
try {
//KEY RUTA
//Cargar los archivos a las variables
cerFile,keyFile,passCer
Resultado timbrarNomina=timbradoPorTextoNomina(correo,pass,rfc,cerFile,keyFile,passCer,contenidoArchivo,pdf,"Pruebas","3.2-1.2");
if (timbrarNomina.getErrores().equals("")) {
//si no existen errores
System.out.println("\n\n\t RESULTAOD EXITOSO\n ");
//RUTA DE SALIDA DE PDF
FileOutputStream fos= new FileOutputStream(ruta+"SalidaTimbre.pdf");
fos.write(timbrarNomina.getPDF());
fos.close();
//RUTA DE SALIDA DE XML TIMBRADO
FileOutputStream fos2= new FileOutputStream(ruta+"SalidaTimbre.xml");
fos2.write(timbrarNomina.getXML());
fos2.close();
}
else{
System.out.println("Se generaron los siguientes errores: "+timbrarNomina.getErrores() );
}
}
catch (Exception e) {
System.out.println(" ERRORES ****** : "+e);
}
}
private static org.tempuri.Resultado timbradoPorTextoNomina(String correo, String pass, String rfc, byte[] cerFile, byte[] keyFile,
String passCer, byte[] contenidoArchivo, boolean pdf, String ambiente,String version) {
org.tempuri.WsTimbradoTexto service = new org.tempuri.WsTimbradoTexto();
org.tempuri.WsTimbradoTextoSoap port = service.getWsTimbradoTextoSoap12();
return port.timbradoPorTextoNomina(correo, pass, rfc, cerFile, keyFile, passCer, contenidoArchivo, pdf, ambiente, version);
}
Cliente en PHP
<?php
header('Content-Type: text/html; charset=UTF-8');
//Creamos el objeto con el que mandaremos a Timbrar
$soapclient=new SoapClient('http://pruebas40.facturaselectronicascfdi.com/WsTimbrado4.asmx?WSDL');
//Creamos el objeto con el que se mandara a cancelar los folios
$soapclientc=new SoapClient('http://pruebas40.facturaselectronicascfdi.com/wsCancelar4.asmx?WSDL');
$ResultText='';
$CanceText='';
if(isset($_POST['SellarTimbrar4'])){
//Cargamos nuestro archivo xml este tiene que tener los atributos de NoCetificado=""Certificado=""Sello=""
$file1="Xml_Sin_Sello_40.xml";
$open=fopen($file1,"r");
$size=filesize($file1);
$Xml=fread($open,$size);
//Cargamos el Certificado que se utilizara en este xml
$file2="certificado.cer";
$open=fopen($file2,"r");
$size=filesize($file2);
$Cer=fread($open,$size);
//Cargamos el Key que se utilizara en este xml
$file3="csd.key";
$open=fopen($file3,"r");
$size=filesize($file3);
$Key=fread($open,$size);
$Correo="demo.sifec@gmail.com";
$Pass='Acceso$01';
$Proceso="410110";
$ClaveKey='12345678a';
//SellarTimbrar4(Correo,Pass,xml,Proceso,cer,key,clavekey);
//Correo:Este campo debe de incluir el correo con el que fue habilitada su cuenta
//Pass:Su contraseña
//XML:Xml en Bytes
//Proceso:Este numero de proceso se le proporcionara dependiendo de su tipo de timbrado
//-210100 Solo Sellado Timbrado
//-410110 Sellado Timbrado Mas PDF
//Cer:Certificado en Bytes
//Key:Key en Bytes
//Clave Key:Clave de su key
$params=array('curCorreo'=>$Correo,'password'=>$Pass,'xml'=>$Xml,'Proceso'=>$Proceso,'CerFile'=> $Cer,
'KeyFile'=>$Key,'PassCsd'=>$ClaveKey);
try{
$response=$soapclient->SellarTimbrar4($params);
if(empty($response->SellarTimbrar4Result->errores)){
$ResultText='<br>El timbrado fue correcto <br>UUID:'.$response->SellarTimbrar4Result->folioUUID;
$file="XmlTimbrado.pdf";
$miarch=fopen($file,"w");
fwrite($miarch,$response->SellarTimbrar4Result->PDF);
fclose($miarch);
$file="XmlTimbrado.xml";
$miarch=fopen($file,"w");
fwrite($miarch,$response->SellarTimbrar4Result->XML);
fclose($miarch);
}
else{
$ResultText='<br>El timbrado tuvo errores<br>Errores:'.$response->SellarTimbrar4Result>errores;
}
}
catch(Exception$e){
$ResultText="Se genero el siguiente error: <br>".$response->Timbrar4Result->errores;
}
}
if(isset($_POST['Tibrar4'])){
//Cargamos nuestro archivo xml este tiene que tener los atributos de NoCetificado=""Certificado =""Sello =""
$file1="Xml_Sin_Sello_4.xml";
$open=fopen($file1,"r");
$size=filesize($file1);
$Xml=fread($open,$size);
//SellarTimbrar4(Correo,Pass,xml,Proceso,cer,key,clavekey);
//Correo:Este campo debe de incluir el correo con el que fue habilitada su cuenta
//Pass:Su contraseña
//XML:Xml en Bytes
//Proceso:Este numero de proceso se le proporcionara dependiendo de su tipo de timbrado
//-210100 Solo Sellado Timbrado
//-410110 Sellado Timbrado Mas PDF
//Cer:Certificado en Bytes
//Key:Key en Bytes
//Clave Key:Clave de su key
$Correo="demo.sifec@gmail.com";
$Pass='Acceso$01';
$Proceso="410110";
$ClaveKey='12345678a';
$params=array('curCorreo'=>$Correo,'password'=>$Pass,'xml'=>$Xml,'Proceso'=>$Proceso);
//var_dump($params);
try{
$response=$soapclient->Timbrar4($params);
//var_dump($response);
//if (empty($response->timbrarResult->errores))
if (empty($response->Timbrar4Result->errores)){
$ResultText="<br>El timbrado fue correcto<br>UUID:".$response->Timbrar4Result->folioUUID
$file="XmlTimbrado.pdf";
$miarch=fopen($file,"w");
fwrite($miarch,$response->Timbrar4Result->PDF);
fclose($miarch);
$file="XmlTimbrado.xml";
$miarch=fopen($file,"w");
fwrite($miarch,$response->Timbrar4Result->XML);
fclose($miarch);
}
else{
$ResultText="<br>El timbrado tuvo errores<br>Errores:".$response->Timbrar4Result->errores;
}
}
catch(Exception $e){
$ResultText="Se genero el siguiente error:<br>".$response->Timbrar4Result->errores;
}
}
if(isset($_POST['Cancelar'])){
$Correo="demo.sifec@gmail.com";
$Pass='Acceso$01';
$params=array('curCorreo'=>$Correo,'password'=>$Pass,'RfcEmisor'=>'LAN7008173R5','UUID'=>'691a62ce-f987-421a-a8c4-be851d59b17a');
try{
$response=$soapclientc->Cancelar4($params);
if(empty($response->Cancelar4Result->errores)){
$CanceText="<br>Cancelacion fue correcto <br>";
}
else{
$CanceText="<br>El cancelar tuvo errores<br>Errores:".$response->Cancelar4Result->errores;
}
}
catch (Exception $e){
$CanceText="Se genero el siguiente error:<br>".$e->getMessage();
}
}
if(isset($_POST['CancelarEncode'])){
$Correo="demo.sifec@gmail.com";
$Pass='Acceso$01';
//Cargamos el Certificado que se utilizara para cancelar este xml
$file2="certificado.cer";
$open=fopen($file2,"r");
$size=filesize($file2);
$Cer=fread($open,$size);
//Cargamos el Key con el cual procesaremos el Encode
$convert=exec('openssl pkcs8-inform DER-in csd.key-passin pass:12345678a-out Encode.pem',$salida,$valor);
if($valor==127){
$CanceText="no Funcionó";
}
else{
$CanceText="Se ejecutó correctamente";
}
$file="Encode.pem";
$open=fopen($file,"r");
$size=filesize($file);
$pem=fread($open,$size);
$pem2=str_replace("-----BEGIN PRIVATE KEY-----","",$pem);
$Encode=str_replace("-----END PRIVATE KEY-----","",$pem2);
$params=array('curCorreo'=>$Correo,'password'=>$Pass,'RfcEmisor'=>'LAN7008173R5','UUID'=>'7dbd76b1-ac3b-4251-a919-c03a509ff5ec',
'CerFile'=>$Cer,'KeyEncode64'=>$Encode);
try{
$response=$soapclientc->Cancelar4($params);
if(empty($response->Cancelar4Result->errores)){
$CanceText="<br>Cancelacion fue correcto<br>";
}
else{
$CanceText="<br>El cancelar tuvo errores <br>Errores:".$response->Cancelar4Result->errores;
}
}
catch (Exception $e){
$CanceText="Se genero el siguiente error:<br>".$e->getMessage();
}
}
?>
<html>
<head>
<title>Cliente del Web Server para timbrado de CFDI. v4.0</title>
</head>
<body>
<div>Cliente del Web Server para timbrado de CFDI.v4.0</div>
<br>
<form method="post"action="soapcfdi2.php">
<br>Metodos Para el Timbrado
<br>
<table border="1px">
<tr>
<td align="center">
<input type="submit"name="SellarTimbrar4"value="SellarTimbrar4">
</td>
<td>
<p>-SellarTimbrar4(Correo,Pass,xml,Proceso,cer,key,clavekey);</p>
<p>-Este metodo SellarTimbrar4 requiere un.cer y .key con el que se mandara timbrar el xml estos tiene que coincidir con el Emisor</p>
<p>-Recolecta el cer y key en caso de timbrar correctamente deposita el xml y pdf en caso de existir</p>
</td>
</tr>
<tr>
<td align="center"><input type="submit"name="Tibrar4"value="Tibrar4"></td>
<td>
<p>-Timbrar4(Corre,Pass,xml,Proceso);</p>
<p>-Este metodo requiere que el Emisor del Xml carge su cer y key en la plataforma web para poder realizar
el sellado del xml enviado</p>
<p>-El xml a timbrar tiene que tener los siguientes atributos vacios NoCetificado=""Certificado=""Sello=""
ya que el ws se encargara de sellar con el cer y key cargados,Este metodo regresar el xml timbrado</p>
</td>
</tr>
<tr>
<td colspan="2">
<p>Resultado de Timbrado</p>
</td>
</tr>
<tr>
<td colspan="2">
<p><?php echo $ResultText;?></p>
<br>
</td>
</tr>
</table>
</br>
<br>
Metodo de Cancelacion
<table border="1px">
<tr>
<td align="center"><input type="submit"name="Cancelar"value="Cancelar"></td>
<td>
<br>
<p>Cancelar4(Correo, Pass, RFC, UUID); cer y key configurados en porta web</p>
<br>
</td>
</tr>
<tr>
<td align="center"><input type="submit"name="CancelarEncode"value="CancelarEncode"></td>
<td>
<br>
<p>Cancelar4EncodeCSD(Correo,Pass,RFC,UUID,Cer,Pem);cer y pem se generan por su sistema</p>
<br>
</td>
</tr>
<tr>
<td colspan="2">
<p><?php echo$CanceText;?></p>
<br>
</td>
</tr>
</table>
</form>
</body>
</html>