/// <summary> /// Calls the Xero API. /// </summary> /// <param name="consumerRequest">The consumer request.</param> /// <param name="accessTokenRepository">The access token repository.</param> /// <returns></returns> private Response CallXeroApiInternal(IConsumerRequest consumerRequest, ITokenRepository <AccessToken> accessTokenRepository) { AccessToken accessToken = accessTokenRepository.GetToken(""); if (accessToken == null) { return(new Response { Status = "NotConnected" }); } if (accessToken.HasExpired()) { accessToken = RenewAccessToken(accessTokenRepository); } if (accessToken.HasExpired()) { return(new Response { Status = "AccessTokenExpired" }); } // At this point, we should have a valid a consumerRequest.SignWithToken(accessToken); HttpWebResponse webResponse; try { webResponse = consumerRequest.ToWebResponse(); } catch (WebException ex) { if (ex.Response is HttpWebResponse) { HttpWebResponse httpWebResponse = (HttpWebResponse)ex.Response; if (httpWebResponse.StatusCode == HttpStatusCode.NotFound) { return(new Response { Status = "NotFound" }); } } return(new Response { Status = "Web Exception: " + ex.Message }); } catch (OAuthException ex) { return(new Response { Status = "OAuth Exception: " + ex.Report }); } catch (Exception ex) { return(new Response { Status = "Exception: " + ex.Message }); } return(ModelSerializer.DeSerializer <Response>(webResponse.GetResponseStream().ReadToEnd())); }