Closed thefantas closed 6 years ago
El hash se obtiene a partir del XML, si la información es la misma probablemente el hash sea igual. talvez deberias cambiar ese metodo, y solo enviarle el hash del XML previamente generado, y evitar que vuelva a generarlo.
Confirmado el hash es el mismo, entonces si regenero el proceso con los mismos datos el hash no cambia.
Hasta donde he podido comprobar getPdf($invoice) no coge el hash del XML como afirmas sino del de la clase $invoice, el cuál pude corroborar al crear un XML con el PDF y no se genera el XML sin antes enviarlo con $res = $see->send($invoice); Hasta ahora tengo dos opciones, generar el PDF leyendo los datos de la factura sin modificar (mantiene el hash) y volver a generar tanto XML, PDF y CDR. Se podrá hacer la transacción con la sunat ya teniendo el XML?
Saludos.
Te refieres a enviar un XML ya generado?
Sí
El mié., 22 de ago. de 2018 9:14 a. m., Giancarlos Salas < notifications@github.com> escribió:
Te refieres a enviar un XML ya generado?
— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub https://github.com/giansalex/greenter-sample/issues/25#issuecomment-415046613, or mute the thread https://github.com/notifications/unsubscribe-auth/ACr6Ws-8tKtlVISvWE540fi6t7IE215fks5uTWdEgaJpZM4WGx04 .
Se puede realizar pero actualmente no hay un ejemplo, seria útil que podamos agregarlo.
Tal vez directamente con la función de BillSender
public function send($filename, $content)
{
$client = $this->getClient();
$result = new BillResult();
try {
$zipContent = $this->compress($filename.'.xml', $content);
$params = [
'fileName' => $filename.'.zip',
'contentFile' => $zipContent,
];
$response = $client->call('sendBill', ['parameters' => $params]);
$cdrZip = $response->applicationResponse;
$result
->setCdrResponse($this->extractResponse($cdrZip))
->setCdrZip($cdrZip)
->setSuccess(true);
} catch (\SoapFault $e) {
$result->setError($this->getErrorFromFault($e));
}
return $result;
}
Asi es, solo que no hay el ejemplo, allí tendría primero que configurarse el cliente, con las credenciales y ruta del servicio.
Con esto podemos crear XML y PDF sin enviar a Sunat, útil para las boletas, saludos.
try {
$pdf = $util->getPdf($invoice);
$util->writePdf($pdf, $tmp_invoice.'.pdf');
$res = $see->genXML($invoice);
$util->writeXml($invoice, $see->getFactory()->getLastXml());
} catch (Exception $e) {
@$response_sunat['MESSAGE'] .= $e;
}
FeFactory.php <-- Agregar
public function genXML(DocumentInterface $document)
{
$this->lastXml = $this->getXmmlSigned($document);
}
See.php <-- Agregar
public function genXML(DocumentInterface $document)
{
$classDoc = get_class($document);
$this->factory
->setBuilder($this->getBuilder($classDoc));
return $this->factory->genXML($document);
}
Gracias @thefantas , seria utili si hicieras un fork, y realices los cambios en esos archivos de https://github.com/giansalex/greenter
Y para enviar el xml ya generado sólo tienes que agregar y usar esta función.
$res = $see->sendForce($invoice, file_get_contents($ruta_XML));
FeFactory.php <-- Agregar
public function sendForce(DocumentInterface $document, $dir_xml)
{
return $this->sender->send($document->getName(), $dir_xml);
}
See.php <-- Agregar
public function sendForce(DocumentInterface $document, $dir_xml)
{
$classDoc = get_class($document);
$this->factory
->setBuilder($this->getBuilder($classDoc))
->setSender($this->getSender($classDoc));
return $this->factory->send($document, $dir_xml);
}
Saludos :)
Ya lo modifiqué en el fork, saludos.
Cómo podría generar el PDF de una factura ya generada.. Digamos que el pdf se perdió, cómo lo vuelvo a generar?
Pero al ejecutar ese procedimiento cambiará el hash?
Saludos.