/// <summary>
        /// Post process payment (used by payment gateways that require redirecting to a third-party URL)
        /// </summary>
        /// <param name="postProcessPaymentRequest">Payment info required for an order processing</param>
        public void PostProcessPayment(PostProcessPaymentRequest postProcessPaymentRequest)
        {
            //create common query parameters for the request
            var                queryParameters     = CreateQueryParameters(postProcessPaymentRequest);
            string             jsonString          = JsonConvert.SerializeObject(queryParameters);
            var                url                 = GetPointCheckoutBaseUrl() + "/api/v1.0/checkout";
            HttpClient         pointCheckoutClient = getPointcheckoutHttpClient(url);
            HttpRequestMessage request             = new HttpRequestMessage(HttpMethod.Post, url)
            {
                Content = new StringContent(jsonString, Encoding.UTF8, "application/json")
            };

            try
            {
                pointCheckoutClient.CancelPendingRequests();
                HttpResponseMessage response         = pointCheckoutClient.SendAsync(request).Result;
                string responseString                = response.Content.ReadAsStringAsync().Result;
                PointCheckoutResponse responseObject = JsonConvert.DeserializeObject <PointCheckoutResponse>(responseString);
                if (responseObject.success)
                {
                    string redirectUrl = GetPointCheckoutBaseUrl() + "/checkout/" + responseObject.result.checkoutKey;
                    var    order       = _orderService.GetOrderById(int.Parse(responseObject.result.referenceId));
                    //add a note
                    order.OrderNotes.Add(new OrderNote()
                    {
                        Note = getOrderHistoryCommentMessage(responseObject.result.checkoutId, responseObject.result.status, responseObject.result.currency, 0),
                        DisplayToCustomer = false,
                        CreatedOnUtc      = DateTime.UtcNow
                    });
                    _orderService.UpdateOrder(order);
                    _httpContextAccessor.HttpContext.Response.Redirect(redirectUrl);
                    return;
                }
                else
                {
                    throw new NopException("ERROR: " + responseObject.error);
                }
            }catch (Exception ex)
            {
                ex.GetBaseException();
                _httpContextAccessor.HttpContext.Response.Redirect(_webHelper.GetStoreLocation());
            }
        }
        /// <summary>
        /// checkPayment (check if payment is success and paid )
        /// </summary>
        /// <param name="checkout">checkout id provided by pointcheckout redirect call </param>
        public PointCheckoutResponse CheckPayment(string checkout)
        {
            //create common query parameters for the request
            var                url = GetPointCheckoutBaseUrl() + "/api/v1.0/checkout/" + checkout;
            HttpClient         pointCheckoutClient = getPointcheckoutHttpClient(url);
            HttpRequestMessage request             = new HttpRequestMessage(HttpMethod.Get, url);

            try
            {
                pointCheckoutClient.CancelPendingRequests();
                HttpResponseMessage response = pointCheckoutClient.SendAsync(request).Result;
                response.EnsureSuccessStatusCode();
                string responseString = response.Content.ReadAsStringAsync().Result;
                PointCheckoutResponse responseObject = JsonConvert.DeserializeObject <PointCheckoutResponse>(responseString);
                return(responseObject);
            }
            catch (Exception ex)
            {
                ex.GetBaseException();
                return(null);
            }
        }