public async Task <string> GetAccessToken(string refreshToken) { string token = string.Empty; Models.OAuthResponse.RootObject oAuthResponse = null; if (!string.IsNullOrEmpty(refreshToken)) { //Console.WriteLine($"Refreshing Token {refreshToken}"); // Try refreshing the old token oAuthResponse = await OAuthToken(refreshToken); //Console.WriteLine($"OAuthToken ---> {oAuthResponse.data.access_token} {oAuthResponse.data.expires_in} {oAuthResponse.data.refresh_token} {oAuthResponse.data.token_type}"); } if (oAuthResponse == null || oAuthResponse.data == null || string.IsNullOrEmpty(oAuthResponse.data.access_token)) { //Console.WriteLine("Getting Token"); // Get a new token oAuthResponse = await OAuthLogin(); //Console.WriteLine($"OAuthLogin ---> {oAuthResponse.data.access_token} {oAuthResponse.data.expires_in} {oAuthResponse.data.refresh_token} {oAuthResponse.data.token_type}"); } if (oAuthResponse != null && oAuthResponse.data != null && !string.IsNullOrEmpty(oAuthResponse.data.access_token)) { token = $"{oAuthResponse.data.token_type} {oAuthResponse.data.access_token}"; //Console.WriteLine($"GetAccessToken Success. {oAuthResponse.data.token_type} {oAuthResponse.data.expires_in}"); FlowFinanceToken flowFinanceToken = new FlowFinanceToken { AccessToken = token, ExpiresAt = DateTime.Now.AddSeconds(oAuthResponse.data.expires_in), RefreshToken = oAuthResponse.data.refresh_token }; await _paymentRequestRepository.SaveToken(flowFinanceToken); } else { Console.WriteLine("GetAccessToken Failure."); //throw new Exception("GetAccessToken Failure."); } return(token); }
/// <summary> /// Refresh an expired access-token with a refresh-token. /// Optionally, you may include the header param account-id in which case account-specific tokens will be generated. /// Note that refresh-token are NOT re-generated. /// POST /api/v1/oauth/token /// </summary> /// <returns></returns> public async Task <Models.OAuthResponse.RootObject> OAuthToken(string refreshToken) { //Console.WriteLine("--] OAuthToken [--"); Models.OAuthResponse.RootObject oAuthResponse = null; Models.OAuthRequest.RootObject oAuthRequest = new Models.OAuthRequest.RootObject { refresh_token = refreshToken }; string jsonSerializedOAuthRequest = JsonConvert.SerializeObject(oAuthRequest); try { var request = new HttpRequestMessage { Method = HttpMethod.Post, RequestUri = new Uri($"{flowFinaceApiUrl}{FlowFinanceConstants.OAuthToken}"), Content = new StringContent(jsonSerializedOAuthRequest, Encoding.UTF8, FlowFinanceConstants.APPLICATION_JSON) }; // Vtex headers request.Headers.Add(FlowFinanceConstants.USE_HTTPS_HEADER_NAME, "true"); //request.Headers.Add(PROXY_TO_HEADER_NAME, flowFinaceApiUrlSecure); request.Headers.Add(FlowFinanceConstants.PROXY_AUTHORIZATION_HEADER_NAME, _httpContextAccessor.HttpContext.Request.Headers[FlowFinanceConstants.HEADER_VTEX_CREDENTIAL].ToString()); HttpClient client = _clientFactory.CreateClient(); HttpResponseMessage responseMessage = await client.SendAsync(request); string responseContent = await responseMessage.Content.ReadAsStringAsync(); //Console.WriteLine($"OAuthLogin Response Content {responseContent}"); oAuthResponse = JsonConvert.DeserializeObject <Models.OAuthResponse.RootObject>(responseContent); } catch (Exception ex) { Console.WriteLine($"OAuthLogin Error: {ex.Message} InnerException: {ex.InnerException} StackTrace: {ex.StackTrace}"); } return(oAuthResponse); }
/// <summary> /// Generate token pair given username and password in the 'Authorization' header /// POST /api/v1/oauth/login /// </summary> /// <returns></returns> public async Task <Models.OAuthResponse.RootObject> OAuthLogin() { //Console.WriteLine("--] OAuthLogin [--"); Models.OAuthResponse.RootObject oAuthResponse = null; try { var request = new HttpRequestMessage { Method = HttpMethod.Post, RequestUri = new Uri($"{flowFinaceApiUrl}{FlowFinanceConstants.OAuthLogin}"), }; // Flow Headers request.Headers.Add(FlowFinanceConstants.AUTHORIZATION_HEADER_NAME, "Basic " + Convert.ToBase64String(Encoding.ASCII.GetBytes($"{client_id}:{client_secret}"))); // Vtex headers request.Headers.Add(FlowFinanceConstants.USE_HTTPS_HEADER_NAME, "true"); //request.Headers.Add(PROXY_TO_HEADER_NAME, flowFinaceApiUrlSecure); request.Headers.Add(FlowFinanceConstants.PROXY_AUTHORIZATION_HEADER_NAME, _httpContextAccessor.HttpContext.Request.Headers[FlowFinanceConstants.HEADER_VTEX_CREDENTIAL].ToString()); HttpClient client = _clientFactory.CreateClient(); HttpResponseMessage responseMessage = await client.SendAsync(request); string responseContent = await responseMessage.Content.ReadAsStringAsync(); //Console.WriteLine($"OAuthLogin Response Content {responseContent}"); oAuthResponse = JsonConvert.DeserializeObject <Models.OAuthResponse.RootObject>(responseContent); } catch (Exception ex) { Console.WriteLine($"OAuthLogin Error: {ex.Message} InnerException: {ex.InnerException} StackTrace: {ex.StackTrace}"); } return(oAuthResponse); }