// This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { services.Configure <AuthorizationOptions>(options => { options.AddPolicy("SendOrder", policy => policy.RequireClaim("Action", "SendOrder")); }); services.AddTransient <IUserDao, UserDao>(); services.AddTransient <IUser, User>(); services.AddTransient <IOrderDao, OrderDao>(); var signingConfigurations = new SigningConfigurations(); services.AddSingleton(signingConfigurations); var tokenConfigurations = new TokenConfigurations(); new ConfigureFromConfigurationOptions <TokenConfigurations>( Configuration.GetSection("TokenConfigurations")) .Configure(tokenConfigurations); services.AddSingleton(tokenConfigurations); var antiFraudConfigurations = new AntiFraudConfigurations(); new ConfigureFromConfigurationOptions <AntiFraudConfigurations>( Configuration.GetSection("AntiFraudConfigurations")) .Configure(antiFraudConfigurations); services.AddSingleton(antiFraudConfigurations); var gatewayCieloConfigurations = new GatewayCieloConfigurations(); new ConfigureFromConfigurationOptions <GatewayCieloConfigurations>( Configuration.GetSection("GatewayCieloConfigurations")) .Configure(gatewayCieloConfigurations); services.AddSingleton(gatewayCieloConfigurations); services.AddAuthentication(authOptions => { authOptions.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme; authOptions.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme; }).AddJwtBearer(bearerOptions => { var paramsValidation = bearerOptions.TokenValidationParameters; paramsValidation.IssuerSigningKey = signingConfigurations.Key; paramsValidation.ValidAudience = tokenConfigurations.Audience; paramsValidation.ValidIssuer = tokenConfigurations.Issuer; // Valida a assinatura de um token recebido paramsValidation.ValidateIssuerSigningKey = true; // Verifica se um token recebido ainda é válido paramsValidation.ValidateLifetime = true; // Tempo de tolerância para a expiração de um token (utilizado // caso haja problemas de sincronismo de horário entre diferentes // computadores envolvidos no processo de comunicação) paramsValidation.ClockSkew = TimeSpan.Zero; }); // Ativa o uso do token como forma de autorizar o acesso // a recursos deste projeto services.AddAuthorization(auth => { auth.AddPolicy("Bearer", new AuthorizationPolicyBuilder() .AddAuthenticationSchemes(JwtBearerDefaults.AuthenticationScheme) .RequireAuthenticatedUser().Build()); }); services.AddMvc(); services.AddDistributedMemoryCache(); services.AddSession(); }
public async Task <IActionResult> Send([FromBody] Order order, [FromServices] AntiFraudConfigurations antiFraudConfigurations, [FromServices] GatewayCieloConfigurations gatewayCieloConfigurations) { var user = JsonConvert.DeserializeObject <User>(HttpContext.Session.GetString("User").ToString()); var urlAntiFraudApiLogin = antiFraudConfigurations.Url + (antiFraudConfigurations.Port != string.Empty ? ":" + antiFraudConfigurations.Port : "") + antiFraudConfigurations.LoginApi; var urlAntiFraudApiOrder = antiFraudConfigurations.Url + (antiFraudConfigurations.Port != string.Empty ? ":" + antiFraudConfigurations.Port : "") + antiFraudConfigurations.OrderApi; eAntiFraudSatus statusAntiFraud = eAntiFraudSatus.NotRequired; if (user.HasAntiFraud) { var objJson = JsonConvert.SerializeObject(new { Login = new { ApiKey = user.AntiFraudApiKey, ClientID = user.AntiFraudClientID, ClientSecret = user.AntiFraudClientSecret } }); using (var client = new HttpClient()) { client.DefaultRequestHeaders.Accept.Clear(); client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); HttpResponseMessage response = await client.PostAsync(urlAntiFraudApiLogin, new StringContent(objJson, Encoding.UTF8, "application/json")); if (response.StatusCode == HttpStatusCode.OK) { response.EnsureSuccessStatusCode(); string responseBody = await response.Content.ReadAsStringAsync(); var obj = JsonConvert.DeserializeObject <AntiFraudAuthToken>(responseBody); var objJsonOrder = JsonConvert.SerializeObject(new { ApiKey = user.AntiFraudApiKey, LoginToken = obj.Token.value, Order = order }); HttpResponseMessage responseOrder = await client.PostAsync(urlAntiFraudApiOrder, new StringContent(objJsonOrder, Encoding.UTF8, "application/json")); if (responseOrder.StatusCode == HttpStatusCode.OK) { responseOrder.EnsureSuccessStatusCode(); string responseBodyOrder = await responseOrder.Content.ReadAsStringAsync(); var objCheckFraud = JsonConvert.DeserializeObject <ResponseSend>(responseBodyOrder); if (objCheckFraud.Orders.Status != "APA") { return(BadRequest(new { message = "Fluxo de pagamento deverá ser interrompido - Codigo:" + objCheckFraud.Orders.Status, status = "fail", StatusCode = HttpStatusCode.BadGateway })); } else { statusAntiFraud = eAntiFraudSatus.Valid; } } else { return(BadRequest(new { message = "Erro na requisição", status = "fail", StatusCode = HttpStatusCode.BadGateway })); } } else { return(BadRequest(new { message = "Registro não realizado.", status = "fail", StatusCode = HttpStatusCode.BadGateway })); } } } bool result = false; GatewayCielo objPay = null; if (statusAntiFraud == eAntiFraudSatus.NotRequired || statusAntiFraud == eAntiFraudSatus.Valid) { order.User = user; order.IdentificationCode = Guid.NewGuid().ToString(); result = _orderDao.Save(order); if (result) { var urlGateWayCielo = gatewayCieloConfigurations.Url + gatewayCieloConfigurations.SalesApi; for (int i = 0; i < order.Payment.Length; i++) { var objJSonCielo = JsonConvert.SerializeObject(new { MerchantOrderId = order.IdentificationCode, Customer = new { Name = order.BillingData.Name }, Payment = new { Type = "CreditCard", Amount = order.Payment[i].Amount, Installments = order.Payment[i].QtyInstallments, SoftDescriptor = user.Name, CreditCard = new { CardNumber = order.Payment[i].CardNumber, Holder = order.Payment[i].CardHolderName, ExpirationDate = order.Payment[i].CardExpirationDate, SecurityCode = order.Payment[i].SecurityCode, Brand = DefineCardBrandCielo(order.Payment[i].CardType) } } }); using (var clientCielo = new HttpClient()) { clientCielo.DefaultRequestHeaders.Accept.Clear(); clientCielo.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); clientCielo.DefaultRequestHeaders.Add("MerchantId", gatewayCieloConfigurations.MerchantId); clientCielo.DefaultRequestHeaders.Add("MerchantKey", gatewayCieloConfigurations.MerchantKey); clientCielo.DefaultRequestHeaders.Add("RequestId", ""); HttpResponseMessage response = await clientCielo.PostAsync(urlGateWayCielo, new StringContent(objJSonCielo, Encoding.UTF8, "application/json")); if (response.StatusCode == HttpStatusCode.Created) { response.EnsureSuccessStatusCode(); string responseBody = await response.Content.ReadAsStringAsync(); objPay = JsonConvert.DeserializeObject <GatewayCielo>(responseBody); } else { BadRequest(new { message = "Pagamento não registrado.", status = "fail", StatusCode = HttpStatusCode.NotAcceptable }); } } } } } else { BadRequest(new { message = "Registro não realizado - Falha Anti Fraude.", status = "fail", StatusCode = HttpStatusCode.NotAcceptable }); } if (result) { return(Ok(new { message = "Registrado com sucesso", status = "success", orderId = order.IdentificationCode, Payment = objPay })); } else { return(BadRequest(new { message = "Registro não realizado.", status = "fail", StatusCode = HttpStatusCode.NotAcceptable })); } }