';
echo 'PROCESO DE VERIFICACIÓN DE FORMA POSIBLE DE CANCELACIÓN Y STATUS DE UN CFDI.';
echo '';
### 2. ASIGNACIÓN DE VALORES A VARIABLES ####################################
$SendaPEMS = "archs_pem/"; // 2.1 Directorio en donde se encuentran los archivos *.cer.pem y *.key.pem
$SendaCFDI = "archs_cfdi/"; // 2.2 Directorio en donde se almacenarán los archivos *.xml
$SendaGRAFS = "archs_graf/"; // 2.3 Directorio en donde se almacenan los archivos .jpg (logo de la empresa) y .png (códigos bidimensionales).
$SendaXSD = "archs_xsd/"; // 2.4 Directorio en donde se almacenan los archivos .xsd (esquemas de validación);
$contenido_del_nodo_acuse = "";
$ValorUUID = "";
#== RFC del contribuyente (emisor) =========================================
$taxpayer_id = "EKU9003173C9";
// Nombres de archivos.
$NomArchCerPem = "EKU9003173C9.cer.pem";
$NomArchKeyPem = "EKU9003173C9.key.pem";
$NomArchKeyEncCert = "EKU9003173C9.key.enc.pem";
$RFC_Emisor = "EKU9003173C9";
$RFC_Receptor = "AAD990814BP7";
// Datos del CFDI a cancelar.
$UUID = $_GET["UUID"]; // Folio fiscal del CFDI a cancelar.
$ImpTot = $_GET["ImpTot"]; // Importe total del CFDI a cancelar.
$NoFac = $_GET["NoFac"]; // No. de factura.
// Datos de acceso del usuario.
$username = $_GET["UserName"];
$password = $_GET["PassWord"];
### MUESTRA LOS DATOS DEL USUARIO QUE ESTÁ TIMBRANDO (OPCIONAL A MOSTRAR) ######
echo '';
echo 'DATOS DEL CFDI A CANCELAR.';
echo '
';
echo '';
echo 'UUID: '.$UUID."
";
echo 'IMPORTE TOTAL: '.$ImpTot."
";
echo '
';
### MUESTRA LOS DATOS DEL USUARIO QUE ESTÁ TIMBRANDO (OPCIONAL A MOSTRAR) ######
echo '';
echo 'DATOS DEL USUARIO QUE ESTÁ TIMBRANDO.';
echo '
';
echo '';
echo 'USUARIO: '.$username."
";
echo 'PASSWORD: '.$password."
";
echo '
';
//== Creando el SOAP de envío ==================================================
$Cadena = <<
$username
$password
$RFC_Emisor
$RFC_Receptor
$UUID
$ImpTot
XML;
#== Se muestra el contenido del SOAP de envío (opcional)====================================================
echo '';
echo 'CONTENIDO DEL SOAP QUE SE ENVIA AL SERVIDOR DEL PAC';
echo '
';
echo '';
echo htmlspecialchars($Cadena);
echo '
';
if (file_exists ($SendaCFDI."soap_get_sat_status.xml")==true){
unlink($SendaCFDI."soap_get_sat_status_".$NoFac.".xml");
}
#=== Guardando el SOAP =====================================================
$NomArchSoap = $SendaCFDI."soap_get_sat_status_".$NoFac.".xml";
$fp = fopen($NomArchSoap,"a");
fwrite($fp, $Cadena);
fclose($fp);
#== Dando permisoso de lectura/escritura al archivo .XML del SOAP ==========
chmod($NomArchSoap, 0777);
### URL PRUEBAS ########################################################
$process = curl_init('https://demo-facturacion.finkok.com/servicios/soap/cancel.wsdl');
### URL PRODUCCION #####################################################
// $process = curl_init('https://facturacion.finkok.com/servicios/soap/cancel.wsdl');
curl_setopt($process, CURLOPT_HTTPHEADER, array('Content-Type: text/xml',' charset=utf-8'));
curl_setopt($process, CURLOPT_POSTFIELDS,$Cadena);
curl_setopt($process, CURLOPT_RETURNTRANSFER, true);
curl_setopt($process, CURLOPT_POST, true);
curl_setopt($process, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($process, CURLOPT_SSL_VERIFYHOST, false);
$RespServ = curl_exec($process);
echo '';
echo 'RESPUESTA DEL SERVIDOR DEL PAC';
echo '
';
echo '';
echo htmlspecialchars($RespServ);
echo '
';
// =====================================================================
$NomArchRespStatusCancel = "Resp_Solicit_StatusCancel_$NoFac.xml";
$file = fopen($SendaCFDI.$NomArchRespStatusCancel, "w");
fwrite($file, $RespServ . PHP_EOL);
fclose($file);
chmod($SendaCFDI.$NomArchRespStatusCancel, 0777);
$err = 0;
if (!$RespServ){
echo "Error: ".$RespServ."
";
return(curl_error($process));
}else{
// En este punto se leen los datos guardados en el archivo .XML
$xml = file_get_contents($SendaCFDI.$NomArchRespStatusCancel);
$DOM = new DOMDocument('1.0', 'utf-8');
$DOM->preserveWhiteSpace = FALSE;
$DOM->loadXML($xml);
$EsCancelable = $DOM->getElementsByTagName("EsCancelable")->item(0)->nodeValue;
$CodigoEstatus = $DOM->getElementsByTagName("CodigoEstatus")->item(0)->nodeValue;
$Estado = $DOM->getElementsByTagName("Estado")->item(0)->nodeValue;
echo '';
echo 'Status cancelabe: ' . $EsCancelable.'
';
echo 'Código estatus: ' . $CodigoEstatus.'
';
echo 'Estado: ' . $Estado;
echo '
';
}
curl_close($process);