En PHP el generar un JSON es fácil, ya que existen funciones que nos permiten transformar un arreglo asociativo a una estructura JSON y viceversa.
Teniendo en mente está idea, a continuación un ejemplo de como generar el JSON de un CFDI y enviado a ser timbrado utilizando nuestro SDK.
Pasos a seguir
- Paso 1: Crear un proyecto en PHP o preparar aquel donde se estará utilizando.
- Paso 2: Instalar la librería (SDK) de PHP, la cual puede ser instalada a través de composer o de manera manual.
- Paso 3: Generar un arreglo asociativo donde se almacenen los datos de la factura. Por ejemplo:
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364$emisor["Rfc"]="LAN8507268IA";$emisor["Nombre"]="NombreRazonSocial";$emisor["RegimenFiscal"]="601";$receptor["Rfc"] = "AAA010101AAA";$receptor["Nombre"] = "NombreRazonSocial";$receptor["ResidenciaFiscalSpecified"] = false;$receptor["NumRegIdTrib"] = null;$receptor["UsoCFDI"] = "G03";$conceptos = null;$ImpuestosTotales = null;$complemento = null;$totalImpuestosTrasladados = 0;$Subtotal = 0;$comprobante["Version"] = "3.3";$comprobante["Serie"] = "A";$comprobante["Folio"] = "123456";$comprobante["Fecha"] = date('Y-m-d\TH:i:s');$comprobante["Moneda"] = "MXN";$comprobante["TipoDeComprobante"] = "I";$comprobante["LugarExpedicion"] = "45400";$comprobante["Emisor"] = $emisor;$comprobante["Receptor"] = $receptor;$comprobante["Complemento"] = $complemento;$comprobante["MetodoPagoSpecified"] = true;$comprobante["MetodoPago"] = "PUE";for($i=0; $i<5; $i++){$traslado[0]["Base"] = "200.00";$Subtotal += (float) $traslado[0]["Base"];$traslado[0]["Impuesto"] = "002";$traslado[0]["TipoFactor"] = "Tasa";$traslado[0]["TasaOCuota"] = "0.160000";$traslado[0]["TasaOCuotaSpecified"] = true;$traslado[0]["Importe"] = "32.00";$totalImpuestosTrasladados +=(float) $traslado[0]["Importe"];$traslado[0]["ImporteSpecified"] = true;$impuesto["Traslados"] = $traslado;$concepto["ClaveProdServ"] = "50211503";$concepto["NoIdentificacion"] = "UT421511";$concepto["Cantidad"] = 1;$concepto["ClaveUnidad"] = "H87";$concepto["Unidad"] = "Pieza";$concepto["Descripcion"] = "Cigarros";$concepto["ValorUnitario"] = "200.00";$concepto["Importe"] = "200.00";$conceptos[$i]=$concepto;$conceptos[$i]["Impuestos"] = $impuesto;}$comprobante["Conceptos"] = $conceptos;$ImpuestosTotales["Retenciones"] = null;$ImpuestosTotales["Traslados"][0]["Impuesto"] = "002";$ImpuestosTotales["Traslados"][0]["TipoFactor"] = "Tasa";$ImpuestosTotales["Traslados"][0]["TasaOCuota"] = "0.160000";$ImpuestosTotales["Traslados"][0]["Importe"] = (string)$totalImpuestosTrasladados;$ImpuestosTotales["TotalImpuestosRetenidosSpecified"] = false;$ImpuestosTotales["TotalImpuestosTrasladados"] = (string)$totalImpuestosTrasladados;$ImpuestosTotales["TotalImpuestosTrasladadosSpecified"] = true;$comprobante["Impuestos"] = $ImpuestosTotales;$comprobante["SubTotal"] = (string)$Subtotal;$comprobante["Total"] = (string)$Subtotal + $totalImpuestosTrasladados;
- Paso 4: Hacer uso de la función “json_encode($comprobante)” donde se le estará enviando como parámetro el array asociativo, lo que nos dejará con un objeto de tipo JSON.
- Paso 5: Enviar a través del SDK el objeto de JSON a timbrar. El ejemplo en código de lo descrito sería de la siguiente manera:
12345678910111213141516171819202122232425try{$basePath = "c:\\";$jsonIssuerStamp = jsonEmisionTimbrado::Set($params);$resultadoJson = $jsonIssuerStamp::jsonEmisionTimbradoV4($json);if($resultadoJson->status=="success"){//save CFDI$ruta=$basePath.$resultadoJson->data->uuid.".xml";file_put_contents($ruta, $resultadoJson->data->cfdi);echo $resultadoJson->data->cfdi;//save QRCode$nombreyRuta = $resultadoJson->data->uuid.".png";imagepng(imagecreatefromstring(base64_decode($resultadoJson->data->qrCode)), $basePath.$nombreyRuta);}else{//save data error$ruta = $basePath."Error-".$comprobante["Serie"]."-".$comprobante["Folio"].".txt";$mensaje= $resultadoJson->message."\n".$resultadoJson->messageDetail;file_put_contents($ruta, $message);}//var_dump($resultadoJson);}catch(Exception $e){echo $e->getMessage();} - Paso 6: Realizar la validación del estatus del timbrado, en caso de éxito guardar el QR y demás datos que nos pudieran interesar, y para el caso de error mostrar error de acuerdo a la información del servicio web.
Descargar ejemplo
Archivo PHP utilizado a través del siguiente enlace.