Timbrado ATEB PHP
Publicado: Mié Oct 09, 2013 8:41 pm
Hola! Quiero agradecerles por la información tan útil de este sitio, gracias a ella pude finalmente generar sellos en un software que desarrolle en PHP para un amigo, sin embargo, ahora me encuentro con un problema, ya que se debe migrar a timbrado electrónico, por lo que me dice mi amigo, contrato el servicio con ATEB y me paso unos documentos de pruebas, la situación aquí es que no he trabajado con WebServices antes y me he metido en un embrollo.
lo que tengo es lo siguiente:
El resultado que me da:
preguntando en foros de PHP me solicitaron el request que se genera por PHP, es el siguiente:
de ahi se puede ver que en ningun lado esta la cadena del XML, sin embargo (segun yo) la estoy mandando en la llamada:
ya probé poniendolo como array asociado y nombrandolo XMLBytes (como el WSDL) pero nada.
Todo esto lo hice basado en un documento adjunto que me dieron con los documentos de prueba de una implementacion en VBNet, es el siguiente:
... y la migracion a CFDI es obligatoria en Enero... 
lo que tengo es lo siguiente:
Código: Seleccionar todo
<?php
$timbrador=new SoapClient("http://test.timbrado.com.mx/cfdi/wsTimbrado.asmx?wsdl");
$user="0000000001";
$pass = "pwd";
//xml contenido en los archivos de pruebas
$xml='<?xml version="1.0" encoding="UTF-8"?>....</cfdi:Comprobante>';//cadena del XML proporcionado para pruebas
//armado encabezado
$header = array('UserName' => $user,'Password' => $pass);
$Soapheader = new SOAPHeader('https://test.timbrado.com.mx/cfdi/', 'AuthenticationHeader', $header);
$timbrador->__setSoapHeaders($Soapheader);
try
{
$cfdi=$timbrador->GeneraTimbre(base64_encode($xml));
var_dump($cfdi);
}
catch (Exception $e)
{
print_r($e);
}
?>
Código: Seleccionar todo
object(stdClass)#4 (1) { ["GeneraTimbreResult"]=> string(169) "XML mal formado [EX: excepción en timbrado: El búfer no puede ser nulo. Nombre del parámetro: buffer]" };
Código: Seleccionar todo
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="https://test.timbrado.com.mx/cfdi/"><SOAP-ENV:Header><ns1:AuthenticationHeader><ns1:UserName>0000000001</ns1:UserName><ns1:Password>pwd</ns1:Password></ns1:AuthenticationHeader></SOAP-ENV:Header><SOAP-ENV:Body><ns1:GeneraTimbre/></SOAP-ENV:Body></SOAP-ENV:Envelope>
Código: Seleccionar todo
$cfdi=$timbrador->GeneraTimbre(base64_encode($xml));
Todo esto lo hice basado en un documento adjunto que me dieron con los documentos de prueba de una implementacion en VBNet, es el siguiente:
Y bueno ese es mi predicamento, espero me puedan ayudar porque ahora si de veras estoy perdido... y no quisiera tener que migrar el sistema a VBNetDentro de Visual Studio en el proyecto, agregar referencia web
Agregar la URL del Web Service
Se muestra la pantalla del web service con un metodo Service1 (GeneraTimbre)
---------------------------------------------------------------------
Se Agrego la referencia al proyecto quedando como sigue :
Direccion URL de la referencia WEB: http://test.timbrado.com.mx/cfdi/wsTimb ... neraTimbre
nombre de la carpeta: mx.com.timbrado.cfdi
----------------------------------------------------------------------
Dentro del proyecto y especifamente dentro de la forma en la cual se desea hacer uso del timbre:
se Agrego estos imports :
Imports System.Text
Imports System.Web.Services.Protocols
Se agrego las siguientes variables
Dim Auth As New mx.com.timbrado.cfdi.AuthenticationHeader
Dim ws As New mx.com.timbrado.cfdi.Service1
Dim cfdi As String = ""
Dentro del boton de ejecutar va lo siguiente:
Auth.UserName = "0000000001" ' usuario asignado
Auth.Password = "pwd" ' contraseña asignada para el cliente.
ws.AuthenticationHeaderValue = Auth
Dim xml As String = 'String que contiene el XML
Dim xmlBytes As Byte() = Encoding.UTF8.GetBytes(Xml)
Try
cfdi = ws.GeneraTimbre(Convert.ToBase64String(xmlBytes))
Catch ex As Exception
MsgBox(ex.Message)
End Try

