public Task <VerifyGatewayResult> VerifyGateway(VerifyGatewayRequest request, PaymentGatewayRequest gatewayRequest, IFormCollection form)
        {
            if (form == null)
            {
                return(Task.FromResult(VerifyGatewayResult.Failed("Form verisi alınamadı.")));
            }

            string mdStatus = form["mdstatus"].ToString();

            if (string.IsNullOrEmpty(mdStatus))
            {
                return(Task.FromResult(VerifyGatewayResult.Failed(form["mderrormessage"], form["procreturncode"])));
            }

            StringValues response = form["response"];

            //mdstatus 1,2,3 veya 4 olursa 3D doğrulama geçildi anlamına geliyor
            if (!mdStatusCodes.Contains(mdStatus))
            {
                return(Task.FromResult(VerifyGatewayResult.Failed($"{response} - {form["mderrormessage"]}", form["procreturncode"])));
            }

            if (StringValues.IsNullOrEmpty(response) || !response.Equals("Approved"))
            {
                return(Task.FromResult(VerifyGatewayResult.Failed($"{response} - {form["errmsg"]}", form["procreturncode"])));
            }

            int.TryParse(form["txninstallmentcount"], out int installment);

            return(Task.FromResult(VerifyGatewayResult.Successed(form["transid"], form["hostrefnum"],
                                                                 installment, 0, response,
                                                                 form["procreturncode"], form["campaignchooselink"])));
        }
        public Task <VerifyGatewayResult> VerifyGateway(VerifyGatewayRequest request, IFormCollection form)
        {
            if (form == null)
            {
                return(Task.FromResult(VerifyGatewayResult.Failed("Form verisi alınamadı.")));
            }

            var mdStatus = form["mdStatus"];

            if (StringValues.IsNullOrEmpty(mdStatus))
            {
                return(Task.FromResult(VerifyGatewayResult.Failed(form["mdErrorMsg"], form["ProcReturnCode"])));
            }

            var response = form["Response"];

            //mdstatus 1,2,3 veya 4 olursa 3D doğrulama geçildi anlamına geliyor
            if (!mdStatus.Equals("1") || !mdStatus.Equals("2") || !mdStatus.Equals("3") || !mdStatus.Equals("4"))
            {
                return(Task.FromResult(VerifyGatewayResult.Failed($"{response} - {form["mdErrorMsg"]}", form["ProcReturnCode"])));
            }

            if (StringValues.IsNullOrEmpty(response) || !response.Equals("Approved"))
            {
                return(Task.FromResult(VerifyGatewayResult.Failed($"{response} - {form["ErrorMessage"]}", form["ProcReturnCode"])));
            }

            return(Task.FromResult(VerifyGatewayResult.Successed(form["TransId"], form["TransId"],
                                                                 int.Parse(form["taksitsayisi"]), response,
                                                                 form["ProcReturnCode"])));
        }
