public string AgregarTarjetaAsync(int id, string tokenTarjeta, string sessionId) { using (var _dbContext = new MercampoEntities()) { Startup.OpenDatabaseConnection(_dbContext); if (_dbContext.Database.Connection.State != ConnectionState.Open) { return(new ResultadoAgregarTarjeta(false, "Error en el servidor, vuelva a intentarlo de nuevo en unos minutos").AsJson()); } var usuario = _dbContext.Usuarios.Where(u => u.id == id).FirstOrDefault(); if (usuario == null) { _dbContext.Database.Connection.Close(); return(new ResultadoAgregarTarjeta(false, "Error, el id del usuario al que se le quiere agregar la tarjeta, no existe").AsJson()); } Card request = new Card(); request.TokenId = tokenTarjeta; request.DeviceSessionId = sessionId; try { request = Startup.OpenPayLib.CardService.Create(usuario.idConekta, request); } catch (OpenpayException e) { _dbContext.Database.Connection.Close(); return(new ResultadoAgregarTarjeta(false, TarjetaResultadoHelpers.ObtenerMensajeError((OpenPayErrorCodes)e.ErrorCode)).AsJson()); } string last4 = request.CardNumber.Substring(request.CardNumber.Length - 4, 4); _dbContext.Usuario_Tarjeta.Add(new Usuario_Tarjeta { tipoTarjeta = TarjetaResultadoHelpers.GetTipoTarjeta(request.Brand), digitosTarjeta = last4, tokenTarjeta = request.Id, idUsuario = id, activo = true }); _dbContext.SaveChanges(); return(new ResultadoAgregarTarjeta(true, "La tarjeta se agregó correctamente.").AsJson()); } }
public bool RealizarCargoTarjeta(int id, string tarjetaToken, string sessionId, CarritoDeCompra carrito, out string resultadoJson) { if (carrito == null || carrito.TotalCarrito <= 0.0) { resultadoJson = new ResultadoCargo(false, ResultadoCargoTarjeta.ErrorInterno, mensaje: "El carrito de compras esta vacio").AsJson(); return(false); } HttpRequest request = HttpContext.Current.Request; var usuario = getUsuarioPortalActual(request); if (usuario.Id != id) { resultadoJson = new ResultadoCargo(false, ResultadoCargoTarjeta.ErrorInterno, mensaje: "Error favor de hacer login").AsJson(); return(false); } using (var _dbContext = new MercampoEntities()) { Startup.OpenDatabaseConnection(_dbContext); if (_dbContext.Database.Connection.State != ConnectionState.Open) { resultadoJson = new ResultadoCargo(false, ResultadoCargoTarjeta.ErrorInterno, mensaje: "Error en el servidor, vuelva a intentarlo de nuevo en unos minutos").AsJson(); return(false); } try { Customer cliente = Startup.OpenPayLib.CustomerService.Get(usuario.IdConekta); if (cliente == null) { resultadoJson = new ResultadoCargo(false, ResultadoCargoTarjeta.ErrorInterno, mensaje: "Error en el servidor, vuelva a intentarlo de nuevo en unos minutos").AsJson(); return(false); } ChargeRequest chargeRequest = new ChargeRequest(); chargeRequest.Method = "card"; chargeRequest.SourceId = tarjetaToken; chargeRequest.Amount = new decimal(carrito.TotalCarrito); chargeRequest.Currency = "MXN"; chargeRequest.Description = "Servicio de anuncios Mercampo.mx"; chargeRequest.OrderId = getToken(); chargeRequest.DeviceSessionId = sessionId; chargeRequest.SendEmail = true; Charge cargo = Startup.OpenPayLib.ChargeService.Create(usuario.IdConekta, chargeRequest); ResultadoCargo resultado = new ResultadoCargo(true, ResultadoCargoTarjeta.Aprobado, cargo.OrderId, cargo.Authorization, "El cargo ha sido exitoso", (double)cargo.Amount); AgregarAnuncios(carrito, usuario.Id); resultadoJson = resultado.AsJson(); return(true); } catch (OpenpayException e) { ResultadoCargoTarjeta res = ResultadoCargoTarjeta.ErrorInterno; if ((int)ResultadoCargoTarjeta.Rechazado == e.ErrorCode) { res = ResultadoCargoTarjeta.Rechazado; } resultadoJson = new ResultadoCargo(false, res, mensaje: TarjetaResultadoHelpers.ObtenerMensajeError((OpenPayErrorCodes)e.ErrorCode)).AsJson(); return(false); } } }