public PaymentResponse PreAuthorizationRelease(Transaction preauthenTrans)
        {
            try
            {
                string signature = GetSignature(TransactionViewModel.New(preauthenTrans), Settings.MerchantCode, Settings.MerchantKey);

                Dictionary <string, object> postData = new Dictionary <string, object>();

                postData.Add("Ds_Merchant_TransactionType", GetType(ETransactionType.PreauthCancelation));
                postData.Add("Ds_Merchant_MatchingData", preauthenTrans.TransactionIDExt);
                postData.Add("Ds_Merchant_MerchantCode", Settings.MerchantCode);
                postData.Add("Ds_Merchant_Amount", preauthenTrans.Amount.ToString("N2").Replace(".", string.Empty));
                postData.Add("Ds_Date", preauthenTrans.Resolved.ToString(GATEWAY_DATE_FORMAT));
                postData.Add("Ds_Merchant_PanMask", preauthenTrans.PanMask);
                postData.Add("Ds_Merchant_MerchantSignature", signature);
                postData.Add("Ds_Merchant_Currency", GetCurrency(preauthenTrans.ECurrency));

                string url = Settings.ApiOperationHost;

                PaymentResponse response = Remote(url, postData);

                return(response);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        public PaymentResponse ParseHtmlResponse(HttpRequestBase request)
        {
            if (request == null)
            {
                return(null);
            }

            PaymentResponse response = new PaymentResponse();

            response.Transaction = TransactionInfo.New();

            StreamReader strReader = new StreamReader(request.InputStream);

            response.Transaction.Response = strReader.ReadToEnd();
            strReader.Close();

            response.Transaction.Amount = Convert.ToDecimal(request["Ds_Amount"]);
            //Tefpay uses amount without . or , that's why we have to divide it by 100
            response.Transaction.Amount           = response.Transaction.Amount / 100;
            response.Transaction.TransactionIDExt = request["Ds_Merchant_MatchingData"].ToString();

            string merchantCode = request["Ds_Merchant_MerchantCode"].ToString();

            //TOKEN CHECK
            string url = (Convert.ToInt32(request["Ds_Code"]) < 200) ? GetResponseOKURL(request) : GetResponseKOURL(request);

            string signature = GetSignature(TransactionViewModel.New(response.Transaction), merchantCode, Settings.MerchantKey);

            /*TODO: Check TefPay response signature
             * if (signature != request["Ds_Signature"]) {
             *      throw new Exception("TOKEN DOES NOT MISMATCH!");
             * }*/

            response.Transaction.Resolved = DateTime.ParseExact(request["Ds_Date"], GATEWAY_DATE_FORMAT, CultureInfo.InvariantCulture);
            response.Transaction.AuthCode = request["Ds_AuthorisationCode"].ToString();
            response.Transaction.PanMask  = request["Ds_PanMask"].ToString();

            response.Message      = GetMessage(request);
            response.ResponseCode = request["Ds_Code"].ToString();

            response.Status = (response.ResponseCode == "100") ? EStatus.OK : EStatus.Error;

            return(response);
        }