Ejemplo n.º 1
0
        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));
        }
Ejemplo n.º 2
0
        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));
        }
Ejemplo n.º 3
0
        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"]));
        }
Ejemplo n.º 4
0
        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));
        }
Ejemplo n.º 5
0
        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));
        }