/// <summary> /// Paso 2 llamado método TopUp con el producto de CashOut, para que el protocolo realice el llamado /// de pago en el WS de MultiPay 472 /// </summary> /// <param name="request">Objeto que contiene la información del pago</param> /// <param name="idPago">ID del pago creado en base de datos MW</param> /// <param name="sessionId">ID de sesión para poner en los mensajes de log</param> /// <param name="exc">Excepción generada al llamar el método del API</param> /// <returns>Respuesta del TopUp</returns> private DataContract.TopUpResponseBody PagoPaso1(PagoRequest request, int idPago, string sessionId, out Exception exc) { string methodName = string.Format("{0}", System.Reflection.MethodBase.GetCurrentMethod().Name); exc = null; DataContract.TopUpResponseBody resp = null; string endpointName = "TopUp"; try { this.ProviderLogger.InfoLow(() => TagValue.New() .MethodName(methodName) .Message("[" + sessionId + "] " + "Llamando método \"" + endpointName + "\" ...")); resp = new ServiceExecutionDelegator <DataContract.TopUpResponseBody, DataContract.TopUpRequestBody>().ResolveRequest( new DataContract.TopUpRequestBody() { AuthenticationData = new AuthenticationData() { Username = request.AuthenticationData.Username, Password = request.AuthenticationData.Password }, DeviceType = request.DeviceType, Platform = request.Platform, WalletType = DataContract.WalletType.Stock, ExternalTransactionReference = sessionId, Amount = request.Valor, TerminalID = request.Pdv, Recipient = idPago.ToString(), MNO = this.multipayReverseTopUpMno }, ApiTargetPlatform.Kinacu, ApiServiceName.TopUp); this.ProviderLogger.InfoLow(() => TagValue.New() .MethodName(methodName) .Message("[" + sessionId + "] " + "Respuesta método \"" + endpointName + "\"") .Tag("ResponseCode").Value(resp != null && resp.ResponseCode.HasValue ? resp.ResponseCode.Value.ToString() : "NULL") .Tag("ResponseMessage").Value(resp != null && !string.IsNullOrEmpty(resp.ResponseMessage) ? resp.ResponseMessage : "vacío")); } catch (Exception ex) { this.ProviderLogger.ExceptionLow(() => TagValue.New() .MethodName(methodName) .Message("[" + sessionId + "] " + "Error llamando método \"" + endpointName + "\"") .Exception(ex)); this.errorMessage = ErrorMessagesMnemonics.ApiMethodException; exc = ex; } return(resp); }
public IActionResult Edit(PagoRequest model) { Respuesta <object> oRespuesta = new Respuesta <object>(); try { using (DBObligacionesVehicularesContext db = new DBObligacionesVehicularesContext()) { Pago oPago = db.Pagos.Find(model.Id); oPago.IdMulta = model.IdMulta; oPago.IdVehiculo = model.IdVehiculo; oPago.ValorPago = model.ValorPago; db.Entry(oPago).State = Microsoft.EntityFrameworkCore.EntityState.Modified; db.SaveChanges(); oRespuesta.Exito = 1; } } catch (Exception ex) { oRespuesta.Mensaje = ex.Message; } return(Ok(oRespuesta)); }
public IActionResult Add(PagoRequest model) { Respuesta <object> oRespuesta = new Respuesta <object>(); try { using (DBObligacionesVehicularesContext db = new DBObligacionesVehicularesContext()) { Pago oPago = new Pago(); oPago.IdMulta = model.IdMulta; oPago.IdVehiculo = model.IdVehiculo; oPago.ValorPago = model.ValorPago; db.Pagos.Add(oPago); db.SaveChanges(); oRespuesta.Exito = 1; } } catch (Exception ex) { oRespuesta.Mensaje = ex.Message; } return(Ok(oRespuesta)); }
/// <summary> /// Realiza el proceso de pago de un giro /// </summary> /// <param name="request">Objeto que contiene todos los datos de autenticacion del usuario e información del pago</param> /// <returns>Respuesta del pago</returns> private PagoResponse Pago(PagoRequest request) { return((new Provider.Cash472.CashProvider()).Pago(request)); }
/// <summary> /// Realiza el proceso de pago de un giro /// </summary> /// <param name="request">Objeto que contiene todos los datos de autenticacion del usuario e información del pago</param> /// <returns>Respuesta del pago</returns> PagoResponse ICash472ApiRest.Pago(PagoRequest request) { return(this.Pago(request)); }
/// <summary> /// Realiza el proceso de pago de un giro a partir de llamados directos a los WS de MultiPay 472 /// </summary> /// <param name="request">Objeto que contiene todos los datos de autenticacion del usuario e información del pago</param> /// <returns>Respuesta del pago</returns> public PagoResponse Pago472(PagoRequest request) { string methodName = string.Format("{0}", System.Reflection.MethodBase.GetCurrentMethod().Name); this.LogRequest(request); PagoResponse response = new PagoResponse(); string sessionId = this.GetSessionId(request, response, out this.errorMessage); if (this.errorMessage != ErrorMessagesMnemonics.None) { return(response); } if (!request.IsValidRequest()) { this.SetResponseErrorCode(response, ErrorMessagesMnemonics.InvalidRequiredFields); return(response); } DwhModel.Cliente infoCliente = this.GetInfoCliente(sessionId, request.TipoIdentificacion, request.NumeroIdentificacion, out this.errorMessage); if (this.errorMessage != ErrorMessagesMnemonics.None) { this.SetResponseErrorCode(response, this.errorMessage); return(response); } MultiPay472.Service1SoapClient client = this.GetSoapClient(); string endpointName = "PagoGiro"; try { MultiPay472.PagoGiro peticion = new MultiPay472.PagoGiro(); peticion.NitRed = this.multipayNitRed; peticion.CodigoTerminal = this.multipayTerminal; peticion.CodigoTransaccion = this.GenerarCodigoTransaccion(sessionId); peticion.ConHuella = false; peticion.IdGiro = request.Id; peticion.CodigoPuntoVenta = request.Pdv; long ciudadPdv = 0; ciudadPdv = request.CiudadPdv; // long.TryParse(request.CiudadPdv, out ciudadPdv); peticion.CodigoDaneCiudadPuntoVenta = ciudadPdv; peticion.Valor = request.Valor; peticion.OIdentificacionCliente = new MultiPay472.IdentificacionCliente(); peticion.OIdentificacionCliente.TipoIdentificacion = Cash472.CashProvider.ObtenerCodigoTipoIdentificacion(request.TipoIdentificacion); peticion.OIdentificacionCliente.NumeroIdentificacion = request.NumeroIdentificacion; this.ProviderLogger.InfoLow(() => TagValue.New() .MethodName(methodName) .Message("[" + sessionId + "] " + "Llamando servicio \"" + endpointName + "\" ...")); MultiPay472.RespuestaPagoGiro resp = client.PagoGiro(peticion, this.multipayUsuario); this.ProviderLogger.InfoLow(() => TagValue.New() .MethodName(methodName) .Message("[" + sessionId + "] " + "Respuesta servicio \"" + endpointName + "\"") .Tag("Respuesta").Value(resp != null ? resp.CodigoRespuesta : "NULL")); if (resp != null && resp.CodigoRespuesta == CashProvider.CodigoRespuestaExitoso) { response.ResponseCode = 0; response.NumeroFactura = resp.NumeroFactura; response.CodigoTransaccion = !string.IsNullOrEmpty(resp.CodigoTransaccion) ? resp.CodigoTransaccion : string.Empty; response.CodigoAutorizacion = resp.CodigoAutorizacion; response.NumeroComprobantePago = resp.NumeroComprobantePago; response.NumeroReferencia = resp.NumeroReferencia; response.Valor = resp.ValorPago; response.Fecha = CashProvider.ObtenerFechaDesdeString(resp.Fecha); } else { if (resp == null) { this.errorMessage = ErrorMessagesMnemonics.WebServiceDoesNotRespond; response.ResponseCode = (int)this.errorMessage; response.ResponseMessage = this.errorMessage.ToDescription(); } else { response.ResponseMessage = CashProvider.ObtenerMensajeCodigoRespuesta(resp.CodigoRespuesta); } } } catch (Exception ex) { this.ProviderLogger.ExceptionLow(() => TagValue.New() .MethodName(methodName) .Message("[" + sessionId + "] " + "Error llamando servicio \"" + endpointName + "\"") .Exception(ex)); } return(response); }
/// <summary> /// Inserta en base de datos la información de un pago /// </summary> /// <param name="sessionId">Session ID que será escrito en los logs</param> /// <param name="request">Petición original</param> /// <param name="giro">Giro original</param> /// <param name="cliente">Información del cliente</param> /// <param name="returnCode">Codigo de error en caso de que algo falle (-1 = OK, >-1 = Error)</param> /// <param name="connection">Objeto de conexión a base de datos</param> /// <returns>Un <c>int</c> que contiene el ID del pago creado, cero en caso de falla</returns> private int InsertPago( string sessionId, PagoRequest request, DwhModel.GiroUltimaTransaccion giro, DwhModel.Cliente cliente, out ErrorMessagesMnemonics returnCode, SqlConnection connection = null) { string methodName = string.Format("{0}", System.Reflection.MethodBase.GetCurrentMethod().Name); returnCode = ErrorMessagesMnemonics.None; int ret = 0; try { this.ProviderLogger.InfoLow(() => TagValue.New() .MethodName(methodName) .Message("[" + sessionId + "] " + "Ejecutando query ...")); bool exists = giro.Id != 0; Dictionary <string, object> queryParams = new Dictionary <string, object>() { { "@GiroId", giro.Id > 0 ? (object)giro.Id : DBNull.Value }, { "@ExternalId", request.Id }, { "@EmisorId", giro.EmisorId > 0 ? (object)giro.EmisorId : DBNull.Value }, { "@ReceptorId", cliente.Id }, { "@Pdv", request.Pdv }, { "@CiudadPdv", request.CiudadPdv }, { "@TotalRecibido", request.ValorRecibidoTotal }, { "@TotalAEntregar", request.Valor }, { "@Flete", request.ValorFlete }, { "@IncluyeFlete", request.IncluyeFlete }, { "@ValorPago", request.Valor } }; if (connection == null) { using (connection = Movilway.API.Utils.Database.GetCash472DbConnection()) { connection.Open(); ret = (int)Movilway.API.Utils.Dwh <int> .ExecuteScalar( connection, Queries.Cash.InsertPago, queryParams, null); } } else { ret = (int)Movilway.API.Utils.Dwh <int> .ExecuteScalar( connection, Queries.Cash.InsertPago, queryParams, null); } this.ProviderLogger.InfoLow(() => TagValue.New() .MethodName(methodName) .Message("[" + sessionId + "] " + "Query ejecutado")); } catch (Exception ex) { this.ProviderLogger.ExceptionLow(() => TagValue.New() .MethodName(methodName) .Message("[" + sessionId + "] " + "Error ejecutando query") .Exception(ex)); returnCode = ErrorMessagesMnemonics.InternalDatabaseError; ret = 0; } return(ret); }
/// <summary> /// Realiza el proceso de pago de un giro /// </summary> /// <param name="request">Objeto que contiene todos los datos de autenticacion del usuario e información del pago</param> /// <returns>Respuesta del pago</returns> public PagoResponse Pago(PagoRequest request) { string methodName = string.Format("{0}", System.Reflection.MethodBase.GetCurrentMethod().Name); this.LogRequest(request); PagoResponse response = new PagoResponse(); string sessionId = this.GetSessionId(request, response, out this.errorMessage); if (this.errorMessage != ErrorMessagesMnemonics.None) { this.LogResponse(response); return(response); } if (!request.IsValidRequest()) { this.SetResponseErrorCode(response, ErrorMessagesMnemonics.InvalidRequiredFields); this.LogResponse(response); return(response); } DwhModel.Cliente infoCliente = this.GetInfoCliente(sessionId, request.TipoIdentificacion, request.NumeroIdentificacion, out this.errorMessage); if (this.errorMessage != ErrorMessagesMnemonics.None) { this.SetResponseErrorCode(response, this.errorMessage); this.LogResponse(response); return(response); } DwhModel.Agencia agencia = this.GetInfoAgencia(sessionId, request.AuthenticationData.Username); if (agencia == null) { this.SetResponseErrorCode(response, ErrorMessagesMnemonics.UnableToFindAgentInLocalDatabase); this.LogResponse(response); return(response); } request.CiudadPdv = Convert.ToInt64(agencia.Ciudad); DwhModel.GiroUltimaTransaccion infoGiro = this.GetInfoGiroPorExternalId(sessionId, request.Id, request.Pin, out this.errorMessage); int id = this.InsertPago(sessionId, request, infoGiro, infoCliente, out this.errorMessage); if (this.errorMessage != ErrorMessagesMnemonics.None || id == 0) { this.SetResponseErrorCode(response, ErrorMessagesMnemonics.InternalDatabaseErrorInsertingPayment); this.LogResponse(response); return(response); } Exception ex = null; string error = string.Empty; // Quitar el valor de la Agencia que va a efectuar el pago con valor facial -1 DataContract.TopUpResponseBody topup = this.PagoPaso1(request, id, sessionId, out ex); int topupResponseCode = topup != null && topup.ResponseCode.HasValue ? topup.ResponseCode.Value : -1; if (this.errorMessage == ErrorMessagesMnemonics.None && topupResponseCode == 0) { response.ResponseCode = 0; DwhModel.Pago infoPago = this.GetInfoPago(sessionId, id, out this.errorMessage); response.NumeroFactura = infoPago.NumeroFactura; response.CodigoTransaccion = !string.IsNullOrEmpty(infoPago.CodigoTransaccion) ? infoPago.CodigoTransaccion : string.Empty; response.CodigoAutorizacion = infoPago.CodigoAutorizacion; response.NumeroComprobantePago = infoPago.NumeroComprobantePago; response.NumeroReferencia = infoPago.NumeroReferencia; response.Valor = infoPago.ValorPagoRespuesta; response.Fecha = infoPago.FechaPago != null && infoPago.FechaPago.HasValue ? infoPago.FechaPago.Value : DateTime.MinValue; if (this.smssEnabled) { // Envios SMSs string message = string.Format( "Se pago un giro por {0} correspondiente al PIN: {1}. Servicio prestado por Movilway S.A.S", this.FormatMoney(request.Valor), request.Pin); SmsApi.SmsApiSoapClient smsapi = new SmsApi.SmsApiSoapClient(); try { smsapi.SendSms(new SmsApi.SendSmsRequest() { To = string.Concat("57", infoCliente.Telefono.ToString()), Message = message }); } catch (Exception exs) { this.ProviderLogger.ExceptionLow(() => TagValue.New() .MethodName(methodName) .Message("[" + sessionId + "] " + "Error envíando SMSs") .Exception(exs)); } } } else { if (topup != null && topupResponseCode != 0) { error = "Error en llamado a TopUp"; response.ResponseCode = topup.ResponseCode; response.ResponseMessage = topup.ResponseMessage; } else { error = "Error en llamado a TopUp"; response.ResponseCode = (int)this.errorMessage; response.ResponseMessage = string.Concat(this.errorMessage.ToDescription(), ex != null ? string.Concat(" => ", ex.Message) : string.Empty); } } this.LogResponse(response); return(response); }
public ProcardResponse Credito_Reversa([FromBody] PagoRequest credito_reversa) { credito_reversa.IsReversaPago = true; credito_reversa.IsPagoCredito = true; return(ProcardSocketClient.Get(credito_reversa)); }
public ProcardResponse Credito([FromBody] PagoRequest credito) { credito.IsPagoCredito = true; return(ProcardSocketClient.Get(credito)); }
public ProcardResponse Pago_Reversa([FromBody] PagoRequest pago_reversa) { pago_reversa.IsReversaPago = true; return(ProcardSocketClient.Get(pago_reversa)); }
public ProcardResponse Pago([FromBody] PagoRequest pago) { return(ProcardSocketClient.Get(pago)); }