Пример #3
0
        public async Task <VerifyGatewayResult> VerifyGateway(VerifyGatewayRequest request, PaymentGatewayRequest gatewayRequest, IFormCollection form)
        {
            if (form == null)
            {
                return(VerifyGatewayResult.Failed("Form verisi alınamadı."));
            }

            if (!form.ContainsKey("BankPacket") || !form.ContainsKey("MerchantPacket") || !form.ContainsKey("Sign"))
            {
                return(VerifyGatewayResult.Failed("Form verisi alınamadı."));
            }

            var merchantId = request.BankParameters["merchantId"];
            var terminalId = request.BankParameters["terminalId"];

            string requestXml = $@"<?xml version=""1.0"" encoding=""utf-8""?>
                                    <posnetRequest>
                                        <mid>{merchantId}</mid>
                                        <tid>{terminalId}</tid>
                                        <oosResolveMerchantData>
                                            <bankData>{form["BankPacket"]}</bankData>
                                            <merchantData>{form["MerchantPacket"]}</merchantData>
                                            <sign>{form["Sign"]}</sign>
                                        </oosResolveMerchantData>
                                    </posnetRequest>";

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

            httpParameters.Add("xmldata", requestXml);

            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" ||
                xmlDocument.SelectSingleNode("posnetResponse/approved").InnerText != "2")
            {
                string errorMessage = "3D doğrulama başarısız.";
                if (xmlDocument.SelectSingleNode("posnetResponse/respText") != null)
                {
                    errorMessage = xmlDocument.SelectSingleNode("posnetResponse/respText").InnerText;
                }

                return(VerifyGatewayResult.Failed(errorMessage, form["ApprovedCode"],
                                                  xmlDocument.SelectSingleNode("posnetResponse/approved").InnerText));
            }

            int.TryParse(form["InstalmentNumber"], out int instalmentNumber);

            return(VerifyGatewayResult.Successed(form["HostLogKey"], $"{form["HostLogKey"]}-{form["AuthCode"]}",
                                                 instalmentNumber, 0,
                                                 xmlDocument.SelectSingleNode("posnetResponse/respText")?.InnerText,
                                                 form["ApprovedCode"]));
        }
Пример #4
0
        public Task <VerifyGatewayResult> VerifyGateway(VerifyGatewayRequest request, PaymentGatewayRequest gatewayRequest, IFormCollection form)
        {
            if (form == null)
            {
                return(Task.FromResult(VerifyGatewayResult.Failed("Form verisi alınamadı.")));
            }

            string mdStatus = form["mdStatus"].ToString();

            if (string.IsNullOrEmpty(mdStatus))
            {
                return(Task.FromResult(VerifyGatewayResult.Failed(form["mdErrorMsg"], form["ProcReturnCode"])));
            }

            string response = form["Response"].ToString();

            //mdstatus 1,2,3 veya 4 olursa 3D doğrulama geçildi anlamına geliyor
            if (!mdStatusCodes.Contains(mdStatus))
            {
                return(Task.FromResult(VerifyGatewayResult.Failed($"{response} - {form["mdErrorMsg"]}", form["ProcReturnCode"])));
            }

            if (string.IsNullOrEmpty(response) || !response.Equals("Approved"))
            {
                return(Task.FromResult(VerifyGatewayResult.Failed($"{response} - {form["ErrMsg"]}", form["ProcReturnCode"])));
            }

            StringBuilder hashBuilder = new StringBuilder();

            hashBuilder.Append(request.BankParameters["clientId"]);
            hashBuilder.Append(form["oid"].FirstOrDefault());
            hashBuilder.Append(form["AuthCode"].FirstOrDefault());
            hashBuilder.Append(form["ProcReturnCode"].FirstOrDefault());
            hashBuilder.Append(form["Response"].FirstOrDefault());
            hashBuilder.Append(form["mdStatus"].FirstOrDefault());
            hashBuilder.Append(form["cavv"].FirstOrDefault());
            hashBuilder.Append(form["eci"].FirstOrDefault());
            hashBuilder.Append(form["md"].FirstOrDefault());
            hashBuilder.Append(form["rnd"].FirstOrDefault());
            hashBuilder.Append(request.BankParameters["storeKey"]);

            SHA1CryptoServiceProvider cryptoServiceProvider = new SHA1CryptoServiceProvider();

            byte[] inputbytes = cryptoServiceProvider.ComputeHash(Encoding.UTF8.GetBytes(hashBuilder.ToString()));
            string hashData   = Convert.ToBase64String(inputbytes);

            if (!form["HASH"].Equals(hashData))
            {
                return(Task.FromResult(VerifyGatewayResult.Failed("Güvenlik imza doğrulaması geçersiz.")));
            }

            int.TryParse(form["taksit"], out int installment);
            int.TryParse(form["EXTRA.HOSTMSG"], out int extraInstallment);

            return(Task.FromResult(VerifyGatewayResult.Successed(form["TransId"], form["TransId"],
                                                                 installment, extraInstallment,
                                                                 response, form["ProcReturnCode"])));
        }
