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