Exemple #1
0
        /// <summary>
        /// Voids payment
        /// </summary>
        /// <param name="order">Order</param>
        /// <param name="cancelPaymentResult">Cancel payment result</param>
        public void Void(Order order, ref CancelPaymentResult cancelPaymentResult)
        {
            InitSettings();

            string transactionID = cancelPaymentResult.AuthorizationTransactionId;

            if (String.IsNullOrEmpty(transactionID))
            {
                transactionID = cancelPaymentResult.CaptureTransactionId;
            }

            DoVoidReq req = new DoVoidReq();

            req.DoVoidRequest                 = new DoVoidRequestType();
            req.DoVoidRequest.Version         = this.APIVersion;
            req.DoVoidRequest.AuthorizationID = transactionID;
            DoVoidResponseType response = service2.DoVoid(req);

            string error   = string.Empty;
            bool   Success = PaypalHelper.CheckSuccess(response, out error);

            if (Success)
            {
                cancelPaymentResult.PaymentStatus = PaymentStatusEnum.Voided;
                //cancelPaymentResult.VoidTransactionID = response.RefundTransactionID;
            }
            else
            {
                cancelPaymentResult.Error = error;
            }
        }
Exemple #2
0
        /// <summary>
        /// Refunds payment
        /// </summary>
        /// <param name="order">Order</param>
        /// <param name="cancelPaymentResult">Cancel payment result</param>
        public void Refund(Order order, ref CancelPaymentResult cancelPaymentResult)
        {
            InitSettings();

            string transactionID = cancelPaymentResult.CaptureTransactionId;

            RefundTransactionReq req = new RefundTransactionReq();

            req.RefundTransactionRequest = new RefundTransactionRequestType();
            //NOTE: Specify amount in partial refund
            req.RefundTransactionRequest.RefundType          = RefundType.Full;
            req.RefundTransactionRequest.RefundTypeSpecified = true;
            req.RefundTransactionRequest.Version             = this.APIVersion;
            req.RefundTransactionRequest.TransactionID       = transactionID;
            RefundTransactionResponseType response = service1.RefundTransaction(req);

            string error   = string.Empty;
            bool   Success = PaypalHelper.CheckSuccess(response, out error);

            if (Success)
            {
                cancelPaymentResult.PaymentStatus = PaymentStatusEnum.Refunded;
                //cancelPaymentResult.RefundTransactionID = response.RefundTransactionID;
            }
            else
            {
                cancelPaymentResult.Error = error;
            }
        }
Exemple #3
0
        public void Void(Order order, ref CancelPaymentResult cancelPaymentResult)
        {
            var usaepay = new USAePayAPI.USAePay();

            usaepay.SourceKey = sourceKey;
            usaepay.Pin       = pin;

            try
            {
                usaepay.Void(order.AuthorizationTransactionId);

                switch (usaepay.ResultCode)
                {
                case "A":
                    cancelPaymentResult.PaymentStatus = PaymentStatusEnum.Voided;
                    //cancelPaymentResult.AuthorizationTransactionId = usaepay.RefNum;
                    break;

                case "D":
                    cancelPaymentResult.Error     = "Void Declined: " + usaepay.ErrorMesg;
                    cancelPaymentResult.FullError = "Void Declined : " + usaepay.ErrorMesg;
                    break;

                default:
                    cancelPaymentResult.Error     = "Error during void";
                    cancelPaymentResult.FullError = "Error during void: " + usaepay.ErrorMesg;
                    break;
                }
            }
            catch
            {
                cancelPaymentResult.Error     = "Error during void";
                cancelPaymentResult.FullError = "Error during void";
            }
        }
        /// <summary>
        /// Refunds payment
        /// </summary>
        /// <param name="order">Order</param>
        /// <param name="cancelPaymentResult">Cancel payment result</param>
        public void Refund(Order order, ref CancelPaymentResult cancelPaymentResult)
        {
            try
            {
                using (usaepayService svc = new usaepayService())
                {
                    svc.Url = EPaymentFormSettings.ServiceUrl;
                    TransactionResponse rsp = svc.refundTransaction(EPaymentFormHelper.ServiceSecurityToken, cancelPaymentResult.CaptureTransactionId, (double)cancelPaymentResult.Amount);
                    switch (rsp.ResultCode)
                    {
                    case "A":
                        cancelPaymentResult.PaymentStatus = PaymentStatusEnum.Refunded;
                        break;

                    case "D":
                    case "E":
                    default:
                        cancelPaymentResult.Error     = rsp.ErrorCode;
                        cancelPaymentResult.FullError = rsp.Error;
                        break;
                    }
                }
            }
            catch (Exception ex)
            {
                cancelPaymentResult.Error     = ex.Message;
                cancelPaymentResult.FullError = ex.Message;
            }
        }