Пример #5
0
        public Task <VerifyGatewayResult> VerifyGateway(VerifyGatewayRequest request, PaymentGatewayRequest gatewayRequest, IFormCollection form)
        {
            if (form == null)
            {
                return(Task.FromResult(VerifyGatewayResult.Failed("Form verisi alınamadı.")));
            }

            var mdStatus = form["mdStatus"];

            if (StringValues.IsNullOrEmpty(mdStatus))
            {
                return(Task.FromResult(VerifyGatewayResult.Failed(form["mdErrorMsg"], form["ProcReturnCode"])));
            }

            var response = form["Response"];

            //mdstatus 1,2,3 veya 4 olursa 3D doğrulama geçildi anlamına geliyor
            if (!mdStatus.Equals("1") || !mdStatus.Equals("2") || !mdStatus.Equals("3") || !mdStatus.Equals("4"))
            {
                return(Task.FromResult(VerifyGatewayResult.Failed($"{response} - {form["mdErrorMsg"]}", form["ProcReturnCode"])));
            }

            if (StringValues.IsNullOrEmpty(response) || !response.Equals("Approved"))
            {
                return(Task.FromResult(VerifyGatewayResult.Failed($"{response} - {form["ErrorMessage"]}", form["ProcReturnCode"])));
            }

            var hashBuilder = new StringBuilder();

            hashBuilder.Append(request.BankParameters["shopCode"]);
            hashBuilder.Append(form["Version"].FirstOrDefault());
            hashBuilder.Append(form["PurchAmount"].FirstOrDefault());
            hashBuilder.Append(form["Exponent"].FirstOrDefault());
            hashBuilder.Append(form["Currency"].FirstOrDefault());
            hashBuilder.Append(form["OkUrl"].FirstOrDefault());
            hashBuilder.Append(form["FailUrl"].FirstOrDefault());
            hashBuilder.Append(form["MD"].FirstOrDefault());
            hashBuilder.Append(form["OrderId"].FirstOrDefault());
            hashBuilder.Append(form["ProcReturnCode"].FirstOrDefault());
            hashBuilder.Append(form["Response"].FirstOrDefault());
            hashBuilder.Append(form["mdStatus"].FirstOrDefault());
            hashBuilder.Append(request.BankParameters["storeKey"]);

            var hashData = GetSHA1(hashBuilder.ToString());

            if (!form["HASH"].Equals(hashData))
            {
                return(Task.FromResult(VerifyGatewayResult.Failed("Güvenlik imza doğrulaması geçersiz.")));
            }

            int.TryParse(form["taksitsayisi"], out int taksitSayisi);
            int.TryParse(form["EXTRA.ARTITAKSIT"], out int extraTaksitSayisi);

            return(Task.FromResult(VerifyGatewayResult.Successed(form["TransId"], form["TransId"],
                                                                 taksitSayisi, extraTaksitSayisi,
                                                                 response, form["ProcReturnCode"])));
        }
        public Task <VerifyGatewayResult> VerifyGateway(VerifyGatewayRequest request, PaymentGatewayRequest gatewayRequest, IFormCollection form)
        {
            if (form == null)
            {
                return(Task.FromResult(VerifyGatewayResult.Failed("Form verisi alınamadı.")));
            }

            var mdStatus = form["mdstatus"].ToString();

            if (string.IsNullOrEmpty(mdStatus))
            {
                return(Task.FromResult(VerifyGatewayResult.Failed(form["mderrormessage"], form["procreturncode"])));
            }

            var response = form["response"];

            //mdstatus 1,2,3 veya 4 olursa 3D doğrulama geçildi anlamına geliyor
            if (!mdStatusCodes.Contains(mdStatus))
            {
                return(Task.FromResult(VerifyGatewayResult.Failed($"{response} - {form["mderrormessage"]}", form["procreturncode"])));
            }

            if (StringValues.IsNullOrEmpty(response) || !response.Equals("Approved"))
            {
                return(Task.FromResult(VerifyGatewayResult.Failed($"{response} - {form["errmsg"]}", form["procreturncode"])));
            }

            var hashBuilder = new StringBuilder();

            hashBuilder.Append(form["clientid"].FirstOrDefault());
            hashBuilder.Append(form["oid"].FirstOrDefault());
            hashBuilder.Append(form["authcode"].FirstOrDefault());
            hashBuilder.Append(form["procreturncode"].FirstOrDefault());
            hashBuilder.Append(form["response"].FirstOrDefault());
            hashBuilder.Append(form["mdstatus"].FirstOrDefault());
            hashBuilder.Append(form["cavv"].FirstOrDefault());
            hashBuilder.Append(form["eci"].FirstOrDefault());
            hashBuilder.Append(form["md"].FirstOrDefault());
            hashBuilder.Append(form["rnd"].FirstOrDefault());
            hashBuilder.Append(request.BankParameters["storeKey"]);

            var cryptoServiceProvider = new SHA1CryptoServiceProvider();
            var inputbytes            = cryptoServiceProvider.ComputeHash(Encoding.GetEncoding("ISO-8859-9").GetBytes(hashBuilder.ToString()));
            var hashData = Convert.ToBase64String(inputbytes);

            if (!form["HASH"].Equals(hashData))
            {
                return(Task.FromResult(VerifyGatewayResult.Failed("Güvenlik imza doğrulaması geçersiz.")));
            }

            int.TryParse(form["txninstallmentcount"], out int installment);

            return(Task.FromResult(VerifyGatewayResult.Successed(form["transid"], form["hostrefnum"],
                                                                 installment, 0, response,
                                                                 form["procreturncode"], form["campaignchooselink"])));
        }
