Cancelación Pac Factureya

Foro dedicado para discutir la parte tecnica de como es el timbrado
[[ FORO CERRADO DEBIDO A QUE YA LA INFORMACION YA NO ES VIGENTE ]]
c_arve
Mensajes: 14
Registrado: Mar Ago 27, 2013 4:01 pm

Cancelación Pac Factureya

Mensajepor c_arve » Vie Feb 07, 2014 6:03 pm

Compañeros nuevamente acudo a ustedes. estoy tratando de cancelar por medio de factureya pero me volvio a aparecer el fatidico mensaje
301 xml mal formado. lo cual me pone loco por que en los parametros que me pide este metodo no se incluye el xml.

bueno les comento la documentacion del pac exige los siguientes parametros para la funcion CancelarCFDI.

usuario
password
RFCEmisor
listaCFDI
certificadoPKCS12_Base64
passwordPKCS12

lo primero que hice fue crear el archivo pfx tal y como viene en la documentacion del pac.
1. openssl x509 –inform DER –in certificado.cer –out certificado.pem
2. openssl pkcs8 –inform DER –in llave.key –passin pass:miclave –out llave.pem
3. openssl pkcs12 –export –out Archivo.pfx –inkey llave.pem –in certificado.pem –passout pass:clavedesalida
4. openssl base64 –in Archivo.pfx –out Archivo_pfx.pem

en este ultimo paso es para convertir a base64 el archivo pfx.
el archivo pfx lo he generado en windows y en un servidor linux teniendo los mismos resultados por lo que estoy seguro que esta bien armado ademas que los comandos son los mismos que he visto como ejemplo mas de una vez en este foro.

Pues una vez hecho esto hago el llamado en PHP.


Código: Seleccionar todo

require_once("nusoap.php");


$pfx= file_get_contents('Archivo_pfx.pem');
 



$xml = simplexml_load_file('mixml.xml'); //abro el xml timbrado para sacar el uuid
$ns = $xml->getNamespaces(true);
//definir alias
$xml->registerXPathNamespace('c', $ns['cfdi']);
$xml->registerXPathNamespace('t', $ns['tfd']);
 
foreach ($xml->xpath('//t:TimbreFiscalDigital') as $tfd) {
    $UUID= $tfd['UUID'];   //obteno el uuid
 
}



$usuario= '**************';
$password= '**********';
$rfc='*************'; //rfc del emisor

$uuid_array = array
(
'uuid_solo' => $UUID
);

 

$datos=array

(

'usuario' =>$usuario,

'password' =>$password,

'RFCEmisor' => $rfc,

'listaCFDI' => $uuid_array,
 
'certificadoPKCS12_Base64' => $pfx,
'passwordPKCS12' => 'clavedesalida'  //esta clave se puso al generar el pfx

);

 
 
 

$oSoapClient = new nusoap_client('https://www.factureyapac.com/WS-TFD-FY/WS-TFD-FY.asmx?WSDL', TRUE);

$function = 'CancelarCFDI';

$respuesta = $oSoapClient->call($function, $datos);

 echo "<pre>"; print_r ($respuesta); echo "</pre>";

if (!$error = $oSoapClient->getError())

{

 

$mensaje=$respuesta["CancelarCFDIResult"]["string"][0]; //mensaje de cancelacion
$acuse=$respuesta["CancelarCFDIResult"]["string"][1]; //este es el acuse de recibo de la cancelacion
$XMLS_utf8=utf8_decode($acuse);  //lo paso a utf8 para quitar los errores de acentos que no me dejan leerlo


$nombre='acusecancelacion.xml';
 

file_put_contents($nombre, $XMLS_utf8); //guardamos el acuse de cancelacion   
    


}

else{

echo "ERROR:".print_r ($error);

exit;

}


pensando que tal vez al pasar del archivo a una variable se pierda el formato he intentado hacer esto

'certificadoPKCS12_Base64' => base64_encode($pfx),

pero tampoco he tenido exito ya que me genera el sig mensaje:

Acción no aplicada. Error: An error occurred during encode or decode operation.
Alguien que halla podido cancelar con Factureya (FEL, Factura Inteligente, Folios Digitales quienes al parecer tienen el mismo sistema y mismos metodos) que me pueda echar la mano,
seguramente estoy omitiendo algo. o alguna conversión del archivo no lo se...

fgs
Mensajes: 1
Registrado: Lun Ago 18, 2014 12:52 pm

Re: Cancelación Pac Factureya

Mensajepor fgs » Lun Ago 18, 2014 12:57 pm

