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);
        }
Пример #2
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));
        }
Пример #3
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));
        }
        public bool CompleteOrder(int approved, string errorcode, string errormessage, CheckoutRequest request, GatewayOrderDetails gatewayOrderDetails)
        {
            var success = false;

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

            var completeOrderRequest = new CompleteOrderRequest()
            {
                orderid       = request.orderid,
                transactionid = transactionId,
                invoice       = request.invoice,
                errormessage  = errormessage,
                errorcode     = errorcode,
                amount        = request.amounttotal,
                approved      = approved,
                randomkey     = randomKey,
                signature     = Md5Helper.GetMd5Hash(randomKey + privateKey + request.orderid + request.invoice + transactionId)
            };

            try
            {
                var response = _webApiClient.HTTPPostRequest(request.notificationurl, "", completeOrderRequest, null);

                CompleteOrderResponse completeOrderResponse = null;

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

                if (completeOrderResponse != null)
                {
                    if (completeOrderResponse.processed == 1)
                    {
                        _repository.UpdateCheckoutRequestStatus(request.id, Status.Completed);
                        success = true;
                    }
                    else
                    {
                        _repository.UpdateCheckoutRequestStatus(request.id, Status.Failed);
                    }
                }
            }
            catch {
                _repository.UpdateCheckoutRequestStatus(request.id, Status.Failed);
            }

            return(success);
        }