Esempio n. 1
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));
        }
Esempio n. 2
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));
        }
        public PaymentDetailResponse PaymentDetail(PaymentDetailRequest request)
        {
            if (request == null)
            {
                throw new ArgumentNullException("request");
            }

            return(SendGetRequest <PaymentDetailRequest, PaymentDetailResponse>(request, "PaymentDetail"));
        }
        public PaymentDetailResponse PaymentDetail(string merchantTransactionID)
        {
            if (merchantTransactionID == null)
            {
                throw new ArgumentNullException("merchantTransactionID");
            }

            var request = new PaymentDetailRequest
            {
                MerchantTransactionID = merchantTransactionID
            };

            return(PaymentDetail(request));
        }
        public async Task <HttpResponseMessage> SavePaymentDetail(PaymentDetailRequest paymentDetailsRequest)
        {
            httpResponseMessage = new HttpResponseMessage();
            if (paymentDetailsRequest != null && ModelState.IsValid)
            {
                var paymentDetailsResponse = await _IAccountService.SavePaymentDetail(paymentDetailsRequest);

                httpResponseMessage = Request.CreateResponse(HttpStatusCode.OK, paymentDetailsResponse);
            }
            else
            {
                httpResponseMessage = Request.CreateResponse(HttpStatusCode.OK, new { Message = CustomErrorMessages.INVALID_INPUTS, Success = false });
            }
            return(httpResponseMessage);
        }
Esempio n. 6
0
        public PaymentDetailResponse RequestTabPayment(PaymentDetailRequest paymentDetailRequest)
        {
            try
            {
                using (var client = new HttpClient(_httpClientHandler))
                {
                    client.BaseAddress = new Uri(string.Format("http://{0}:{1}/", _baseAddress, _port));
                    client.DefaultRequestHeaders.Accept.Clear();
                    client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

                    var methodAddress = string.Format("{0}/Actions/RequestTabPayment?clippTabRef={1}&amount={2}&clippMessageId={3}",
                                                      ClippAddress, Guid.Parse(paymentDetailRequest.ClippTabRef), paymentDetailRequest.Amount,
                                                      Guid.Parse(paymentDetailRequest.ClippMessageId));

                    var response = client.PostAsync(methodAddress, null);

                    response.Wait();
                    var result = response.Result;

                    if (result.IsSuccessStatusCode)
                    {
                        var paymentDetailTask = result.Content.ReadAsStringAsync();
                        paymentDetailTask.Wait();

                        var jsonSerializer = new DataContractJsonSerializer(typeof(PaymentDetailResponse));
                        var memoryStream   = new MemoryStream(Encoding.ASCII.GetBytes(paymentDetailTask.Result));

                        var paymentDetail = (PaymentDetailResponse)jsonSerializer.ReadObject(memoryStream);

                        return(paymentDetail);
                    }
                }
            }
            catch (Exception exception)
            {
                ServiceLogger.LogException("Exception in RequestTabPayment", exception);
            }
            return(null);
        }
        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"]));
        }
Esempio n. 8
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));
        }
Esempio n. 9
0
 public Task <PaymentDetailResult> PaymentDetailRequest(PaymentDetailRequest request)
 {
     throw new NotImplementedException();
 }
Esempio n. 10
0
 public async Task <SavePaymentReponse> SavePaymentDetail(PaymentDetailRequest paymentDetailsRequest)
 {
     return(await _IAccountRepository.SavePaymentDetail(paymentDetailsRequest));
 }
Esempio n. 11
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));
        }