/// <summary> /// Si el timbrado fue exitoso, guarda automáticamente el registro en la tabla [RegistroTimbrado] /// </summary> /// <param name="comprobanteTimbrado">El comprobante timbrado a guardar</param> /// <returns>true si se guardo correctamente el registro, false de lo contrario</returns> private void GuardarBd(ComprobanteTimbrado comprobanteTimbrado) { try { _db.Conectar(); _db.CrearComando(@"INSERT INTO RegistroTimbrado (RFC_EMISOR, RFC_RECEPTOR, SERIE, UUID, FECHATIMBRADO, XML_BASE64) VALUES (@rfcEmisor, @rfcReceptor, @serie, @uuid, @fecha, @xml)"); _db.AsignarParametroCadena("@rfcEmisor", _rfcEmisor); _db.AsignarParametroCadena("@rfcReceptor", _rfcReceptor); _db.AsignarParametroCadena("@serie", _serie); _db.AsignarParametroCadena("@uuid", comprobanteTimbrado.Uuid); _db.AsignarParametroCadena("@fecha", comprobanteTimbrado.FechaTimbrado); _db.AsignarParametroCadena("@xml", comprobanteTimbrado.XmlTimbradoBase64); Log("GuardarBD-Timbrado-Consulta=" + _db.comando.CommandText); _db.EjecutarConsulta1(); Log("GuardarBD-Timbrado-OK"); } catch { // ignored Log("GuardarBD-Timbrado-ERROR"); } finally { if (_db != null) { _db.Desconectar(); } } }
/// <summary> /// Timbra un comprobante con el PAC /// </summary> /// <param name="url">URL del PAC (produccion o pruebas)</param> /// <param name="token">Token definido para la empresa (produccion o pruebas)</param> /// <param name="postBody">Información en JSON a emitir al PAC</param> /// <returns>El objeto coteniendo los valores de timbrado</returns> private async Task <ComprobanteTimbrado> ProcesarComprobante(string url, string token, string postBody) { var httpClient = new HttpClient(); ComprobanteTimbrado comprobante = null; var response = ""; try { httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); httpClient.DefaultRequestHeaders.Add("Token", token); var wcfResponse = await httpClient.PostAsync(url, new StringContent(postBody, Encoding.UTF8, "application/json")).ConfigureAwait(false); response = await wcfResponse.Content.ReadAsStringAsync(); Log("ProcesarComprobante-response=" + response); var result = (Dictionary <string, object>) new JavaScriptSerializer().DeserializeObject(response); if (wcfResponse.IsSuccessStatusCode) { comprobante = new ComprobanteTimbrado { Uuid = result["uuid"].ToString(), FechaTimbrado = result["fechaTimbrado"].ToString(), XmlTimbradoBase64 = result[GetField(url)].ToString() }; Log("ProcesarComprobante-comprobante-Uuid=" + comprobante.Uuid); Log("ProcesarComprobante-comprobante-fechaTimbrado=" + comprobante.FechaTimbrado); Log("ProcesarComprobante-comprobante-XmlTimbradoBase64=" + comprobante.XmlTimbradoBase64); GuardarBd(comprobante); } else { LastError = result["mensaje"].ToString(); Log("ProcesarComprobante-LastError=" + LastError); } } catch { var result = (object[])new JavaScriptSerializer().DeserializeObject(response); LastError = ((Dictionary <string, object>)result.First())["mensaje"].ToString(); Log("ProcesarComprobante-LastError=" + LastError); comprobante = null; } finally { httpClient.Dispose(); } return(comprobante); }