Пример #7
0
        public Task <VerifyGatewayResult> VerifyGateway(VerifyGatewayRequest request, IFormCollection form)
        {
            if (form == null)
            {
                return(Task.FromResult(VerifyGatewayResult.Failed("Form verisi alınamadı.")));
            }

            string        clientId    = request.BankParameters["clientId"];
            string        storeKey    = request.BankParameters["storeKey"];
            StringBuilder hashBuilder = new StringBuilder();

            hashBuilder.Append(clientId);
            hashBuilder.Append(form["oid"]);
            hashBuilder.Append(form["AuthCode"]);
            hashBuilder.Append(form["ProcReturnCode"]);
            hashBuilder.Append(form["Response"]);
            hashBuilder.Append(form["mdStatus"]);
            hashBuilder.Append(form["cavv"]);
            hashBuilder.Append(form["eci"]);
            hashBuilder.Append(form["md"]);
            hashBuilder.Append(form["rnd"]);
            hashBuilder.Append(storeKey);

            var cryptoServiceProvider = new SHA1CryptoServiceProvider();
            var inputbytes            = cryptoServiceProvider.ComputeHash(Encoding.UTF8.GetBytes(hashBuilder.ToString()));
            var hashData = Convert.ToBase64String(inputbytes);

            if (form["HASH"] != hashData)
            {
                return(Task.FromResult(VerifyGatewayResult.Failed("Invalid verification request")));
            }

            var mdStatus = form["mdStatus"];

            if (StringValues.IsNullOrEmpty(mdStatus))
            {
                return(Task.FromResult(VerifyGatewayResult.Failed(form["mdErrorMsg"], form["ProcReturnCode"])));
            }

            var response = form["Response"];

            //mdstatus 1,2,3 veya 4 olursa 3D doğrulama geçildi anlamına geliyor
            if (!mdStatus.Equals("1") || !mdStatus.Equals("2") || !mdStatus.Equals("3") || !mdStatus.Equals("4"))
            {
                return(Task.FromResult(VerifyGatewayResult.Failed($"{response} - {form["mdErrorMsg"]}", form["ProcReturnCode"])));
            }

            if (StringValues.IsNullOrEmpty(response) || !response.Equals("Approved"))
            {
                return(Task.FromResult(VerifyGatewayResult.Failed($"{response} - {form["ErrMsg"]}", form["ProcReturnCode"])));
            }

            return(Task.FromResult(VerifyGatewayResult.Successed(form["TransId"], form["TransId"],
                                                                 int.Parse(form["taksit"]), response,
                                                                 form["ProcReturnCode"])));
        }
