public async Task <PaymentDetailResult> PaymentDetailRequest(PaymentDetailRequest request) { string merchantId = request.BankParameters["merchantId"]; string terminalId = request.BankParameters["terminalId"]; string requestXml = $@"<?xml version=""1.0"" encoding=""utf-8""?> <posnetRequest> <mid>{merchantId}</mid> <tid>{terminalId}</tid> <agreement> <orderID>TDSC{request.OrderNumber}</orderID> </agreement> </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); string bankMessage = xmlDocument.SelectSingleNode("posnetResponse/respText")?.InnerText; string responseCode = xmlDocument.SelectSingleNode("posnetResponse/respCode")?.InnerText; string approved = xmlDocument.SelectSingleNode("posnetResponse/approved")?.InnerText ?? string.Empty; if (!approved.Equals("1")) { if (string.IsNullOrEmpty(bankMessage)) { bankMessage = "Bankadan hata mesajı alınamadı."; } return(PaymentDetailResult.FailedResult(errorMessage: bankMessage, errorCode: responseCode)); } string finalStatus = xmlDocument.SelectSingleNode("posnetResponse/transactions/transaction/state")?.InnerText ?? string.Empty; if (!finalStatus.Equals("SALE", StringComparison.OrdinalIgnoreCase)) { if (string.IsNullOrEmpty(bankMessage)) { bankMessage = "Bankadan hata mesajı alınamadı."; } return(PaymentDetailResult.FailedResult(errorMessage: bankMessage, errorCode: responseCode)); } string transactionId = xmlDocument.SelectSingleNode("posnetResponse/transactions/transaction/hostLogKey")?.InnerText; string referenceNumber = xmlDocument.SelectSingleNode("posnetResponse/transactions/transaction/hostLogKey")?.InnerText; string authCode = xmlDocument.SelectSingleNode("posnetResponse/transactions/transaction/authCode")?.InnerText; string cardPrefix = xmlDocument.SelectSingleNode("posnetResponse/transactions/transaction/ccno")?.InnerText; return(PaymentDetailResult.PaidResult(transactionId, $"{referenceNumber}-{authCode}", cardPrefix, bankMessage: bankMessage, responseCode: responseCode)); }
public async Task <PaymentDetailResult> PaymentDetailRequest(PaymentDetailRequest request) { string clientId = request.BankParameters["clientId"]; string userName = request.BankParameters["userName"]; string password = request.BankParameters["password"]; string requestXml = $@"<?xml version=""1.0"" encoding=""utf-8""?> <CC5Request> <Name>{userName}</Name> <Password>{password}</Password> <ClientId>{clientId}</ClientId> <OrderId>{request.OrderNumber}</OrderId> <Extra> <ORDERDETAIL>QUERY</ORDERDETAIL> </Extra> </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); string finalStatus = xmlDocument.SelectSingleNode("CC5Response/Extra/ORDER_FINAL_STATUS")?.InnerText ?? string.Empty; string transactionId = xmlDocument.SelectSingleNode("CC5Response/Extra/TRX_1_TRAN_UID")?.InnerText; string referenceNumber = xmlDocument.SelectSingleNode("CC5Response/Extra/TRX_1_TRAN_UID")?.InnerText; string cardPrefix = xmlDocument.SelectSingleNode("CC5Response/Extra/TRX_1_CARDBIN")?.InnerText; int.TryParse(cardPrefix, out int cardPrefixValue); string installment = xmlDocument.SelectSingleNode("CC5Response/Extra/TRX_1_INSTALMENT")?.InnerText ?? "0"; string bankMessage = xmlDocument.SelectSingleNode("CC5Response/Response")?.InnerText; string responseCode = xmlDocument.SelectSingleNode("CC5Response/ProcReturnCode")?.InnerText; if (finalStatus.Equals("SALE", StringComparison.OrdinalIgnoreCase)) { int.TryParse(installment, out int installmentValue); return(PaymentDetailResult.PaidResult(transactionId, referenceNumber, cardPrefixValue.ToString(), installmentValue, 0, bankMessage, responseCode)); } else if (finalStatus.Equals("VOID", StringComparison.OrdinalIgnoreCase)) { return(PaymentDetailResult.CanceledResult(transactionId, referenceNumber, bankMessage, responseCode)); } else if (finalStatus.Equals("REFUND", StringComparison.OrdinalIgnoreCase)) { return(PaymentDetailResult.RefundedResult(transactionId, referenceNumber, bankMessage, responseCode)); } var errorMessage = xmlDocument.SelectSingleNode("CC5Response/ErrMsg")?.InnerText ?? string.Empty; if (string.IsNullOrEmpty(errorMessage)) { errorMessage = "Bankadan hata mesajı alınamadı."; } return(PaymentDetailResult.FailedResult(errorMessage: errorMessage)); }
public async Task <PaymentDetailResult> PaymentDetailRequest(PaymentDetailRequest request) { string shopCode = request.BankParameters["shopCode"]; string userCode = request.BankParameters["userCode"]; string userPass = request.BankParameters["userPass"]; var formBuilder = new StringBuilder(); formBuilder.AppendFormat("ShopCode={0}&", shopCode); formBuilder.AppendFormat("Currency={0}&", request.CurrencyIsoCode); formBuilder.Append("TxnType=StatusHistory&"); 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()); 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(PaymentDetailResult.FailedResult(errorMessage: "İade işlemi başarısız.")); } responseContent = responseContent.Replace(";;", ";").Replace(";", "&"); var responseParams = HttpUtility.ParseQueryString(responseContent); if (responseParams["ProcReturnCode"] != "00") { return(PaymentDetailResult.FailedResult(errorMessage: responseParams["ErrorMessage"], errorCode: responseParams["ErrorCode"])); } return(PaymentDetailResult.PaidResult(responseParams["TransId"], responseParams["TransId"])); }
public async Task <PaymentDetailResult> PaymentDetailRequest(PaymentDetailRequest request) { string terminalUserId = request.BankParameters["terminalUserId"]; string terminalId = request.BankParameters["terminalId"]; string terminalMerchantId = request.BankParameters["terminalMerchantId"]; string terminalProvUserId = request.BankParameters["terminalProvUserId"]; string terminalProvPassword = request.BankParameters["terminalProvPassword"]; string mode = request.BankParameters["mode"];//PROD | TEST //garanti terminal numarasını 9 haneye tamamlamak için başına sıfır eklenmesini istiyor. string _terminalid = string.Format("{0:000000000}", int.Parse(terminalId)); //provizyon şifresi ve 9 haneli terminal numarasının birleşimi ile bir hash oluşturuluyor string securityData = GetSHA1($"{terminalProvPassword}{_terminalid}"); string amount = "100";//sabit 100 gönderin dediler. Yani 1 TL. //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 /> <Terminal> <ProvUserID>{terminalProvUserId}</ProvUserID> <HashData>{hashstr}</HashData> <UserID>{terminalUserId}</UserID> <ID>{terminalId}</ID> <MerchantID>{terminalMerchantId}</MerchantID> </Terminal> <Customer> <IPAddress>{request.CustomerIpAddress}</IPAddress> <EmailAddress></EmailAddress> </Customer> <Card> <Number /> <ExpireDate /> <CVV2 /> </Card> <Order> <OrderID>{request.OrderNumber}</OrderID> <GroupID /> </Order> <Transaction> <Type>orderinq</Type> <InstallmentCnt /> <Amount>{amount}</Amount> <CurrencyCode>{request.CurrencyIsoCode}</CurrencyCode> <CardholderPresentCode>0</CardholderPresentCode> <MotoInd>N</MotoInd> </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); string finalStatus = xmlDocument.SelectSingleNode("GVPSResponse/Order/OrderInqResult/Status")?.InnerText ?? string.Empty; string transactionId = xmlDocument.SelectSingleNode("GVPSResponse/Transaction/RetrefNum")?.InnerText; string referenceNumber = xmlDocument.SelectSingleNode("GVPSResponse/Transaction/RetrefNum")?.InnerText; string cardPrefix = xmlDocument.SelectSingleNode("GVPSResponse/Order/OrderInqResult/CardNumberMasked")?.InnerText; string installment = xmlDocument.SelectSingleNode("GVPSResponse/Order/OrderInqResult/InstallmentCnt")?.InnerText ?? "0"; string bankMessage = xmlDocument.SelectSingleNode("GVPSResponse/Transaction/Response/Message")?.InnerText; string responseCode = xmlDocument.SelectSingleNode("GVPSResponse/Transaction/Response/ReasonCode")?.InnerText; if (finalStatus.Equals("APPROVED", StringComparison.OrdinalIgnoreCase)) { return(PaymentDetailResult.PaidResult(transactionId, referenceNumber, cardPrefix, int.Parse(installment), 0, bankMessage, responseCode)); } else if (finalStatus.Equals("VOID", StringComparison.OrdinalIgnoreCase)) { return(PaymentDetailResult.CanceledResult(transactionId, referenceNumber, bankMessage, responseCode)); } else if (finalStatus.Equals("REFUNDED", StringComparison.OrdinalIgnoreCase)) { return(PaymentDetailResult.RefundedResult(transactionId, referenceNumber, bankMessage, responseCode)); } var bankErrorMessage = xmlDocument.SelectSingleNode("GVPSResponse/Transaction/Response/SysErrMsg")?.InnerText ?? string.Empty; var errorMessage = xmlDocument.SelectSingleNode("GVPSResponse/Transaction/Response/ErrorMsg")?.InnerText ?? string.Empty; if (string.IsNullOrEmpty(errorMessage)) { errorMessage = "Bankadan hata mesajı alınamadı."; } return(PaymentDetailResult.FailedResult(bankErrorMessage, responseCode, errorMessage)); }
public async Task <PaymentDetailResult> PaymentDetailRequest(PaymentDetailRequest request) { string merchantId = request.BankParameters["merchantId"]; string merchantPassword = request.BankParameters["merchantPassword"]; var startDate = request.PaidDate.AddDays(-1).ToString("yyyy-MM-dd"); var endDate = request.PaidDate.AddDays(1).ToString("yyyy-MM-dd"); string requestXml = $@"<?xml version=""1.0"" encoding=""utf-8""?> <SearchRequest> <MerchantCriteria> <HostMerchantId>{merchantId}</HostMerchantId> <MerchantPassword>{merchantPassword}</MerchantPassword> </MerchantCriteria> <DateCriteria> <StartDate>{startDate}</StartDate> <EndDate>{endDate}</EndDate> </DateCriteria> <TransactionCriteria> <TransactionId>{request.TransactionId}</TransactionId> <OrderId>{request.OrderNumber}</OrderId> <AuthCode /> </TransactionCriteria> </SearchRequest>"; 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 totalItemCount = int.Parse(xmlDocument.SelectSingleNode("SearchResponse/PagedResponseInfo/TotalItemCount").InnerText); if (totalItemCount < 1) { string errorMessage = xmlDocument.SelectSingleNode("SearchResponse/ResponseInfo/ResponseMessage").InnerText; if (string.IsNullOrEmpty(errorMessage)) { errorMessage = "Bankadan hata mesajı alınamadı."; } return(PaymentDetailResult.FailedResult(errorMessage)); } var transactionInfoNode = xmlDocument.SelectNodes("SearchResponse/TransactionSearchResultInfo/TransactionSearchResultInfo") .Cast <XmlNode>() .FirstOrDefault(); if (transactionInfoNode == null) { string errorMessage = xmlDocument.SelectSingleNode("SearchResponse/ResponseInfo/ResponseMessage").InnerText; if (string.IsNullOrEmpty(errorMessage)) { errorMessage = "Bankadan hata mesajı alınamadı."; } return(PaymentDetailResult.FailedResult(errorMessage)); } string transactionId = transactionInfoNode.SelectSingleNode("TransactionId")?.InnerText; string referenceNumber = transactionInfoNode.SelectSingleNode("TransactionId")?.InnerText; string cardPrefix = transactionInfoNode.SelectSingleNode("PanMasked")?.InnerText; string bankMessage = transactionInfoNode.SelectSingleNode("ResponseMessage")?.InnerText; string responseCode = transactionInfoNode.SelectSingleNode("ResultCode")?.InnerText; var canceled = bool.Parse(transactionInfoNode.SelectSingleNode("IsCanceled")?.InnerText ?? "false"); if (canceled) { return(PaymentDetailResult.CanceledResult(transactionId, referenceNumber, bankMessage, responseCode)); } var refunded = bool.Parse(transactionInfoNode.SelectSingleNode("IsRefunded")?.InnerText ?? "false"); if (refunded) { return(PaymentDetailResult.RefundedResult(transactionId, referenceNumber, bankMessage, responseCode)); } if (responseCode == "0000") { return(PaymentDetailResult.PaidResult(transactionId, referenceNumber, cardPrefix, bankMessage: bankMessage, responseCode: responseCode)); } if (string.IsNullOrEmpty(bankMessage)) { bankMessage = "Bankadan hata mesajı alınamadı."; } return(PaymentDetailResult.FailedResult(errorMessage: bankMessage, errorCode: responseCode)); }