public GatewayOrderDetails GetGatewayOrderDetails(string orderReferenceId, GatewayToken token)
        {
            GatewayOrderDetails gatewayResponse = null;

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

                var response = _webApiClient.HTTPGetRequest(baseUrl, "orders/" + orderReferenceId, "", token.token);

                if (response != null)
                {
                    if (response.StatusCode == HttpStatusCode.OK)
                    {
                        using (var streamReader = new StreamReader(response.GetResponseStream()))
                        {
                            var responseText = streamReader.ReadToEnd();
                            gatewayResponse = JsonConvert.DeserializeObject <GatewayOrderDetails>(responseText);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }

            return(gatewayResponse);
        }
        public bool SetWebhook(string baseUrl, GatewayToken authToken)
        {
            var success = false;

            var urlHelper = new UrlHelper();

            var url = _httpContextService.Request.Url;

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

            var webooksNotifyUrl = $"{server}{"webhook"}";

            var configurationRequest = new GatewayConfigRequest()
            {
                webhook_url = webooksNotifyUrl
            };

            var response = _webApiClient.HTTPPostRequest(baseUrl, "configuration", configurationRequest, authToken.token);

            if (response.StatusCode == HttpStatusCode.OK)
            {
                success = true;
            }

            return(success);
        }
Beispiel #3
0
        public bool CachingValidToken(string cacheKey, GatewayToken authToken)
        {
            var cacheExpirationTime = ConfigurationManager.AppSettings["CacheExpirationTime"];

            var result = int.TryParse(cacheExpirationTime, out var timeInMinutes);

            if (!result)
            {
                timeInMinutes = 60;
            }

            MemoryCacher.Add(cacheKey, authToken, DateTimeOffset.UtcNow.AddMinutes(timeInMinutes));

            return(true);
        }
Beispiel #4
0
        public GatewayToken GetGatewayToken(string user, string password)
        {
            GatewayToken authToken = null;

            var cacheKey = string.Concat("##", user, "##");

            authToken = _cacheTokenHandlerService.GetTokenFromCache(cacheKey);

            if (authToken == null)
            {
                var baseUrl = ConfigurationManager.AppSettings["BaseURLWebAPIService"];

                var gatewayAuthRequest = new GatewayAuthRequest()
                {
                    private_key = password, public_key = user
                };

                var response = _webApiClient.HTTPPostRequest(baseUrl, "authentication", gatewayAuthRequest, null);

                if (response != null)
                {
                    if (response.StatusCode == HttpStatusCode.Created)
                    {
                        using (var streamReader = new StreamReader(response.GetResponseStream()))
                        {
                            var responseText = streamReader.ReadToEnd();
                            authToken = JsonConvert.DeserializeObject <GatewayToken>(responseText);
                        }

                        //caching gateway auth token
                        _cacheTokenHandlerService.CachingValidToken(cacheKey, authToken);

                        //sending webhoook url to Gateway
                        _gatewayConfigurationService.SetWebhook(baseUrl, authToken);
                    }
                }
            }

            return(authToken);
        }
        public GatewayRefundResponse InitiateGatewayRefund(RefundRequest request, GatewayToken token)
        {
            GatewayRefundResponse gatewayResponse = null;

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

            var gatewayRefundRequest = _translatorService.GetGatewayRefundRequest(request);

            var response = _webApiClient.HTTPPostRequest(baseUrl, "orders/" + request.transactionid + "/refund", gatewayRefundRequest, token.token);

            if (response != null)
            {
                if (response.StatusCode == HttpStatusCode.OK)
                {
                    using (var streamReader = new StreamReader(response.GetResponseStream()))
                    {
                        var responseText = streamReader.ReadToEnd();
                        gatewayResponse = JsonConvert.DeserializeObject <GatewayRefundResponse>(responseText);
                    }
                }
            }

            return(gatewayResponse);
        }
        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);
        }