Пример #8
0
        public async Task <IActionResult> Callback(Guid paymentId, IFormCollection form)
        {
            if (paymentId == Guid.Empty)
            {
                VerifyGatewayResult failModel = VerifyGatewayResult.Failed("Ödeme bilgisi geçersiz.");
                return(View("Fail", failModel));
            }

            //get transaction by identifier
            PaymentTransaction payment = await _paymentService.GetByOrderNumber(paymentId);

            if (payment == null)
            {
                VerifyGatewayResult failModel = VerifyGatewayResult.Failed("Ödeme bilgisi geçersiz.");
                return(View("Fail", failModel));
            }

            PaymentGatewayRequest bankRequest = JsonConvert.DeserializeObject <PaymentGatewayRequest>(payment.BankRequest);

            if (bankRequest == null)
            {
                VerifyGatewayResult failModel = VerifyGatewayResult.Failed("Ödeme bilgisi geçersiz.");
                return(View("Fail", failModel));
            }

            //create provider
            IPaymentProvider     provider      = _paymentProviderFactory.Create(bankRequest.BankName);
            VerifyGatewayRequest verifyRequest = new VerifyGatewayRequest
            {
                BankName       = bankRequest.BankName,
                BankParameters = bankRequest.BankParameters
            };

            VerifyGatewayResult verifyResult = await provider.VerifyGateway(verifyRequest, bankRequest, form);

            verifyResult.OrderNumber = bankRequest.OrderNumber;

            //save bank response
            payment.BankResponse = JsonConvert.SerializeObject(new
            {
                verifyResult,
                parameters = form.Keys.ToDictionary(key => key, value => form[value].ToString())
            });

            payment.TransactionNumber = verifyResult.TransactionId;
            payment.ReferenceNumber   = verifyResult.ReferenceNumber;
            payment.BankResponse      = verifyResult.Message;

            if (verifyResult.Installment > 1)
            {
                payment.Installment = verifyResult.Installment;
            }

            if (verifyResult.ExtraInstallment > 1)
            {
                payment.ExtraInstallment = verifyResult.ExtraInstallment;
            }

            if (verifyResult.Success)
            {
                //mark as paid
                payment.MarkAsPaid(DateTime.Now);
                await _paymentService.Update(payment);

                return(View("Success", verifyResult));
            }

            //mark as not failed(it's mean error)
            payment.MarkAsFailed(verifyResult.ErrorMessage, $"{verifyResult.Message} - {verifyResult.ErrorCode}");

            //update payment transaction
            await _paymentService.Update(payment);

            return(View("Fail", verifyResult));
        }
Пример #9
0
 public Task <VerifyGatewayResult> VerifyGateway(VerifyGatewayRequest request, IFormCollection form)
 {
     throw new NotImplementedException();
 }
