Ejemplo n.º 1
0
        /// <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);
        }
Ejemplo n.º 2
0
        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));
        }
Ejemplo n.º 3
0
        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));
        }
Ejemplo n.º 4
0
 /// <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));
 }
Ejemplo n.º 5
0
 /// <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));
 }
Ejemplo n.º 6
0
        /// <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);
        }
Ejemplo n.º 7
0
        /// <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);
        }
Ejemplo n.º 8
0
        /// <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);
        }
Ejemplo n.º 9
0
 public ProcardResponse Credito_Reversa([FromBody] PagoRequest credito_reversa)
 {
     credito_reversa.IsReversaPago = true;
     credito_reversa.IsPagoCredito = true;
     return(ProcardSocketClient.Get(credito_reversa));
 }
Ejemplo n.º 10
0
 public ProcardResponse Credito([FromBody] PagoRequest credito)
 {
     credito.IsPagoCredito = true;
     return(ProcardSocketClient.Get(credito));
 }
Ejemplo n.º 11
0
 public ProcardResponse Pago_Reversa([FromBody] PagoRequest pago_reversa)
 {
     pago_reversa.IsReversaPago = true;
     return(ProcardSocketClient.Get(pago_reversa));
 }
Ejemplo n.º 12
0
 public ProcardResponse Pago([FromBody] PagoRequest pago)
 {
     return(ProcardSocketClient.Get(pago));
 }