/// <summary> /// Trata respostas Rest do Api /// </summary> /// <param name="result">Retorno tratado (faced)</param> /// <param name="response">Retorno da Api</param> private static void TrataResposta(BoletoCloudResponse result, IRestResponse response) { if (response.StatusCode == HttpStatusCode.Created || response.StatusCode == HttpStatusCode.OK) { // Sucesso na geração (HttpStatusCode.Created) ou consulta (HttpStatusCode.OK) if (response.Headers.Any(t => t.Name == "X-BoletoCloud-Version")) { result.VersaoApiBoletoCloud = response.Headers.FirstOrDefault(t => t.Name == "X-BoletoCloud-Version").Value.ToString(); } if (response.Headers.Any(t => t.Name == "X-BoletoCloud-Token")) { result.Token = response.Headers.FirstOrDefault(t => t.Name == "X-BoletoCloud-Token").Value.ToString(); } if (response.Headers.Any(t => t.Name == "X-BoletoCloud-NIB-Nosso-Numero")) { result.NossoNumero = response.Headers.FirstOrDefault(t => t.Name == "X-BoletoCloud-NIB-Nosso-Numero").Value.ToString(); } if (response.Headers.Any(t => t.Name == "Content-Type")) { result.ContentType = response.Headers.FirstOrDefault(t => t.Name == "Content-Type").Value.ToString(); } if (response.Headers.Any(t => t.Name == "Location")) { result.Location = response.Headers.FirstOrDefault(t => t.Name == "Location").Value.ToString(); } result.Sucesso = true; result.Mensagem = response.StatusCode == HttpStatusCode.Created ? $"Boleto n. {result.NossoNumero} gerado com sucesso" : "Consulta realizada com sucesso"; result.Boleto = response.RawBytes; } else { // Falha ResponseError error = Newtonsoft.Json.JsonConvert.DeserializeObject <ResponseError>(response.Content); result.Sucesso = false; result.Erro.TipoErro = error.erro.tipo; result.Erro.Codigo = error.erro.status; for (int i = 0; i < error.erro.causas.Count; i++) { result.Erro.Mensagens.Add($"{error.erro.causas[i].codigo} - {error.erro.causas[i].mensagem}"); } } }
/// <summary> /// Consome Api do Boleto Cloud para geração de boleto /// </summary> /// <returns></returns> public BoletoCloudResponse GeraBoleto() { if (BoletoInfo == null) { throw new ArgumentNullException("BoletoInfo"); } if (string.IsNullOrEmpty(this.Config.Url)) { throw new ArgumentNullException("Url da Api não configurada"); } if (string.IsNullOrEmpty(this.Config.Token)) { throw new ArgumentNullException("Token da Api não configurado"); } if (BoletoInfo.Instrucoes.Count > 8) { throw new IndexOutOfRangeException("Permitido somente 8 linhas de Instruções"); } var result = new BoletoCloudResponse(); var client = new RestClient(this.Config.Url); var request = new RestRequest(Method.POST); request.AddHeader("Postman-Token", "74f4691e-79f3-4934-8167-c464d9a26e53"); request.AddHeader("cache-control", "no-cache"); request.AddHeader("Content-Type", "application/x-www-form-urlencoded"); request.AddHeader("Authorization", $"Basic {this.Config.AuthorizationHash}"); request.AddParameter("undefined", FillParameters(), ParameterType.RequestBody); IRestResponse response = client.Execute(request); if (response.ResponseStatus == ResponseStatus.Error && response.ErrorException != null) { throw response.ErrorException; } TrataResposta(result, response); return(result); }
/// <summary> /// Consome Api do Boleto Cloud para consulta de boletos gerados /// </summary> /// <param name="token">Token retornado na geração do boleto</param> /// <returns></returns> public BoletoCloudResponse ConsultaBoleto(string token) { if (string.IsNullOrEmpty(token)) { throw new ArgumentNullException("Token para consulta não informado"); } if (string.IsNullOrEmpty(this.Config.Url)) { throw new ArgumentNullException("Url da Api não configurada"); } if (string.IsNullOrEmpty(this.Config.Token)) { throw new ArgumentNullException("Token da Api não configurado"); } var result = new BoletoCloudResponse(); var client = new RestClient($"{this.Config.Url}/{token}"); var request = new RestRequest(Method.GET); request.AddHeader("Postman-Token", "41a04afb-9aeb-4755-8ffd-c97380c04dfd"); request.AddHeader("cache-control", "no-cache"); request.AddHeader("Authorization", $"Basic {this.Config.AuthorizationHash}"); IRestResponse response = client.Execute(request); if (response.ResponseStatus == ResponseStatus.Error && response.ErrorException != null) { throw response.ErrorException; } TrataResposta(result, response); return(result); }