Пример #10
0
        public async Task <VerifyGatewayResult> VerifyGateway(VerifyGatewayRequest request, PaymentGatewayRequest gatewayRequest, IFormCollection form)
        {
            if (form == null)
            {
                return(VerifyGatewayResult.Failed("Form verisi alınamadı."));
            }

            var authenticationResponse = form["AuthenticationResponse"].ToString();

            if (string.IsNullOrEmpty(authenticationResponse))
            {
                return(VerifyGatewayResult.Failed("Form verisi alınamadı."));
            }

            authenticationResponse = HttpUtility.UrlDecode(authenticationResponse);
            var serializer = new XmlSerializer(typeof(VPosTransactionResponseContract));

            var model = new VPosTransactionResponseContract();

            using (var ms = new MemoryStream(Encoding.UTF8.GetBytes(authenticationResponse)))
            {
                model = serializer.Deserialize(ms) as VPosTransactionResponseContract;
            }

            if (model.ResponseCode != "00")
            {
                return(VerifyGatewayResult.Failed(model.ResponseMessage, model.ResponseCode));
            }

            var merchantOrderId = model.MerchantOrderId;
            var amount          = model.VPosMessage.Amount;
            var mD         = model.MD;
            var merchantId = request.BankParameters["merchantId"];
            var customerId = request.BankParameters["customerNumber"];
            var userName   = request.BankParameters["userName"];
            var password   = request.BankParameters["password"];

            //Hash some data in one string result
            var cryptoServiceProvider = new SHA1CryptoServiceProvider();
            var hashedPassword        = Convert.ToBase64String(cryptoServiceProvider.ComputeHash(Encoding.UTF8.GetBytes(password)));

            //merchantId, merchantOrderId, amount, userName, hashedPassword
            var hashstr    = $"{merchantId}{merchantOrderId}{amount}{userName}{hashedPassword}";
            var hashbytes  = Encoding.GetEncoding("ISO-8859-9").GetBytes(hashstr);
            var inputbytes = cryptoServiceProvider.ComputeHash(hashbytes);
            var hashData   = Convert.ToBase64String(inputbytes);

            var requestXml = $@"<KuveytTurkVPosMessage
                    xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
                    xmlns:xsd='http://www.w3.org/2001/XMLSchema'>
                        <APIVersion>1.0.0</APIVersion>
                        <HashData>{hashData}</HashData>
                        <MerchantId>{merchantId}</MerchantId>
                        <CustomerId>{customerId}</CustomerId>
                        <UserName>{userName}</UserName>
                        <CurrencyCode>0949</CurrencyCode>
                        <TransactionType>Sale</TransactionType>
                        <InstallmentCount>0</InstallmentCount>
                        <Amount>{amount}</Amount>
                        <MerchantOrderId>{merchantOrderId}</MerchantOrderId>
                        <TransactionSecurity>3</TransactionSecurity>
                        <KuveytTurkVPosAdditionalData>
                        <AdditionalData>
                        <Key>MD</Key>
                        <Data>{mD}</Data>
                        </AdditionalData>
                        </KuveytTurkVPosAdditionalData>
                        </KuveytTurkVPosMessage>";

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

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

            responseContent = HttpUtility.UrlDecode(responseContent);

            using (var ms = new MemoryStream(Encoding.UTF8.GetBytes(responseContent)))
            {
                model = serializer.Deserialize(ms) as VPosTransactionResponseContract;
            }

            if (model.ResponseCode == "00")
            {
                return(VerifyGatewayResult.Successed(model.OrderId.ToString(), model.OrderId.ToString(),
                                                     0, 0, model.ResponseMessage,
                                                     model.ResponseCode));
            }

            return(VerifyGatewayResult.Failed(model.ResponseMessage, model.ResponseCode));
        }
