Example #1
0
 private function generateInvoiceXML($invoiceData = array())
 {
     $invoiceXML = new DOMDocument('1.0', 'UTF-8');
     $root = $invoiceXML->createElement('Comprobante');
     $root = $invoiceXML->appendChild($root);
     loadAttribute($root, array("xmlns" => "http://www.sat.gob.mx/cfd/2", "xmlns:psgecfd" => "http://www.sat.gob.mx/psgecfd", "xmlns:xsi" => "http://www.w3.org/2001/XMLSchema-instance", "xsi:schemaLocation" => "http://www.sat.gob.mx/cfd/2 http://www.sat.gob.mx/sitio_internet/cfd/2/cfdv2.xsd http://www.sat.gob.mx/psgecfd http://www.sat.gob.mx/sitio_internet/cfd/psgecfd/psgecfd.xsd"));
     loadAttribute($root, array('anoAprobacion' => $invoiceData['anoAprobacion'], 'certificado' => $invoiceData['certificado'], 'fecha' => isoDate($invoiceData['fecha']), 'folio' => $invoiceData['folio'], 'formaDePago' => $invoiceData['formaPago'], 'noAprobacion' => $invoiceData['noAprobacion'], 'noCertificado' => sfConfig::get('app_sat_certificado'), 'sello' => $invoiceData['sello'], 'subTotal' => $invoiceData['subTotal'], 'tipoDeComprobante' => $invoiceData['tipoComprobante'], 'total' => $invoiceData['total'], 'version' => sfConfig::get('app_sat_version'), 'serie' => ''));
     $company = $invoiceXML->createElement('Emisor');
     $company = $root->appendChild($company);
     loadAttribute($company, array('nombre' => $invoiceData['Emisor']['nombre'], 'rfc' => $invoiceData['Emisor']['rfc']));
     $address = $invoiceXML->createElement('DomicilioFiscal');
     $address = $company->appendChild($address);
     loadAttribute($address, array('calle' => $invoiceData['Emisor']['calle'], 'codigoPostal' => $invoiceData['Emisor']['codigoPostal'], 'colonia' => $invoiceData['Emisor']['colonia'], 'estado' => $invoiceData['Emisor']['estado'], 'municipio' => $invoiceData['Emisor']['municipio'], 'noExterior' => $invoiceData['Emisor']['noExterior'], 'pais' => $invoiceData['Emisor']['pais']));
     $client = $invoiceXML->createElement('Receptor');
     $client = $root->appendChild($client);
     loadAttribute($client, array('nombre' => $invoiceData['Receptor']['nombre'], 'rfc' => $invoiceData['Receptor']['rfc']));
     $clientAddress = $invoiceXML->createElement('Domicilio');
     $clientAddress = $client->appendChild($clientAddress);
     loadAttribute($clientAddress, array('calle' => $invoiceData['Receptor']['calle'], 'noExterior' => $invoiceData['Receptor']['noExterior'], 'noInterior' => $invoiceData['Receptor']['noInterior'], 'colonia' => $invoiceData['Receptor']['colonia'], 'municipio' => $invoiceData['Receptor']['municipio'], 'estado' => $invoiceData['Receptor']['estado'], 'pais' => $invoiceData['Receptor']['pais'], 'codigoPostal' => $invoiceData['Receptor']['codigoPostal']));
     $concepts = $invoiceXML->createElement('Conceptos');
     $concepts = $root->appendChild($concepts);
     for ($i = 0; $i < sizeof($invoiceData['Conceptos']); $i++) {
         $concept = $invoiceXML->createElement('Concepto');
         $concept = $concepts->appendChild($concept);
         loadAttribute($concept, array('cantidad' => $invoiceData['Conceptos'][$i]['cantidad'], 'descripcion' => $invoiceData['Conceptos'][$i]['descripcion'], 'importe' => $invoiceData['Conceptos'][$i]['importe'], 'valorUnitario' => $invoiceData['Conceptos'][$i]['valorUnitario']));
     }
     $taxes = $invoiceXML->createElement('Impuestos');
     $taxes = $root->appendChild($taxes);
     loadAttribute($taxes, array('totalImpuestosTrasladados' => $invoiceData['iva']));
     $taxTranslated = $invoiceXML->createElement('Traslados');
     $taxTranslated = $taxes->appendChild($taxTranslated);
     $iva = $invoiceXML->createElement('Traslado');
     $iva = $taxTranslated->appendChild($iva);
     loadAttribute($iva, array('importe' => $invoiceData['iva'], 'impuesto' => 'IVA', 'tasa' => sfConfig::get('app_sat_tasa')));
     return $invoiceXML->saveXML();
 }
    $returnValue = str_replace('+00:00', '.0000000Z', @date('c', $timestamp));
    @date_default_timezone_set($tz);
    return $returnValue;
}
// (1) Prepare your data ready
$accountName = '';
// TODO:
$accountKey = "";
// TODO:
$baseUrl = "";
// TODO:
$resourceName = "/" . $_GET["imageName"];
$path = '/scannedimages';
$start = isoDate(time() - 10);
// 10 seconds before
$expires = isoDate(time() + 1200);
// 20 miniteus later
// (2) generate signature
$strToSign = array();
$strToSign[] = 'w';
$strToSign[] = $start;
$strToSign[] = $expires;
$strToSign[] = "/{$accountName}{$path}{$resourceName}";
$strToSign[] = '';
$sig = base64_encode(hash_hmac('sha256', implode("\n", $strToSign), base64_decode($accountKey), true));
// (3) generate SAS the query
$params = array();
$params[] = 'sp=w';
$params[] = 'st=' . urlencode($start);
$params[] = 'se=' . urlencode($expires);
$params[] = 'sr=b';