public async Task <CobrancaResult> Process(string input) { try{ var infoPagamento = JsonConvert.DeserializeObject <PagamentoValeCompraInput>(input); var valeCompra = await voucherService.ConsultarValeCompra(infoPagamento.CodigoValeCompras); //await context.Vouchers.FirstOrDefaultAsync(v=>v.Identifier == infoPagamento.CodigoValeCompras && v.ClientId == infoPagamento.CodigoCliente); if (string.IsNullOrEmpty(valeCompra.ErrMessage)) { return(new CobrancaResult { Aprovado = false, Erro = valeCompra.ErrMessage }); } else if (valeCompra.ClienteId != infoPagamento.CodigoCliente) { return(new CobrancaResult { Aprovado = false, Erro = "Vale-compra não localizado" }); } else { await voucherService.RegisterVoucherUse(infoPagamento.CodigoValeCompras); var paymentType = await context.PaymentTypes.FirstOrDefaultAsync(pt => pt.TypeIdentifier.Equals(ProviderName)); var newPayment = new Payment { OrderId = infoPagamento.CodigoPedido, Date = DateTime.Now, TypeId = paymentType.Id, Amount = infoPagamento.ValorCompra, ExtraInfo = infoPagamento.CodigoValeCompras }; await context.AddAsync(newPayment); await context.SaveChangesAsync(); return(new CobrancaResult { Aprovado = true, Data = DateTime.Now, Valor = infoPagamento.ValorCompra }); } }catch (Exception error) { log.LogError("Ocorreu um erro ao tentar efetuar o pagamento de um pedido com um vale-compra"); log.LogError(error.Message); if (error.InnerException != null) { log.LogError(error.InnerException.Message); } log.LogError(input); throw error; } }