Пример #11
0
        public async Task <VerifyGatewayResult> VerifyGateway(VerifyGatewayRequest request, IFormCollection form)
        {
            if (form == null)
            {
                return(VerifyGatewayResult.Failed("Form verisi alınamadı."));
            }

            var status = form["Status"];

            if (StringValues.IsNullOrEmpty(status))
            {
                return(VerifyGatewayResult.Failed("İşlem sonuç bilgisi alınamadı."));
            }

            if (status != "Y")
            {
                string errorMessage = "3D doğrulama başarısız";
                if (ErrorCodes.ContainsKey(form["ErrorCode"]))
                {
                    errorMessage = ErrorCodes[form["ErrorCode"]];
                }

                return(VerifyGatewayResult.Failed(errorMessage, form["ErrorCode"], status));
            }

            string requestXml = $@"<?xml version=""1.0"" encoding=""utf-8""?>
                                        <VposRequest>
                                        <MerchantId>{ form["MerchantId"]}</MerchantId>
                                        <Password>{ form["get724_merchant_password"]}</Password>
                                        <TerminalNo>{ form["get724_user_name"]}</TerminalNo>
                                        <Pan>{ form["Pan"]}</Pan>
                                        <Expiry>{ form["expire_date"]}</Expiry>
                                        <CurrencyAmount>{ form["amount"]}</CurrencyAmount>
                                        <CurrencyCode>{ form["PurchCurrency"]}</CurrencyCode>
                                        <TransactionType>Sale</TransactionType>
                                        <TransactionId></TransactionId>";

            //boş veya 0 olan taksit bilgisini gönderme
            if (int.TryParse(form["InstallmentCount"], out int installment) && installment > 0)
            {
                requestXml += $"<NumberOfInstallments>{installment}</NumberOfInstallments>";
            }

            requestXml += $@"<CardHoldersName>{form["card_holders_name"]}</CardHoldersName>
                                        <Cvv>{form["cv2"]}</Cvv>
                                        <ECI>{form["Eci"]}</ECI>
                                        <CAVV>{form["CAVV"]}</CAVV>
                                        <MpiTransactionId>{form["VerifyEnrollmentRequestId"]}</MpiTransactionId>
                                        <OrderId>{form["VerifyEnrollmentRequestId"]}</OrderId>
                                        <ClientIp>{_httpContextAccessor.HttpContext.Connection.RemoteIpAddress}</ClientIp>
                                        <TransactionDeviceSource>0</TransactionDeviceSource>
                                        </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);
            var resultCodeNode   = xmlDocument.SelectSingleNode("VposResponse/ResultCode");
            var resultDetailNode = xmlDocument.SelectSingleNode("VposResponse/ResultDetail");
            var transactionNode  = xmlDocument.SelectSingleNode("VposResponse/TransactionId");

            if (resultCodeNode.InnerText != "0000")
            {
                string errorMessage = resultDetailNode.InnerText;
                if (ErrorCodes.ContainsKey(resultCodeNode.InnerText))
                {
                    errorMessage = ErrorCodes[resultCodeNode.InnerText];
                }

                return(VerifyGatewayResult.Failed(errorMessage, resultCodeNode.InnerText, status));
            }

            return(VerifyGatewayResult.Successed(transactionNode.InnerText, form["Xid"],
                                                 int.Parse(form["InstallmentCount"]),
                                                 resultDetailNode.InnerText,
                                                 resultCodeNode.InnerText));
        }