Beispiel #7
0
        public ActionResult CompleteCheckout(int id, string rk, string k)
        {
            if (k != Md5Helper.GetMd5Hash(id + rk + rk + id))
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest, "Key parameter is not valid."));
            }

            CheckoutRequest request = null;

            try {
                request = _completeOrderService.GetCurrentRequest(id);
            }
            catch {
                return(new HttpStatusCodeResult(HttpStatusCode.InternalServerError, "Error getting current request from database."));
            }
            if (request == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.InternalServerError, "Error getting current request from database."));
            }


            if (request.status == Status.Completed)
            {
                return(Redirect(request.returnurl));
            }

            _completeOrderService.UpdateRequest(id, Status.Running);


            var          errorMsg = "";
            GatewayToken token    = null;

            try
            {
                token = _gatewayAuthenticationService.GetGatewayToken(request.username, request.password);
            }
            catch (Exception ex)
            {
                errorMsg = "Complete order failed. Gateway Authentication Failed.";
                _completeOrderService.CompleteOrder(0, "101", errorMsg, request, null);
                return(Redirect(request.errorurl));
            }
            if (token == null)
            {
                errorMsg = "Complete order failed. Gateway Authentication Failed.";
                _completeOrderService.CompleteOrder(0, "101", errorMsg, request, null);
                return(Redirect(request.errorurl));
            }

            //get order details
            GatewayOrderDetails gatewayOrderDetailsResponse = null;

            try
            {
                var orderReferenceId = request.id.ToString() + "_" + request.orderid.ToString();
                gatewayOrderDetailsResponse = _gatewayChekoutService.GetGatewayOrderDetails(orderReferenceId, token);
            }
            catch (Exception ex)
            {
                errorMsg = "Complete order failed. Error getting order details from gateway.";
                _completeOrderService.CompleteOrder(0, "104", errorMsg, request, null);
                return(Redirect(request.errorurl));
            }
            if (gatewayOrderDetailsResponse == null)
            {
                errorMsg = "Complete order failed. Error getting order details from gateway.";
                _completeOrderService.CompleteOrder(0, "104", errorMsg, request, null);
                return(Redirect(request.errorurl));
            }


            if (!_completeOrderService.CompleteOrder(1, "", "", request, gatewayOrderDetailsResponse))
            {
                return(Redirect(request.errorurl));
            }

            return(Redirect(request.returnurl));
        }
Beispiel #8
0
        public JsonResult InitiateCheckout(CheckoutRequest request)
        {
            CheckoutResponse response = null;

            var randomKey    = Guid.NewGuid().ToString("N");
            var privateKey   = ConfigurationManager.AppSettings["AppTestSecretKey"];
            var paymenttoken = "";
            var checkouturl  = "";
            var errorMsg     = "";

            //validations
            if (!request.type.Equals("sale"))
            {
                errorMsg = "Bad Request. Invalid Transaction Type.";
                response = DoCheckoutResponse(randomKey, privateKey, paymenttoken, checkouturl, "100", errorMsg);
                return(Json(response));
            }
            if (request.signature != Md5Helper.GetMd5Hash(request.randomkey + privateKey + request.orderid + request.invoice + request.amounttotal))
            {
                errorMsg = "Bad Request. Invalid Signature.";
                response = DoCheckoutResponse(randomKey, privateKey, paymenttoken, checkouturl, "100", errorMsg);
                return(Json(response));
            }

            //authentication
            GatewayToken token = null;

            try
            {
                token = _gatewayAuthenticationService.GetGatewayToken(request.username, request.password);
            }
            catch (Exception ex)
            {
                errorMsg = "Gateway authentication transaction failed. " + ex.Message;
                response = DoCheckoutResponse(randomKey, privateKey, paymenttoken, checkouturl, "101", errorMsg);
                return(Json(response));
            }

            if (token == null)
            {
                errorMsg = "Gateway authentication transaction failed.";
                response = DoCheckoutResponse(randomKey, privateKey, paymenttoken, checkouturl, "101", errorMsg);
                return(Json(response));
            }

            //checkout
            GatewayCheckoutResponse gatewayCheckoutResponse = null;

            try
            {
                gatewayCheckoutResponse = _gatewayChekoutService.InitiateGatewayChechout(request, token);
            }
            catch (Exception ex)
            {
                errorMsg = "Gateway checkout transaction failed. " + ex.Message;
                response = DoCheckoutResponse(randomKey, privateKey, paymenttoken, checkouturl, "102", errorMsg);
                return(Json(response));
            }

            if (gatewayCheckoutResponse == null)
            {
                errorMsg = "Gateway checkout transaction failed.";
                response = DoCheckoutResponse(randomKey, privateKey, paymenttoken, checkouturl, "102", errorMsg);
                return(Json(response));
            }

            checkouturl = gatewayCheckoutResponse.checkout_url;
            response    = DoCheckoutResponse(randomKey, privateKey, paymenttoken, checkouturl, "", "");
            return(Json(response));
        }