Hola, yo tengo exactamente el mismo problema, la función de cancelación de factureYa me regresa error 301 XMl mal formado. Y estuve hablando con soporte y solo me dicen que "algo" tengo mal en mi código. Ya validé muchas veces y estoy seguro que todos los parámetros los estoy enviando de forma correcta.

¿Pudiste solucionar el problema? Agradecería mucho tu apoyo.

Saludos.

Tere
Mensajes: 1
Registrado: Mié Sep 10, 2014 11:44 am

Re: Cancelación Pac Factureya

Mensajepor Tere » Mié Sep 10, 2014 12:18 pm

Hola yo tengo el mismo problema, por favor me podrias apoyar diciendome si pudiste resolverlo y como??
Estoy en contacto con soporte pero no me resuelven nada y yo ya no se que mas cambiarle
Gracias

plussmx
Mensajes: 1
Registrado: Lun Nov 03, 2014 11:07 pm

Re: Cancelación Pac Factureya

Mensajepor plussmx » Lun Nov 03, 2014 11:38 pm

Hola compañeros,

De casualidad alguno pudo resolver este problema?

Saludos,

mauricio
Mensajes: 372
Registrado: Mié Ago 11, 2010 2:55 am
Ubicación: México, D.F.
Contactar:

Re: Cancelación Pac Factureya

Mensajepor mauricio » Mar Nov 11, 2014 8:41 pm

c_arve escribió:301 xml mal formado. lo cual me pone loco por que en los parametros que me pide este metodo no se incluye el xml

Los webservice pueden comunicarse con varios métodos, el XML es de los más comunes, si te dice que el XML esta mal formado, se refiere al XML que "arma" la librería que estas usando, y claro, con los parametros correctos del mismo... por ejemplo, el webservices que mencionas, al consultar el método:

Código: Seleccionar todo

from pysimplesoap.client import SoapClient, SoapFault

webservice = 'https://www.factureyapac.com/WS-TFD-FY/WS-TFD-FY.asmx?WSDL'

client = SoapClient(wsdl = webservice, trace=True)

info = client.help('CancelarCFDI')

print (info)

Nos devuelve:

Código: Seleccionar todo

CancelarCFDI(usuario=<class 'str'>, password=<class 'str'>, RFCEmisor=<class 'str'>, listaCFDI=[{'string': <class 'str'>}], certificadoPKCS12_Base64=<class 'str'>, passwordPKCS12=<class 'str'>)
 -> {'CancelarCFDIResult': [{'string': <class 'str'>}]}:

Factureya - Cancelar CFDIs timbrados por FY
Headers: None

Nota que la mayoría de los argumentos son strings, y que la listaCFDI es un array, que veo, estas pasando correctamente...

Ahora, voy a inventar los datos para ver que nos devuelve:

Código: Seleccionar todo

from pysimplesoap.client import SoapClient, SoapFault

webservice = 'https://www.factureyapac.com/WS-TFD-FY/WS-TFD-FY.asmx?WSDL'

PREFIX_SOAP = 'soapenv'
client = SoapClient(wsdl = webservice, trace=True, soap_ns=PREFIX_SOAP)

try:
    res = client.call('CancelarCFDI',
        usuario='user',
        password='letmein',
        RFCEmisor='AAA010101AAA',
        listaCFDI=['0b10d718-1234-1234-1234-b1372a81f644'],
        certificadoPKCS12_Base64='1234567890',
        passwordPKCS12='letmein'
    )
    print ('Respuesta', res)
except Exception as e:
    print ('Error', e)

print ('Llamada', client.xml_request)

Aquí lo importante es como hace la llamada, que nos devuelve:

Código: Seleccionar todo

'<?xml version="1.0" encoding="UTF-8"?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">\n<soapenv:Header/>\n<soapenv:Body>\n    <CancelarCFDI xmlns="None">\n    <RFCEmisor>AAA010101AAA</RFCEmisor><certificadoPKCS12_Base64>1234567890</certificadoPKCS12_Base64><password>letmein</password><passwordPKCS12>letmein</passwordPKCS12><usuario>user</usuario><listaCFDI><listaCFDI>0b10d718-1234-1234-1234-b1372a81f644</listaCFDI></listaCFDI></CancelarCFDI>\n</soapenv:Body>\n</soapenv:Envelope>

Ojo, no estoy diciendo que así tenga que ser, si no que este es el XML que te dice que esta mal formado, por ahí tienes que depurar...

Saludos
Todo lo que no es dado es perdido


Volver a “Envio para Timbrado”

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 9 invitados