Exemple #5
0
        //This works only on refund to customer (refund what has already been captured...)
        private void DoRefund(Order order, ref CancelPaymentResult cancelPaymentResult, bool alreadyTriedCancel)
        {
            string merchant       = IoC.Resolve <ISettingManager>().GetSettingValue(QuickPayConstants.SETTING_MERCHANTID);
            string protocol       = "3";
            string capturePostUrl = "https://secure.quickpay.dk/api";
            string msgtype        = "refund";
            string amount         = (cancelPaymentResult.Amount * 100).ToString("0", CultureInfo.InvariantCulture); //NOTE: Primary store should be changed to DKK, if you do not have internatinal agreement with pbs and quickpay. Otherwise you need to do currency conversion here.
            string transaction    = order.AuthorizationTransactionId;
            string md5secret      = IoC.Resolve <ISettingManager>().GetSettingValue(QuickPayConstants.SETTING_MD5SECRET);
            string stringToMd5    = string.Concat(protocol, msgtype, merchant, amount, transaction, md5secret);


            string querystring = string.Empty;
            string md5check    = GetMD5(stringToMd5);

            querystring += string.Format("protocol={0}&", protocol);
            querystring += string.Format("msgtype={0}&", msgtype);
            querystring += string.Format("merchant={0}&", merchant);
            querystring += string.Format("amount={0}&", amount);
            querystring += string.Format("transaction={0}&", transaction);
            querystring += string.Format("md5check={0}", md5check);

            string retval = HttpRequestsFunctions.HttpPost(capturePostUrl, querystring);


            try
            {
                XmlDocument xmlDocument = new XmlDocument();
                xmlDocument.LoadXml(retval);
                XmlElement xmlElement = xmlDocument.DocumentElement;

                string rep_qpstatmsg   = xmlElement.SelectSingleNode("qpstatmsg").InnerText;
                string rep_qpstat      = xmlElement.SelectSingleNode("qpstat").InnerText;
                string rep_transaction = xmlElement.SelectSingleNode("transaction").InnerText;

                //refund successful
                if (rep_qpstat == "000")
                {
                    cancelPaymentResult.PaymentStatus = PaymentStatusEnum.Refunded;
                }
                //not allowed in current state. This probably means that it has not been caputered yet.
                //we therefore try to just cancel, but not refund
                else if (rep_qpstat == "004" && (!alreadyTriedCancel))
                {
                    DoCancel(order, ref cancelPaymentResult, true);
                }
                else
                {
                    cancelPaymentResult.Error     = "Quickpay Caputure refund did not succeed, qpstat is:" + rep_qpstat;
                    cancelPaymentResult.FullError = "Quickpay Caputure refund did not succeed, qpstat is:" + rep_qpstat;
                }
            }
            catch (Exception exception)
            {
                throw new NopException("XML response for Quickpay Capture was not successfull. Reasons could be that the host did not respond. Below is stacktrace:" + exception.Message + exception.StackTrace + exception.Source, exception.InnerException);
            }
        }
        /// <summary>
        /// Voids payment
        /// </summary>
        /// <param name="transactionPayment">transactionPayment</param>
        /// <param name="cancelPaymentResult">Cancel payment result</param>
        public void Void(TransactionPayment transactionPayment, ref CancelPaymentResult cancelPaymentResult)
        {
            var paymentMethod = GetPaymentMethodById(transactionPayment.PaymentMethodId);

            if (paymentMethod == null)
            {
                throw new Exception("Payment method couldn't be loaded");
            }
            var iPaymentMethod = Activator.CreateInstance(Type.GetType(paymentMethod.ClassName)) as IPaymentMethod;

            iPaymentMethod.Void(transactionPayment, ref cancelPaymentResult);
        }
