public async Task <Pasaje> ReservarPasaje(ReservarPasajeDTO rv)
        {
            try
            {
                HttpResponseMessage response = await client.PostAsJsonAsync(basePath + "ReservarPasaje", rv);

                response.EnsureSuccessStatusCode();

                return(await response.Content.ReadAsAsync <Pasaje>());
            }
            catch (Exception e)
            {
                throw e;
            }
        }
Exemplo n.º 2
0
 public Pasaje ReservarPasaje([FromBody] ReservarPasajeDTO dto)
 {
     try
     {
         // si idUsuario es distino de null, entonces se trata de un usuario registrado
         if (dto.idUsuario != null)
         {
             return(blu.ReservarPasaje(dto.idViaje, dto.idParadaOrigen, dto.idParadaDestino, (int)dto.idUsuario, dto.asiento));
         }
         else
         {
             return(blu.ReservarPasaje(dto.idViaje, dto.idParadaOrigen, dto.idParadaDestino, dto.documento, (TipoDocumento)dto.tipoDocumento, dto.asiento));
         }
     }
     catch (Exception e)
     {
         throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.InternalServerError, e.Message));
     }
 }
        public async Task <ActionResult> ConfirmarPago(ConfirmarPagoModel cpm)
        {
            Pasaje pasaje = new Pasaje();

            try
            {
                // Pseudocodigo:
                // obtener datos del usuario y de pasaje a reservar
                // Realizar la reserva
                // Verificar el estado del pago, si es correcto:
                //     mostrar mensaje ok
                // si no:
                //     cancelar la reserva
                //     mostrar mensaje error

                // obtengo al usuario logueado
                Usuario u = (Usuario)Session["datosLogeados"];

                // completo los datos necesarios para reservar
                ReservarPasajeDTO rpdto = new ReservarPasajeDTO()
                {
                    idViaje         = cpm.idViaje,
                    idParadaOrigen  = cpm.idParadaOrigen,
                    idParadaDestino = cpm.idParadaDestino,
                    asiento         = cpm.asiento,
                    idUsuario       = u.id,
                    documento       = u.persona.documento,
                    tipoDocumento   = u.persona.tipo_documento,
                };

                // realizo la reserva, si falla, en el catch la cancelo
                pasaje = await up.ReservarPasaje(rpdto);

                // creo un objeto Pago con la informacion necesaria
                Payment payment = new Payment()
                {
                    TransactionAmount = (float?)cpm.precio,
                    Token             = cpm.token,
                    Description       = "Reserva de pasaje en UruguayBus",
                    Installments      = cpm.installments,
                    PaymentMethodId   = cpm.payment_method_id,
                    IssuerId          = cpm.issuer_id,
                    Payer             = new Payer()
                    {
                        Email = ConfigurationManager.AppSettings["UnobtrusivePayerEmail"],
                    }
                };

                // confirma el pago
                payment.Save();

                /**
                 * pending      => El usuario no completo el proceso de pago todavía.
                 * approved     => El pago fue aprobado y acreditado.
                 * authorized   => El pago fue autorizado pero no capturado todavía.
                 * in_process   => El pago está en revisión.
                 * in_mediation => El usuario inició una disputa.
                 * rejected     => El pago fue rechazado.El usuario podría reintentar el pago.
                 * cancelled    => El pago fue cancelado por una de las partes o el pago expiró.
                 * refunded     => El pago fue devuelto al usuario.
                 * charged_back => Se ha realizado un contracargo en la tarjeta de crédito del comprador
                 */

                // verifico el estado del pago
                if (payment.Status == PaymentStatus.approved)
                { // todo bien
                    cpm.accion = ConfirmarPagoResult.Ok;
                    try
                    {
                        // mando el correo con el pasaje
                        new EmailHelper().EnviarPasajeReservado(u, pasaje, cpm);
                    } catch (Exception) { }
                }
                else
                {
                    cpm.accion = ConfirmarPagoResult.Error;
                    await up.CancelarPasaje(pasaje.id);
                }
                return(View(cpm));
            }
            catch (Exception)
            {
                try
                {
                    await up.CancelarPasaje(pasaje.id);
                }
                catch (Exception)
                {
                }
                cpm.accion = ConfirmarPagoResult.Error;
                return(View(cpm));
            }
        }