Cancelación Pac Factureya
Publicado: Vie Feb 07, 2014 5: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.
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...
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;
}
'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...