Beispiel #9
0
        public ActionResult Webhook(GatewayWebhook webhook)
        {
            _completeOrderService.DelayExecution(15);

            if (webhook.type != "order_update")
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest, "Invalid Webhook Type."));
            }

            if (webhook.@event != "order_complete")
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest, "Invalid Webhook Event."));
            }

            if (string.IsNullOrEmpty(webhook.object_uuid))
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest, "Invalid Webhook Object."));
            }

            int id = 0;

            if (webhook.object_uuid.Contains("_"))
            {
                int.TryParse(webhook.object_uuid.Split('_')[0], out id);
            }

            if (id <= 0)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest, "Invalid Webhook Object."));
            }

            CheckoutRequest request = null;

            try
            {
                request = _completeOrderService.GetCurrentRequest(id);
            }
            catch
            {
                return(new HttpStatusCodeResult(HttpStatusCode.InternalServerError, "Error getting request info from database."));
            }
            if (request == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.InternalServerError, "Error getting request info from database."));
            }


            if (request.status == Status.Completed)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.OK));
            }

            var          errorMsg = "";
            GatewayToken token    = null;

            try
            {
                token = _gatewayAuthenticationService.GetGatewayToken(request.username, request.password);
            }
            catch (Exception ex)
            {
                errorMsg = "Complete order from Webhook failed. Gateway authentication transaction failed.";
                _completeOrderService.CompleteOrder(0, "101", errorMsg, request, null);
                return(new HttpStatusCodeResult(HttpStatusCode.InternalServerError, "Gateway authentication failed."));
            }
            if (token == null)
            {
                errorMsg = "Complete order from Webhook failed. Gateway authentication transaction failed.";
                _completeOrderService.CompleteOrder(0, "101", errorMsg, request, null);
                return(new HttpStatusCodeResult(HttpStatusCode.InternalServerError, "Gateway authentication failed."));
            }

            //get order details
            GatewayOrderDetails gatewayOrderDetailsResponse = null;

            try
            {
                var orderReferenceId = request.id.ToString() + "_" + request.orderid.ToString();
                gatewayOrderDetailsResponse = _gatewayChekoutService.GetGatewayOrderDetails(orderReferenceId, token);
            }
            catch (Exception ex)
            {
                errorMsg = "Complete order from Webhook failed. Error getting order details.";
                _completeOrderService.CompleteOrder(0, "104", errorMsg, request, null);
                return(new HttpStatusCodeResult(HttpStatusCode.InternalServerError, "Error getting order details."));
            }
            if (gatewayOrderDetailsResponse == null)
            {
                errorMsg = "Complete order from Webhook failed. Error getting order details.";
                _completeOrderService.CompleteOrder(0, "104", errorMsg, request, null);
                return(new HttpStatusCodeResult(HttpStatusCode.InternalServerError, "Error getting order details."));
            }

            if (!_completeOrderService.CompleteOrder(1, "", "", request, gatewayOrderDetailsResponse))
            {
                return(new HttpStatusCodeResult(HttpStatusCode.InternalServerError));
            }

            return(new HttpStatusCodeResult(HttpStatusCode.OK));
        }
Beispiel #10
0
        public JsonResult InitiateRefund(RefundRequest request)
        {
            RefundResponse response = null;

            var privateKey = ConfigurationManager.AppSettings["AppTestSecretKey"];
            var randomKey  = Guid.NewGuid().ToString("N");
            var errorMsg   = "";

            //validations
            if (!request.type.Equals("void"))
            {
                errorMsg = "Bad Request. Invalid Transaction Type.";
                response = doRefundResponse(0, request, privateKey, randomKey, "", errorMsg, "100");
                return(Json(response));
            }
            if (request.signature != Md5Helper.GetMd5Hash(request.randomkey + privateKey + request.orderid + request.invoice + request.transactionid))
            {
                errorMsg = "Bad Request. Invalid Signature.";
                response = doRefundResponse(0, request, privateKey, randomKey, "", errorMsg, "100");
                return(Json(response));
            }

            //auth token
            GatewayToken token = null;

            try
            {
                token = _gatewayAuthenticationService.GetGatewayToken(request.username, request.password);
            }
            catch (Exception ex)
            {
                errorMsg = "Gateway authentication transaction failed. " + ex.Message;
                response = doRefundResponse(0, request, privateKey, randomKey, "", errorMsg, "101");
                return(Json(response));
            }

            if (token == null)
            {
                errorMsg = "Gateway authentication transaction failed.";
                response = doRefundResponse(0, request, privateKey, randomKey, "", errorMsg, "101");
                return(Json(response));
            }

            GatewayRefundResponse gatewayRefundResponse = null;

            //refund
            try
            {
                gatewayRefundResponse = _gatewayRefundService.InitiateGatewayRefund(request, token);
            }
            catch (Exception ex)
            {
                errorMsg = "Gateway refund transaction failed. " + ex.Message;
                response = doRefundResponse(0, request, privateKey, randomKey, "", errorMsg, "103");
                return(Json(response));
            }

            if (gatewayRefundResponse == null)
            {
                errorMsg = "Gateway refund transaction failed.";
                response = doRefundResponse(0, request, privateKey, randomKey, "", errorMsg, "103");
                return(Json(response));
            }

            response = doRefundResponse(1, request, privateKey, randomKey, gatewayRefundResponse.refund_id, "", "");
            return(Json(response));
        }