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"]))); }
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"])); }
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"]))); }
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"]))); }
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"]))); }
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)); }
public Task <VerifyGatewayResult> VerifyGateway(VerifyGatewayRequest request, IFormCollection form) { throw new NotImplementedException(); }
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)); }
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)); }
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)); }