/// <summary> /// Consulta opções de parcelamento para o valor e meio de pagamentos informados (usando CACHE) /// </summary> /// <param name="amount">Valor.</param> /// <param name="payment_method">Meio de Pagamento.</param> /// <param name="dataExpiracaoEmCache">Data para o recurso expirar do CACHE.</param> public Akatus.ConsultaParcelamento.Retorno consultaParcelamento(decimal amount, Akatus.Enums.MeioDePagamento payment_method, DateTime dataExpiracaoEmCache, out bool retornouDoCache) { //Chave para armazenar no cache string chaveCache = string.Format("AkatusConsultaParcelamento-{0}-{1:0.00}", payment_method, amount); //Tenta pegar as imagens do Cache Akatus.ConsultaParcelamento.Retorno opcoesParcelamento = System.Web.HttpContext.Current.Cache[chaveCache] as Akatus.ConsultaParcelamento.Retorno; if (opcoesParcelamento != null) { /* Se os dados estão no CACHE */ //Seta que os dados foram retornados do CACHE retornouDoCache = true; } else { /* Se os dados não estão no CACHE */ //Pega dados do Banco opcoesParcelamento = consultaParcelamento(amount, payment_method); //Se retornou dados if (opcoesParcelamento != null) { //Insere dados no Cache System.Web.HttpContext.Current.Cache.Insert(chaveCache, opcoesParcelamento, null, dataExpiracaoEmCache, Cache.NoSlidingExpiration); } //Seta que os dados não foram retornados do CACHE retornouDoCache = false; } return opcoesParcelamento; }
/// <summary> /// Consulta opções de parcelamento para o valor e meio de pagamentos informados /// </summary> /// <param name="amount">Valor.</param> /// <param name="payment_method">Meio de Pagamento.</param> public Akatus.ConsultaParcelamento.Retorno consultaParcelamento(decimal amount, Akatus.Enums.MeioDePagamento payment_method) { //Armazena dados de retorno Akatus.ConsultaParcelamento.Retorno retorno; #region Obtém XML //URL de Destino (https://www.akatus.com/api/v1/parcelamento/simulacao.xml?email=XXXXXXXXXXXXXXXXXX&amount=XXXXXX&payment_method=XXXXXXX&api_key=XXXXXXXXXXXXXXXXX) string urlDestino = string.Format("{0}?email={1}&amount={2}&payment_method={3}&api_key={4}", Akatus.Config.Ambiente == Akatus.Enums.Ambiente.producao ? urlProducao : urlTestes, Akatus.Config.Email, Akatus.Util.formatCurrency(amount), payment_method.ToString(), Akatus.Config.ApiKey); //Pega Dados string resultado = Akatus.Rest.get(urlDestino); //Verifica se o XML é válido bool isValidXml = Akatus.Util.IsValidXML(resultado); if (isValidXml == true) { //Cria XML System.Xml.XmlDocument xmlDoc = new System.Xml.XmlDocument(); //Carrega XML xmlDoc.LoadXml(resultado); //Preenche dados de retorno retorno = new Akatus.ConsultaParcelamento.Retorno(); //Pega dados System.Xml.XmlNodeList xmlResults = xmlDoc.GetElementsByTagName("resposta"); if (xmlResults.Count > 0) { System.Xml.XmlNode xmlResult = xmlResults[0]; #region Seta propriedades retorno.Descricao = xmlResult["descricao"].InnerText; retorno.ParcelasAssumidas = Akatus.Util.parseInt(xmlResult["parcelas_assumidas"].InnerText); #endregion } else { //Erro throw new System.ArgumentException("O XML não retornou nós filhos", resultado); } //Pega dados System.Xml.XmlNodeList xmlParcelamento = xmlDoc.GetElementsByTagName("parcela"); if (xmlParcelamento.Count > 0) { foreach (System.Xml.XmlNode xmlResult in xmlParcelamento) { #region Seta propriedades //Preenche dados RetornoParcela retornoParcela = new RetornoParcela(); retornoParcela.Quantidade = Akatus.Util.parseInt(xmlResult["quantidade"].InnerText); retornoParcela.Valor = Akatus.Util.parseDecimal(xmlResult["valor"].InnerText); retornoParcela.Total = Akatus.Util.parseDecimal(xmlResult["total"].InnerText); //Adiciona opção de parcelamento retorno.Parcelas.Add(retornoParcela); #endregion } } else { //Erro throw new System.ArgumentException("O XML de parcelas não retornou nós filhos", resultado); } } else { //Erro throw new System.ArgumentException("Formato de XML inválido", resultado); } #endregion //Retorna resposta return retorno; }