private async Task <IPushPayResponse <S> > ConvertResponseAsync <S>(HttpResponseMessage response) where S : new() { var pushPayResponse = new PushPayResponse <S> { StatusCode = response.StatusCode, JsonResponse = await response.Content.ReadAsStringAsync() }; if (!string.IsNullOrEmpty(pushPayResponse.JsonResponse) && (int)response.StatusCode > 300) { var responseError = Newtonsoft.Json.JsonConvert.DeserializeObject <dynamic>(pushPayResponse.JsonResponse); pushPayResponse.ErrorMessage = responseError.error_message; } else { pushPayResponse.Data = Newtonsoft.Json.JsonConvert.DeserializeObject <S>(pushPayResponse.JsonResponse); } return(pushPayResponse); }
public static async Task <IPushPayResponse <OAuthToken> > RefreshAccessTokenAsync(PushPayOptions options, string refreshToken) { System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls12 | System.Net.SecurityProtocolType.Tls11; using (var httpClient = new HttpClient()) { try { var toEncodeAsBytes = System.Text.ASCIIEncoding.ASCII.GetBytes($"{options.ClientID}:{options.ClientSecret}"); var content = new FormUrlEncodedContent(new[] { new KeyValuePair <string, string>("grant_type", "refresh_token"), new KeyValuePair <string, string>("refresh_token", refreshToken), }); var url = new Uri(options.IsStaging ? "https://auth.pushpay.com/pushpay-sandbox" : "https://auth.pushpay.com/pushpay"); httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", System.Convert.ToBase64String(toEncodeAsBytes, 0, toEncodeAsBytes.Length)); var response = await httpClient.PostAsync($"{url}/oauth/token", content); var responseContent = await response.Content.ReadAsStringAsync(); var pushPayResponse = new PushPayResponse <OAuthToken> { StatusCode = response.StatusCode, RequestValue = Newtonsoft.Json.JsonConvert.SerializeObject(content) }; if (!string.IsNullOrEmpty(responseContent) && responseContent.Contains("error")) { var responseError = Newtonsoft.Json.JsonConvert.DeserializeObject <dynamic>(responseContent); pushPayResponse.ErrorMessage = responseError.error_message; } else { pushPayResponse.Data = Newtonsoft.Json.JsonConvert.DeserializeObject <OAuthToken>(responseContent); } return(pushPayResponse); } catch (Exception e) { return(null); } } }