Exemple #7
0
        //This only works when a payment have been authorized and not captured.
        private void DoCancel(Order order, ref CancelPaymentResult cancelPaymentResult, bool alreadyTriedRefund)
        {
            string merchant       = IoC.Resolve <ISettingManager>().GetSettingValue(QuickPayConstants.SETTING_MERCHANTID);
            string protocol       = "3";
            string capturePostUrl = "https://secure.quickpay.dk/api";
            string msgtype        = "cancel";
            string transaction    = order.AuthorizationTransactionId;
            string md5secret      = IoC.Resolve <ISettingManager>().GetSettingValue(QuickPayConstants.SETTING_MD5SECRET);
            string stringToMd5    = string.Concat(protocol, msgtype, merchant, transaction, md5secret);


            string querystring = string.Empty;
            string md5check    = GetMD5(stringToMd5);

            querystring += string.Format("protocol={0}&", protocol);
            querystring += string.Format("msgtype={0}&", msgtype);
            querystring += string.Format("merchant={0}&", merchant);
            querystring += string.Format("transaction={0}&", transaction);
            querystring += string.Format("md5check={0}", md5check);

            string retval = HttpRequestsFunctions.HttpPost(capturePostUrl, querystring);


            try
            {
                XmlDocument xmlDocument = new XmlDocument();
                xmlDocument.LoadXml(retval);
                XmlElement xmlElement = xmlDocument.DocumentElement;

                string rep_qpstatmsg   = xmlElement.SelectSingleNode("qpstatmsg").InnerText;
                string rep_qpstat      = xmlElement.SelectSingleNode("qpstat").InnerText;
                string rep_transaction = xmlElement.SelectSingleNode("transaction").InnerText;

                //refund successful
                if (rep_qpstat == "000")
                {
                    cancelPaymentResult.PaymentStatus = PaymentStatusEnum.Refunded;
                }
                else if (rep_qpstat == "004" && (!alreadyTriedRefund))
                {
                    DoRefund(order, ref cancelPaymentResult, true);
                }
                else
                {
                    cancelPaymentResult.Error     = "Quickpay Cancel did not succeed, qpstat is:" + rep_qpstat;
                    cancelPaymentResult.FullError = "Quickpay Cancel did not succeed, qpstat is:" + rep_qpstat;
                }
            }
            catch (Exception exception)
            {
                throw new NopException("XML response for Quickpay Capture was not successfull. Reasons could be that the host did not respond. Below is stacktrace:" + exception.Message + exception.StackTrace + exception.Source, exception.InnerException);
            }
        }
        public async Task <CancelPaymentResult> CancelRequest(CancelPaymentRequest request)
        {
            string merchantId = request.BankParameters["merchantId"];
            string terminalId = request.BankParameters["terminalId"];

            var xmlBuilder = new StringBuilder();

            xmlBuilder.Append($@"<?xml version=""1.0"" encoding=""utf-8""?>
                                     <posnetRequest>
                                         <mid>{merchantId}</mid>
                                         <tid>{terminalId}</tid>
                                         <reverse>
                                             <transaction>sale</transaction>
                                             <hostLogKey>{request.ReferenceNumber.Split('-').First().Trim()}</hostLogKey>");

            //taksitli işlemde 6 haneli auth kodu isteniyor
            if (request.Installment > 0)
            {
                xmlBuilder.Append($"<authCode>{request.ReferenceNumber.Split('-').Last().Trim()}</authCode>");
            }

            xmlBuilder.Append(@"</reverse>
                                </posnetRequest>");

            var httpParameters = new Dictionary <string, string>();

            httpParameters.Add("xmldata", xmlBuilder.ToString());

            var response = await client.PostAsync(request.BankParameters["verifyUrl"], new FormUrlEncodedContent(httpParameters));

            string responseContent = await response.Content.ReadAsStringAsync();

            var xmlDocument = new XmlDocument();

            xmlDocument.LoadXml(responseContent);

            if (xmlDocument.SelectSingleNode("posnetResponse/approved") == null ||
                xmlDocument.SelectSingleNode("posnetResponse/approved").InnerText != "1")
            {
                string errorMessage = xmlDocument.SelectSingleNode("posnetResponse/respText")?.InnerText ?? string.Empty;
                if (string.IsNullOrEmpty(errorMessage))
                {
                    errorMessage = "Bankadan hata mesajı alınamadı.";
                }

                return(CancelPaymentResult.Failed(errorMessage));
            }

            var transactionId = xmlDocument.SelectSingleNode("posnetResponse/hostlogkey")?.InnerText;

            return(CancelPaymentResult.Successed(transactionId, transactionId));
        }
Exemple #9
0
        public async Task <CancelPaymentResult> CancelRequest(CancelPaymentRequest request)
        {
            string clientId = request.BankParameters["clientId"];
            string userName = request.BankParameters["cancelUsername"];
            string password = request.BankParameters["cancelUserPassword"];

            string requestXml = $@"<?xml version=""1.0"" encoding=""utf-8""?>
                                    <CC5Request>
                                      <Name>{userName}</Name>
                                      <Password>{password}</Password>
                                      <ClientId>{clientId}</ClientId>
                                      <Type>Void</Type>
                                      <OrderId>{request.OrderNumber}</OrderId>
                                    </CC5Request>";

            var response = await client.PostAsync(request.BankParameters["verifyUrl"], new StringContent(requestXml, Encoding.UTF8, "text/xml"));

            string responseContent = await response.Content.ReadAsStringAsync();

            var xmlDocument = new XmlDocument();

            xmlDocument.LoadXml(responseContent);

            if (xmlDocument.SelectSingleNode("CC5Response/Response") == null ||
                xmlDocument.SelectSingleNode("CC5Response/Response").InnerText != "Approved")
            {
                var errorMessage = xmlDocument.SelectSingleNode("CC5Response/ErrMsg")?.InnerText ?? string.Empty;
                if (string.IsNullOrEmpty(errorMessage))
                {
                    errorMessage = "Bankadan hata mesajı alınamadı.";
                }

                return(CancelPaymentResult.Failed(errorMessage));
            }

            if (xmlDocument.SelectSingleNode("CC5Response/ProcReturnCode") == null ||
                xmlDocument.SelectSingleNode("CC5Response/ProcReturnCode").InnerText != "00")
            {
                var errorMessage = xmlDocument.SelectSingleNode("CC5Response/ErrMsg")?.InnerText ?? string.Empty;
                if (string.IsNullOrEmpty(errorMessage))
                {
                    errorMessage = "Bankadan hata mesajı alınamadı.";
                }

                return(CancelPaymentResult.Failed(errorMessage));
            }

            var transactionId = xmlDocument.SelectSingleNode("CC5Response/TransId")?.InnerText ?? string.Empty;

            return(CancelPaymentResult.Successed(transactionId, transactionId));
        }
        /// <summary>
        /// Cancels recurring payment
        /// </summary>
        /// <param name="transactionPayment">transactionPayment</param>
        /// <param name="cancelPaymentResult">Cancel payment result</param>
        public void CancelRecurringPayment(TransactionPayment transactionPayment, ref CancelPaymentResult cancelPaymentResult)
        {
            if (transactionPayment.TransactionPaymentTotal == decimal.Zero)
            {
                return;
            }

            var paymentMethod = GetPaymentMethodById(transactionPayment.PaymentMethodId);

            if (paymentMethod == null)
            {
                throw new Exception("Payment method couldn't be loaded");
            }
            var iPaymentMethod = Activator.CreateInstance(Type.GetType(paymentMethod.ClassName)) as IPaymentMethod;

            iPaymentMethod.CancelRecurringPayment(transactionPayment, ref cancelPaymentResult);
        }
Exemple #11
0
        /// <summary>
        /// Cancel payment based on the given Token.
        /// </summary>
        /// <param name="apiKey">Divider [ApiKey]</param>
        /// <param name="token">Payment token</param>
        /// <returns>A boolean value representing if cancel process is successful or not.</returns>
        public CancelPaymentResult CancelPayment(string apiKey, string token)
        {
            apiKey.CheckArgumentIsNull(nameof(apiKey));
            token.CheckArgumentIsNull(nameof(token));

            var client = new HttpRestClient <string, bool>(_httpClient, ENDPOINT_CancelPayment);

            client.WithApiKey(apiKey);

            try {
                var result = client.PostJson(token);
                return(CancelPaymentResult.Ok(result));
            }
            catch (Exception ex) {
                return(CancelPaymentResult.Failed(ex));
            }
        }
        public async Task <CancelPaymentResult> CancelRequest(CancelPaymentRequest request)
        {
            string mbrId      = request.BankParameters["mbrId"];      //Mağaza numarası
            string merchantId = request.BankParameters["merchantId"]; //Mağaza numarası
            string userCode   = request.BankParameters["userCode"];   //
            string userPass   = request.BankParameters["userPass"];   //Mağaza anahtarı
            string txnType    = request.BankParameters["txnType"];    //İşlem tipi
            string secureType = request.BankParameters["secureType"];

            string requestXml = $@"<?xml version=""1.0"" encoding=""utf-8"" standalone=""yes""?>
                                    <PayforIptal>
                                        <MbrId>{mbrId}</MbrId>
                                        <MerchantID>{merchantId}</MerchantID>
                                        <UserCode>{userCode}</UserCode>
                                        <UserPass>{userPass}</UserPass>
                                        <OrgOrderId>{request.OrderNumber}</OrgOrderId>
                                        <SecureType>NonSecure</SecureType>
                                        <TxnType>Void</TxnType>
                                        <Currency>{request.CurrencyIsoCode}</Currency>
                                        <Lang>{request.LanguageIsoCode.ToUpper()}</Lang>
                                    </PayforIptal>";

            var response = await client.PostAsync(request.BankParameters["verifyUrl"], new StringContent(requestXml, Encoding.UTF8, "text/xml"));

            string responseContent = await response.Content.ReadAsStringAsync();

            var xmlDocument = new XmlDocument();

            xmlDocument.LoadXml(responseContent);

            //TODO Finansbank response
            //if (xmlDocument.SelectSingleNode("VposResponse/ResultCode") == null ||
            //    xmlDocument.SelectSingleNode("VposResponse/ResultCode").InnerText != "0000")
            //{
            //    string errorMessage = xmlDocument.SelectSingleNode("VposResponse/ResultDetail")?.InnerText ?? string.Empty;
            //    if (string.IsNullOrEmpty(errorMessage))
            //        errorMessage = "Bankadan hata mesajı alınamadı.";

            //    return CancelPaymentResult.Failed(errorMessage);
            //}

            var transactionId = xmlDocument.SelectSingleNode("VposResponse/TransactionId")?.InnerText;

            return(CancelPaymentResult.Successed(transactionId, transactionId));
        }
Exemple #13
0
        /// <summary>
        /// Cancels recurring payment
        /// </summary>
        /// <param name="order">Order</param>
        /// <param name="cancelPaymentResult">Cancel payment result</param>
        public void CancelRecurringPayment(Order order, ref CancelPaymentResult cancelPaymentResult)
        {
            InitSettings();
            MerchantAuthenticationType authentication = PopulateMerchantAuthentication();
            long subscriptionID = 0;

            long.TryParse(cancelPaymentResult.SubscriptionTransactionId, out subscriptionID);
            ARBCancelSubscriptionResponseType response = webService.ARBCancelSubscription(authentication, subscriptionID);

            if (response.resultCode == MessageTypeEnum.Ok)
            {
                //ok
            }
            else
            {
                cancelPaymentResult.Error     = "Error cancelling subscription, please contact customer support. " + GetErrors(response);
                cancelPaymentResult.FullError = "Error cancelling subscription, please contact customer support. " + GetErrors(response);
            }
        }
        public void Refund(Order order, ref CancelPaymentResult cancelPaymentResult)
        {
            XmlTransaction sxml    = new XmlTransaction(XmlPaymentSettings.TestMode ? XmlTransaction.MODE_TEST : XmlTransaction.MODE_LIVE, SecurePaySettings.MerchantId, SecurePaySettings.MerchantPassword, ID);
            bool           success = false;
            string         code    = "";

            success = sxml.processRefund(cancelPaymentResult.Amount, order.OrderGuid.ToString(), cancelPaymentResult.CaptureTransactionId);

            code = sxml["response_code"];

            if (!success)
            {
                cancelPaymentResult.Error     = String.Format("Declined ({0})", code);
                cancelPaymentResult.FullError = sxml.Error;
            }
            else
            {
                cancelPaymentResult.PaymentStatus = PaymentStatusEnum.Refunded;
            }
        }
Exemple #15
0
        public async Task <CancelPaymentResult> CancelRequest(CancelPaymentRequest request)
        {
            string merchantId       = request.BankParameters["merchantId"];
            string merchantPassword = request.BankParameters["merchantPassword"];

            string requestXml = $@"<VposRequest>
                                    <MerchantId>{merchantId}</MerchantId>
                                    <Password>{merchantPassword}</Password>
                                    <TransactionType>Cancel</TransactionType>
                                    <ReferenceTransactionId>{request.TransactionId}</ReferenceTransactionId>
                                    <ClientIp>{_httpContextAccessor.HttpContext.Connection.RemoteIpAddress}</ClientIp>
                                </VposRequest>";

            var parameters = new Dictionary <string, string>();

            parameters.Add("prmstr", requestXml);

            var response = await client.PostAsync(request.BankParameters["verifyUrl"], new FormUrlEncodedContent(parameters));

            string responseContent = await response.Content.ReadAsStringAsync();

            var xmlDocument = new XmlDocument();

            xmlDocument.LoadXml(responseContent);
            if (xmlDocument.SelectSingleNode("VposResponse/ResultCode") == null ||
                xmlDocument.SelectSingleNode("VposResponse/ResultCode").InnerText != "0000")
            {
                string errorMessage = xmlDocument.SelectSingleNode("VposResponse/ResultDetail")?.InnerText ?? string.Empty;
                if (string.IsNullOrEmpty(errorMessage))
                {
                    errorMessage = "Bankadan hata mesajı alınamadı.";
                }

                return(CancelPaymentResult.Failed(errorMessage));
            }

            var transactionId = xmlDocument.SelectSingleNode("VposResponse/TransactionId")?.InnerText;

            return(CancelPaymentResult.Successed(transactionId));
        }
        public async Task <CancelPaymentResult> CancelRequest(CancelPaymentRequest request)
        {
            string shopCode = request.BankParameters["shopCode"];
            string userCode = request.BankParameters["cancelUserCode"];
            string userPass = request.BankParameters["cancelUserPass"];

            var formBuilder = new StringBuilder();

            formBuilder.AppendFormat("ShopCode={0}&", shopCode);
            formBuilder.AppendFormat("PurchAmount={0}&", request.TotalAmount.ToString(new CultureInfo("en-US")));
            formBuilder.AppendFormat("Currency={0}&", request.CurrencyIsoCode);
            formBuilder.Append("OrderId=&");
            formBuilder.Append("TxnType=Void&");
            formBuilder.AppendFormat("orgOrderId={0}&", request.OrderNumber);
            formBuilder.AppendFormat("UserCode={0}&", userCode);
            formBuilder.AppendFormat("UserPass={0}&", userPass);
            formBuilder.Append("SecureType=NonSecure&");
            formBuilder.AppendFormat("Lang={0}&", request.LanguageIsoCode.ToUpper());
            formBuilder.Append("MOTO=0");

            var response = await client.PostAsync(request.BankParameters["verifyUrl"], new StringContent(formBuilder.ToString(), Encoding.UTF8, "application/x-www-form-urlencoded"));

            string responseContent = await response.Content.ReadAsStringAsync();

            if (string.IsNullOrEmpty(responseContent))
            {
                return(CancelPaymentResult.Failed("İptal işlemi başarısız."));
            }

            responseContent = responseContent.Replace(";;", ";").Replace(";", "&");
            var responseParams = HttpUtility.ParseQueryString(responseContent);

            if (responseParams["ProcReturnCode"] != "00")
            {
                return(CancelPaymentResult.Failed(responseParams["ErrorMessage"]));
            }

            return(CancelPaymentResult.Successed(responseParams["TransId"], responseParams["TransId"]));
        }
 /// <summary>
 /// Voids paymen
 /// </summary>
 /// <param name="order">Order</param>
 /// <param name="cancelPaymentResult">Cancel payment result</param>
 public void Void(Order order, ref CancelPaymentResult cancelPaymentResult)
 {
     try
     {
         using (usaepayService svc = new usaepayService())
         {
             svc.Url = EPaymentFormSettings.ServiceUrl;
             if (svc.voidTransaction(EPaymentFormHelper.ServiceSecurityToken, cancelPaymentResult.AuthorizationTransactionId))
             {
                 cancelPaymentResult.PaymentStatus = PaymentStatusEnum.Voided;
             }
             else
             {
                 cancelPaymentResult.Error     = "Failed";
                 cancelPaymentResult.FullError = "Failed";
             }
         }
     }
     catch (Exception ex)
     {
         cancelPaymentResult.Error     = ex.Message;
         cancelPaymentResult.FullError = ex.Message;
     }
 }
Exemple #18
0
 /// <summary>
 /// Refunds payment
 /// </summary>
 /// <param name="order">Order</param>
 /// <param name="cancelPaymentResult">Cancel payment result</param>
 public void Refund(Order order, ref CancelPaymentResult cancelPaymentResult)
 {
     DoRefund(order, ref cancelPaymentResult, false);
 }
 /// <summary>
 /// Cancels recurring payment
 /// </summary>
 /// <param name="order">Order</param>
 /// <param name="cancelPaymentResult">Cancel payment result</param>
 public void CancelRecurringPayment(Order order, ref CancelPaymentResult cancelPaymentResult)
 {
     throw new NotImplementedException();
 }
Exemple #20
0
 /// <summary>
 /// Voids payment
 /// </summary>
 /// <param name="transactionPayment">transactionPayment</param>
 /// <param name="cancelPaymentResult">Cancel payment result</param>
 public void Void(TransactionPayment transactionPayment, ref CancelPaymentResult cancelPaymentResult)
 {
     throw new Exception("Void method not supported");
 }
 public void Void(Order order, ref CancelPaymentResult cancelPaymentResult)
 {
     throw new NotImplementedException();
 }
Exemple #22
0
 /// <summary>
 /// Cancels recurring payment
 /// </summary>
 /// <param name="transactionPayment">transactionPayment</param>
 /// <param name="cancelPaymentResult">Cancel payment result</param>
 public void CancelRecurringPayment(TransactionPayment transactionPayment, ref CancelPaymentResult cancelPaymentResult)
 {
 }
 /// <summary>
 /// Voids payment
 /// </summary>
 /// <param name="order">Order</param>
 /// <param name="cancelPaymentResult">Cancel payment result</param>
 public void Void(Order order, ref CancelPaymentResult cancelPaymentResult)
 {
     throw new NopException("Void method not supported");
 }
 /// <summary>
 /// Cancels recurring payment
 /// </summary>
 /// <param name="order">Order</param>
 /// <param name="cancelPaymentResult">Cancel payment result</param>
 public void CancelRecurringPayment(Order order, ref CancelPaymentResult cancelPaymentResult)
 {
 }
Exemple #25
0
        public async Task <CancelPaymentResult> CancelRequest(CancelPaymentRequest request)
        {
            string terminalUserId     = request.BankParameters["terminalUserId"];
            string terminalId         = request.BankParameters["terminalId"];
            string terminalMerchantId = request.BankParameters["terminalMerchantId"];
            string cancelUserId       = request.BankParameters["cancelUserId"];
            string cancelUserPassword = request.BankParameters["cancelUserPassword"];
            string mode = request.BankParameters["mode"];//PROD | TEST

            //garanti tarafından terminal numarasını 9 haneye tamamlamak için başına sıfır eklenmesi isteniyor.
            string _terminalid = string.Format("{0:000000000}", int.Parse(terminalId));

            //garanti bankasında tutar bilgisinde nokta, virgül gibi değerler istenmiyor. 1.10 TL'lik işlem 110 olarak gönderilmeli. Yani tutarı 100 ile çarpabiliriz.
            string amount = (request.TotalAmount * 100m).ToString("N");//virgülden sonraki sıfırlara gerek yok

            //provizyon şifresi ve 9 haneli terminal numarasının birleşimi ile bir hash oluşturuluyor
            string securityData = GetSHA1($"{cancelUserPassword}{_terminalid}");

            //ilgili veriler birleştirilip hash oluşturuluyor
            string hashstr = GetSHA1($"{request.OrderNumber}{terminalId}{amount}{securityData}");

            string requestXml = $@"<?xml version=""1.0"" encoding=""utf-8""?>
                                        <GVPSRequest>
                                            <Mode>{mode}</Mode>
                                            <Version>v0.01</Version>
                                            <ChannelCode></ChannelCode>
                                            <Terminal>
                                                <ProvUserID>{cancelUserId}</ProvUserID>
                                                <HashData>{hashstr}</HashData>
                                                <UserID>{terminalUserId}</UserID>
                                                <ID>{terminalId}</ID>
                                                <MerchantID>{terminalMerchantId}</MerchantID>
                                            </Terminal>
                                            <Customer>
                                                <IPAddress>{request.CustomerIpAddress}</IPAddress>
                                                <EmailAddress></EmailAddress>
                                            </Customer>
                                            <Order>
                                                <OrderID>{request.OrderNumber}</OrderID>
                                                <GroupID></GroupID>
                                            </Order>
                                            <Transaction>
                                                <Type>void</Type>
                                                <InstallmentCnt>{request.Installment}</InstallmentCnt>
                                                <Amount>{amount}</Amount>
                                                <CurrencyCode>{request.CurrencyIsoCode}</CurrencyCode>
                                                <CardholderPresentCode>0</CardholderPresentCode>
                                                <MotoInd>N</MotoInd>
                                                <OriginalRetrefNum>{request.ReferenceNumber}</OriginalRetrefNum>
                                            </Transaction>
                                        </GVPSRequest>";

            var response = await client.PostAsync(request.BankParameters["verifyUrl"], new StringContent(requestXml, Encoding.UTF8, "text/xml"));

            string responseContent = await response.Content.ReadAsStringAsync();

            var xmlDocument = new XmlDocument();

            xmlDocument.LoadXml(responseContent);

            if (xmlDocument.SelectSingleNode("GVPSResponse/Transaction/Response/ReasonCode") == null ||
                xmlDocument.SelectSingleNode("GVPSResponse/Transaction/Response/ReasonCode").InnerText != "00" ||
                xmlDocument.SelectSingleNode("GVPSResponse/Transaction/Response/ReasonCode").InnerText != "0000")
            {
                string errorMessage = xmlDocument.SelectSingleNode("GVPSResponse/Transaction/Response/ErrorMsg")?.InnerText ?? string.Empty;
                if (string.IsNullOrEmpty(errorMessage))
                {
                    errorMessage = "Bankadan hata mesajı alınamadı.";
                }

                return(CancelPaymentResult.Failed(errorMessage));
            }

            string transactionId = xmlDocument.SelectSingleNode("GVPSResponse/Transaction/RetrefNum")?.InnerText;

            return(CancelPaymentResult.Successed(transactionId, transactionId));
        }