Как сказал @MarcosAM в предыдущем ответе, лучше получать значения из XML напрямую. Я использовал $data = $xml->children('s', true)->children('', true)->children('', true)->children('a', true);
, чтобы добраться до нужного дочернего объекта, а затем просто присвоил нужные значения переменным $estatus = $data->CodigoEstatus;
.
Как только вы это сделаете, просто нужно использовать file_put_contents
и присвоить переменные, которые вы хотели, строковой переменной file_put_contents('validacion_facturas.csv', $resultado.PHP_EOL , FILE_APPEND | LOCK_EX);
Я использовал _FILE_APPEND_, чтобы продолжать запись в тот же файл и создавать заголовки в начале скрипта.
Это последний сценарий, если он хорош:
<?php
libxml_use_internal_errors(true);
$file = fopen("foo.csv","r");
$headers = "EMISOR,RECEPTOR,TOTAL,UUID,ESTATUS,ESTADO,CANCELABLE,ESTATUS CANCELACION";
file_put_contents('validacion_facturas.csv', $headers.PHP_EOL , FILE_APPEND | LOCK_EX);
while (($data = fgetcsv($file)) !== FALSE) {
$emisor = $data[0];
$receptor = $data[1];
$total = $data[2];
$uuid = $data[3];
$soap = sprintf('<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tem="http://tempuri.org/"><soapenv:Header/><soapenv:Body><tem:Consulta><tem:expresionImpresa>?re=%s&rr=%s&tt=%s&id=%s</tem:expresionImpresa></tem:Consulta></soapenv:Body></soapenv:Envelope>', $emisor,$receptor,$total,$uuid); //encabezados
$headers = [
'Content-Type: text/xml;charset=utf-8',
'SOAPAction: http://tempuri.org/IConsultaCFDIService/Consulta',
'Content-length: '.strlen($soap)
];
$url = 'https://consultaqr.facturaelectronica.sat.gob.mx/ConsultaCFDIService.svc';
$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $soap);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
$res = curl_exec($ch);
curl_close($ch);
$xml = simplexml_load_string($res);
if ($xml === false) {
echo "Failed loading XML: ";
foreach(libxml_get_errors() as $error) {
echo "<br>", $error->message;
}
}
else {
$data = $xml->children('s', true)->children('', true)->children('', true)->children('a', true);
$estatus = $data->CodigoEstatus;
$cancelable = $data->EsCancelable;
$estado = $data->Estado;
$estatus_cancelacion = $data->EstatusCancelacion;
}
$resultado = "$emisor,$receptor,$total,$uuid,$estatus,$estado,$cancelable,$estatus_cancelacion";
file_put_contents('validacion_facturas.csv', $resultado.PHP_EOL , FILE_APPEND | LOCK_EX);
}
fclose($file)
?>