Пример #1
0
        /// <summary>
        /// Exchange the authorization code for an access token
        /// </summary>
        /// <param name="accessTokenRequest">Request parameters to obtain access token</param>
        /// <returns>Access token</returns>
        public string ObtainAccessToken(ObtainAccessTokenRequest accessTokenRequest)
        {
            //create post data
            var postData = Encoding.Default.GetBytes(JsonConvert.SerializeObject(accessTokenRequest));

            //create web request
            var serviceUrl = $"{GetOAuthServiceUrl()}/token";
            var request    = (HttpWebRequest)WebRequest.Create(serviceUrl);

            request.Method        = WebRequestMethods.Http.Post;
            request.Accept        = "application/json";
            request.ContentType   = "application/json";
            request.ContentLength = postData.Length;
            request.UserAgent     = SquarePaymentDefaults.UserAgent;

            //post request
            using (var stream = request.GetRequestStream())
            {
                stream.Write(postData, 0, postData.Length);
            }

            //get response
            var httpResponse = (HttpWebResponse)request.GetResponse();

            using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
            {
                //return received access token
                var response = JsonConvert.DeserializeObject <ObtainAccessTokenResponse>(streamReader.ReadToEnd());
                return(response?.AccessToken);
            }
        }
Пример #2
0
        /// <summary>
        /// Exchange the authorization code for an access token
        /// </summary>
        /// <param name="authorizationCode">Authorization code</param>
        /// <returns>The asynchronous task whose result contains access and refresh tokens</returns>
        public async Task <(string AccessToken, string RefreshToken)> ObtainAccessTokenAsync(string authorizationCode)
        {
            try
            {
                //get response
                var request = new ObtainAccessTokenRequest
                {
                    ApplicationId     = _squarePaymentSettings.ApplicationId,
                    ApplicationSecret = _squarePaymentSettings.ApplicationSecret,
                    GrantType         = GrantType.New,
                    AuthorizationCode = authorizationCode
                };
                var requestContent = new StringContent(JsonConvert.SerializeObject(request), Encoding.UTF8, MimeTypes.ApplicationJson);
                var response       = await _httpClient.PostAsync("token", requestContent);

                //return received access token
                var responseContent = await response.Content.ReadAsStringAsync();

                var accessTokenResponse = JsonConvert.DeserializeObject <ObtainAccessTokenResponse>(responseContent);
                return(accessTokenResponse?.AccessToken, accessTokenResponse?.RefreshToken);
            }
            catch (AggregateException exception)
            {
                //rethrow actual exception
                throw exception.InnerException;
            }
        }
        /// <summary>
        /// Renew the expired access token
        /// </summary>
        /// <param name="storeId">Store identifier for which access token should be updated</param>
        /// <returns>The asynchronous task whose result contains access and refresh tokens</returns>
        public async Task <(string AccessToken, string RefreshToken)> RenewAccessTokenAsync(int storeId)
        {
            try
            {
                var settings = _settingService.LoadSetting <SquarePaymentSettings>(storeId);

                //get response
                var request = new ObtainAccessTokenRequest
                {
                    ApplicationId     = settings.ApplicationId,
                    ApplicationSecret = settings.ApplicationSecret,
                    GrantType         = GrantType.Refresh,
                    RefreshToken      = settings.RefreshToken
                };
                var httpRequest = new HttpRequestMessage(HttpMethod.Post, "token");
                httpRequest.Headers.Add(HeaderNames.Authorization, $"Client {settings.ApplicationSecret}");
                httpRequest.Content = new StringContent(JsonConvert.SerializeObject(request), Encoding.UTF8, MimeTypes.ApplicationJson);

                var response = await _httpClient.SendAsync(httpRequest);

                //return received access token
                var responseContent = await response.Content.ReadAsStringAsync();

                var accessTokenResponse = JsonConvert.DeserializeObject <ObtainAccessTokenResponse>(responseContent);
                return(accessTokenResponse?.AccessToken, accessTokenResponse?.RefreshToken);
            }
            catch (AggregateException exception)
            {
                //rethrow actual exception
                throw exception.InnerException;
            }
        }