'; 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);