/// <summary> /// Función: Obtiene información del userAgent del server /// Creado: Cristopher Noh 03/07/2020 /// Modificado: /// </summary> /// <returns>Datos userAgent</returns> public IMDResponse <EntCreateUserAgent> BGetUserAgent() { IMDResponse <EntCreateUserAgent> response = new IMDResponse <EntCreateUserAgent>(); string metodo = nameof(this.BGetUserAgent); logger.Info(IMDSerialize.Serialize(67823458106593, $"Inicia {metodo}()")); try { EntCreateUserAgent entUserAgent = new EntCreateUserAgent(); entUserAgent.bindings_version = version; entUserAgent.lang = ".net"; entUserAgent.lang_version = typeof(string).Assembly.ImageRuntimeVersion; entUserAgent.publisher = "conekta"; entUserAgent.uname = Environment.OSVersion.ToString(); response.Code = 0; response.Message = "UserAgent success"; response.Result = entUserAgent; } catch (Exception ex) { response.Code = 67823458107370; response.Message = "Error al procesar la información."; logger.Error(IMDSerialize.Serialize(67823458107370, $"Error en {metodo}(): {ex.Message}", ex, response)); } return(response); }
/// <summary> /// Función: Consume servicio de Conekta para consultar información de la Orden /// Creado: Cristopher Noh 03/07/2020 /// Modificado: /// </summary> /// <param name="orderId">ID de la orden de Conekta</param> /// <param name="entUserAgent">Agente de usuario del server</param> /// <returns></returns> public IMDResponse <string> SGetOrder(string orderId, EntCreateUserAgent entUserAgent) { IMDResponse <string> response = new IMDResponse <string>(); string metodo = nameof(this.SGetOrder); logger.Info(IMDSerialize.Serialize(67823458105039, $"Inicia {metodo}(string orderId, EntCreateUserAgent entUserAgent)", orderId, entUserAgent)); try { HttpWebRequest peticion = (HttpWebRequest)WebRequest.Create($"{urlServicioConektaCrearOrden}/{orderId}"); peticion.Accept = $"application/vnd.conekta-v{conketaVersion}+json"; peticion.UserAgent = $"Conekta/v1 DotNetBindings10/Conekta::{conketaVersion}"; peticion.Method = "GET"; byte[] conektaApiKeyBytes = Encoding.UTF8.GetBytes(conketaApiKey); string conektaApiKeyBase64 = Convert.ToBase64String(conektaApiKeyBytes); string agenteUsuarioSerializado = JsonConvert.SerializeObject(entUserAgent); peticion.Headers.Add("Authorization", $"Basic {conektaApiKeyBase64}:"); peticion.Headers.Add("Accept-Language", conektaLocale); peticion.Headers.Add("X-Conekta-Client-User-Agent", agenteUsuarioSerializado); HttpWebResponse respuesta = (HttpWebResponse)peticion.GetResponse(); StreamReader respuestaStream = new StreamReader(respuesta.GetResponseStream()); string body = respuestaStream.ReadToEnd(); response.Code = 0; response.Message = "Respuesta de servicio obtenida"; response.Result = body; } catch (Exception ex) { response.Code = 67823458105816; response.Message = "Error al consultar la orden"; logger.Error(IMDSerialize.Serialize(67823458105816, $"Error en {metodo}(string orderId, EntCreateUserAgent entUserAgent): {ex.Message}", orderId, entUserAgent, ex, response)); } return(response); }
/// <summary> /// Función: Consume el servicio de Conekta para generar una orden /// Creado: Cristopher Noh 03/07/2020 /// Modificado: /// </summary> /// <param name="entCreateOrder">Datos de la compra</param> /// <param name="entUserAgent">Agente de usuario del server</param> /// <returns></returns> public IMDResponse <string> SCreateOrder(EntCreateOrder entCreateOrder, EntCreateUserAgent entUserAgent, string[] pPropiedadesOcultar = null) { IMDResponse <string> response = new IMDResponse <string>(); string metodo = nameof(this.SCreateOrder); logger.Info(IMDSerialize.Serialize(67823458103485, $"Inicia {metodo}(EntCreateOrder entCreateOrder, EntCreateUserAgent entUserAgent)", entCreateOrder, entUserAgent)); string mensajePagoError = "No pudimos procesar el pago de tu pedido, revisa nuevamente los datos ingresados o intenta con otra tarjeta."; try { ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; HttpWebRequest peticion = (HttpWebRequest)WebRequest.Create(urlServicioConektaCrearOrden); peticion.Accept = $"application/vnd.conekta-v{conketaVersion}+json"; peticion.UserAgent = $"Conekta/v1 DotNetBindings10/Conekta::{conketaVersion}"; peticion.Method = "POST"; byte[] conektaApiKeyBytes = Encoding.UTF8.GetBytes(conketaApiKey); string conektaApiKeyBase64 = Convert.ToBase64String(conektaApiKeyBytes); string agenteUsuarioSerializado = JsonConvert.SerializeObject(entUserAgent); peticion.Headers.Add("Authorization", $"Basic {conektaApiKeyBase64}:"); peticion.Headers.Add("Accept-Language", conektaLocale); peticion.Headers.Add("X-Conekta-Client-User-Agent", agenteUsuarioSerializado); string datosCrearOrdenSerializado = string.Empty; if (pPropiedadesOcultar != null) { datosCrearOrdenSerializado = JsonConvert.SerializeObject(entCreateOrder, new JsonSerializerSettings { ContractResolver = new ServContractResolver(pPropiedadesOcultar) }); } else { datosCrearOrdenSerializado = JsonConvert.SerializeObject(entCreateOrder); } string json = JsonConvert.SerializeObject(entCreateOrder, Formatting.Indented, new JsonSerializerSettings { ContractResolver = new ServContractResolver(pPropiedadesOcultar) }); byte[] bytesDatosCrearOrden = Encoding.UTF8.GetBytes(datosCrearOrdenSerializado); peticion.ContentLength = bytesDatosCrearOrden.Length; peticion.ContentType = "application/json"; Stream peticionStream = peticion.GetRequestStream(); peticionStream.Write(bytesDatosCrearOrden, 0, bytesDatosCrearOrden.Length); HttpWebResponse respuesta = (HttpWebResponse)peticion.GetResponse(); StreamReader respuestaStream = new StreamReader(respuesta.GetResponseStream()); string body = respuestaStream.ReadToEnd(); response.Code = 0; response.Message = "Respuesta de servicio obtenida."; response.Result = body; } catch (WebException webex) { if (webex.Status == WebExceptionStatus.ProtocolError) { HttpWebResponse httpResponse = (HttpWebResponse)webex.Response; string body = string.Empty; using (StreamReader content = new StreamReader(httpResponse.GetResponseStream())) { body = content.ReadToEnd(); } int statusCode = (int)httpResponse.StatusCode; if (statusCode == 402) { //No cambiar response.Code = -1500000; response.Message = "No pudimos procesar el pago, la transacción ha sido declinada. Intente con otra tarjeta o comuníquese con su banco emisor."; response.Result = body; } else { response.Code = 67823458104262; response.Message = mensajePagoError; } } else { response.Code = 67823458104262; response.Message = mensajePagoError; } } catch (Exception ex) { response.Code = 67823458104262; response.Message = mensajePagoError; logger.Error(IMDSerialize.Serialize(67823458104262, $"Error en {metodo}: {ex.Message}(EntCreateOrder entCreateOrder, EntCreateUserAgent entUserAgent)", entCreateOrder, entUserAgent, ex, response)); } return(response); }