public GatewayCheckoutResponse InitiateGatewayChechout(CheckoutRequest request, GatewayToken token)
        {
            GatewayCheckoutResponse gatewayResponse = null;

            try
            {
                var gatewayCheckoutRequest = _translatorService.GetGatewayCheckoutRequest(request);

                var url    = _httpContextService.Request.Url;
                var server = $"{url.Scheme}://{url.Authority}/";

                int requestid = _repository.SaveCheckoutRequest(request);

                if (requestid > 0)
                {
                    var randomKey = Guid.NewGuid().ToString("N");

                    var key = Md5Helper.GetMd5Hash(requestid + randomKey + randomKey + requestid);

                    var checkoutCompleteUrl = $"{server}{"checkoutresponse"}?id={requestid}&rk={randomKey}&k={key}";

                    gatewayCheckoutRequest.checkout_complete_url = checkoutCompleteUrl;

                    gatewayCheckoutRequest.order_reference_id = requestid.ToString() + "_" + request.orderid.ToString();

                    var baseUrl = ConfigurationManager.AppSettings["BaseURLWebAPIService"];

                    var response = _webApiClient.HTTPPostRequest(baseUrl, "checkouts", gatewayCheckoutRequest, token.token);

                    if (response == null)
                    {
                        _repository.UpdateCheckoutRequestStatus(request.id, Status.Failed);
                    }
                    else
                    {
                        if (response.StatusCode == HttpStatusCode.Created)
                        {
                            using (var streamReader = new StreamReader(response.GetResponseStream()))
                            {
                                var responseText = streamReader.ReadToEnd();
                                gatewayResponse = JsonConvert.DeserializeObject <GatewayCheckoutResponse>(responseText);
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                _repository.UpdateCheckoutRequestStatus(request.id, Status.Failed);
                throw ex;
            }

            return(gatewayResponse);
        }