Пример #12
0
        public async Task <VerifyGatewayResult> VerifyGateway(VerifyGatewayRequest request, PaymentGatewayRequest gatewayRequest, IFormCollection form)
        {
            if (form == null)
            {
                return(VerifyGatewayResult.Failed("Form verisi alınamadı."));
            }

            var status = form["Status"].ToString();

            if (string.IsNullOrEmpty(status))
            {
                return(VerifyGatewayResult.Failed("İşlem sonuç bilgisi alınamadı."));
            }

            if (!status.Equals("Y"))
            {
                string errorMessage = "3D doğrulama başarısız";
                if (ErrorCodes.ContainsKey(form["ErrorCode"]))
                {
                    errorMessage = ErrorCodes[form["ErrorCode"]];
                }

                return(VerifyGatewayResult.Failed(errorMessage, form["ErrorCode"], status));
            }

            string merchantId       = request.BankParameters["merchantId"];
            string merchantPassword = request.BankParameters["merchantPassword"];
            string terminalNo       = request.BankParameters["terminalNo"];
            var    expireMonth      = string.Format("{0:00}", gatewayRequest.ExpireMonth);
            var    expireYear       = CultureInfo.CurrentCulture.Calendar.ToFourDigitYear(gatewayRequest.ExpireYear);
            var    totalAmount      = gatewayRequest.TotalAmount.ToString("N2", new CultureInfo("en-US"));

            var xmlBuilder = new StringBuilder();

            xmlBuilder.Append($@"<?xml version=""1.0"" encoding=""utf-8""?>
                                    <VposRequest>
                                        <MerchantId>{merchantId}</MerchantId>
                                        <Password>{merchantPassword}</Password>
                                        <TerminalNo>{terminalNo}</TerminalNo>
                                        <Pan>{gatewayRequest.CardNumber}</Pan>
                                        <Expiry>{expireYear}{expireMonth}</Expiry>
                                        <CurrencyAmount>{totalAmount}</CurrencyAmount>
                                        <CurrencyCode>{form["PurchCurrency"]}</CurrencyCode>
                                        <TransactionId></TransactionId>");

            //boş veya 0 ise taksit bilgisini gönderme
            if (int.TryParse(form["InstallmentCount"], out int installment) && installment > 1)
            {
                if (request.ManufacturerCard)
                {
                    xmlBuilder.Append($@"<TransactionType>TKSale</TransactionType>
                                         <CustomInstallments>
                                            <MaturityPeriod>{installment}</MaturityPeriod>
                                            <Frequency>{installment}</Frequency>
                                         </CustomInstallments>");
                }
                else
                {
                    xmlBuilder.Append($@"<TransactionType>Sale</TransactionType>
                                         <NumberOfInstallments>{installment}</NumberOfInstallments>");
                }
            }
            else
            {
                xmlBuilder.Append($@"<TransactionType>Sale</TransactionType>");
            }

            xmlBuilder.Append($@" <CardHoldersName>{form["card_holders_name"]}</CardHoldersName>
                                 <Cvv>{gatewayRequest.CvvCode}</Cvv>
                                 <ECI>{form["Eci"]}</ECI>
                                 <CAVV>{form["CAVV"]}</CAVV>
                                 <MpiTransactionId>{form["VerifyEnrollmentRequestId"]}</MpiTransactionId>
                                 <OrderId>{form["VerifyEnrollmentRequestId"]}</OrderId>
                                 <ClientIp>{gatewayRequest.CustomerIpAddress}</ClientIp>
                                 <TransactionDeviceSource>0</TransactionDeviceSource>
                             </VposRequest>");

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

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

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

            var xmlDocument = new XmlDocument();

            xmlDocument.LoadXml(responseContent);
            var resultCodeNode   = xmlDocument.SelectSingleNode("VposResponse/ResultCode");
            var resultDetailNode = xmlDocument.SelectSingleNode("VposResponse/ResultDetail");
            var transactionNode  = xmlDocument.SelectSingleNode("VposResponse/TransactionId");

            if (resultCodeNode.InnerText != "0000")
            {
                string errorMessage = resultDetailNode.InnerText;
                if (string.IsNullOrEmpty(errorMessage) && ErrorCodes.ContainsKey(resultCodeNode.InnerText))
                {
                    errorMessage = ErrorCodes[resultCodeNode.InnerText];
                }

                return(VerifyGatewayResult.Failed(errorMessage, resultCodeNode.InnerText, status));
            }

            int.TryParse(form["InstallmentCount"], out int installmentCount);
            int.TryParse(form["EXTRA.ARTITAKSIT"], out int extraInstallment);

            return(VerifyGatewayResult.Successed(transactionNode.InnerText, form["Xid"],
                                                 installmentCount, extraInstallment,
                                                 resultDetailNode.InnerText,
                                                 resultCodeNode.InnerText));
        }