protected void SettleRequestButton_Click(object sender, EventArgs e)
    {
        try
        {
            string result;

            BypassCertificateError();

            ir.shaparak.bpm.PaymentGatewayImplService bpService = new ir.shaparak.bpm.PaymentGatewayImplService();
            result = bpService.bpSettleRequest(Int64.Parse(TerminalIdTextBox.Text),
                                               UserNameTextBox.Text,
                                               UserPasswordTextBox.Text,
                                               Int64.Parse(SettleOrderIdTextBox.Text),
                                               Int64.Parse(SettleSaleOrderIdTextBox.Text),
                                               Int64.Parse(SettleSaleReferenceIdTextBox.Text));
            SettleOutputLabel.Text = result;
        }
        catch (Exception exp)
        {
            SettleOutputLabel.Text = "Error: " + exp.Message;
        }
    }
        /// <summary>
        ///
        /// </summary>
        /// <returns></returns>
        public ActionResult CallBack()
        {
            string comment;
            var    resCode = Request.Params["ResCode"];
            var    orderId = int.Parse(Request.Params["OrderId"] ?? "0");
            var    order   = _orderService.GetOrderById(orderId);

            #region [After Call Mellat WebService]
            if (!string.IsNullOrEmpty(Request.Params["RefId"]) &&
                !string.IsNullOrEmpty(Request.Params["saleOrderId"]) &&
                !string.IsNullOrEmpty(Request.Params["SaleReferenceId"]))
            {
                var refId           = Request.Params["RefId"];
                var saleOrderId     = long.Parse(Request.Params["saleOrderId"]);
                var saleReferenceId = long.Parse(Request.Params["SaleReferenceId"]);
                if (resCode == "0")
                {
                    if (order != null)
                    {
                        try
                        {
                            #region [Mellat : bpVerifyRequest , bpSettleRequest]
                            var terminalId   = _mellatPaymentSettings.TerminalId;
                            var userName     = _mellatPaymentSettings.UserName;
                            var userPassword = _mellatPaymentSettings.UserPassword;
                            BypassCertificateError();
                            var bpService             = new ir.shaparak.bpm.PaymentGatewayImplService();
                            var resultOfVerifyRequest = bpService.bpVerifyRequest(Int64.Parse(terminalId),
                                                                                  userName,
                                                                                  userPassword,
                                                                                  saleOrderId,
                                                                                  saleOrderId,
                                                                                  saleReferenceId);
                            var settleRequestArray = resultOfVerifyRequest.Split(',');
                            if (settleRequestArray[0] == "0")
                            {
                                var resultOfSettleRequest = bpService.bpSettleRequest(Int64.Parse(terminalId),
                                                                                      userName,
                                                                                      userPassword,
                                                                                      saleOrderId,
                                                                                      saleOrderId,
                                                                                      saleReferenceId);
                                if (resultOfSettleRequest != "0")
                                {
                                    throw new Exception();
                                }
                            }
                            else
                            {
                                throw new Exception();
                            }

                            #endregion
                            #region [mark order as paid]
                            if (_orderProcessingService.CanMarkOrderAsPaid(order))
                            {
                                //TODO : check saleOrderId is match by this Order.CaptureTransactionId
                                order.CaptureTransactionId      = saleOrderId.ToString(CultureInfo.InvariantCulture);
                                order.SubscriptionTransactionId = string.Format("[RefId = {0}]", refId);

                                order.AuthorizationTransactionId = string.Format("[SaleReferenceId = {0}]",
                                                                                 saleReferenceId.ToString(CultureInfo.InvariantCulture));
                                order.AuthorizationTransactionResult = string.Format("[ResCode = {0}]", resCode);

                                _orderService.UpdateOrder(order);
                                _orderProcessingService.MarkOrderAsPaid(order);
                            }
                            #endregion
                        }
                        catch
                        {
                            comment = string.Format("Error in Mellat Pay Verify or Pay Settle. OrderId= {0}", orderId);
                            _logger.Error(comment);
                            return(RedirectToAction("Error", "PaymentMellat", new
                            {
                                result = comment,
                                cashRefId = Request.Params["SaleReferenceId"],
                                insRefId = "",
                                cashOrder = Request.Params["saleOrderId"],
                                insOrder = "",
                                id = order.Id
                            }));
                        }
                        return(RedirectToRoute("CheckoutCompleted", new { orderId = order.Id }));
                    }
                    comment = string.Format("Order Not Found. OrderId= {0}", orderId);
                    _logger.Error(comment);
                    return(RedirectToAction("Error", "PaymentMellat", new
                    {
                        result = comment,
                        cashRefId = Request.Params["SaleReferenceId"],
                        insRefId = "",
                        cashOrder = Request.Params["saleOrderId"],
                        insOrder = "",
                        id = orderId
                    }));
                }
                comment = Utility.ErrorCode("bpPayRequest", resCode);
                _logger.Warning(comment);
                return(RedirectToAction("Error", "PaymentMellat", new
                {
                    result = comment,
                    cashRefId = Request.Params["SaleReferenceId"],
                    insRefId = "",
                    cashOrder = Request.Params["saleOrderId"],
                    insOrder = "",
                    id = order.Id
                }));
            }
            comment = Utility.ErrorCode("bpPayRequest", resCode);
            _logger.Error(comment);
            return(RedirectToAction("Error", "PaymentMellat", new
            {
                result = comment,
                cashRefId = Request.Params["SaleReferenceId"],
                insRefId = "",
                cashOrder = Request.Params["saleOrderId"],
                insOrder = "",
                id = order.Id
            }));

            #endregion
        }