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; } }
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)); } }