sefacan / 3DPayment

.NET Core 3.1 ve .NET 5.0 destekli Akbank, İş Bankası, HalkBank, Ziraat Bankası, Türk Ekonomi Bankası(TEB), INGBank, Türkiye Finans, AnadoluBank, HSBC, Deniz Bank, QNB Finansbank, Garanti Bankası, Kuveyt Türk, Yapı Kredi ve Vakıfbank Sanal Entegrasyonları. Destek: fsefacan@gmail.com
Apache License 2.0
182 stars 47 forks source link

Posnet Yapıkredi Sorunu #21

Closed fetullahyldz closed 2 years ago

fetullahyldz commented 3 years ago

Merhaba Test etiğimde gerçek ortam bilgileri ile yapıkredi için hata var ve şöyle ThreeDGatewayRequest kısmında datalar gidiyor ancak ilk xml post edildiğinde aşağıdaki gibi orda işlemi bitiriyor ikinci post ksımına gitmiyor. yani CreatePaymentFormHtml bu kısıma gitmiyor burda formu alıp tekrar post etmesi gerekiyor. 3d olarak ama hiç gimiyor.

httpParameters.Add("xmldata", requestXml);

            HttpResponseMessage response = await httpClient.PostAsync(request.BankParameters["verifyUrl"], new FormUrlEncodedContent(httpParameters));
            string responseContent = await response.Content.ReadAsStringAsync();
sefacan commented 3 years ago

Merhaba, Debug ederek işlem nerede kalıyor ve oradaki cevap ne dönüyor bakmanız gerek.

fetullahyldz commented 3 years ago

O kısmı çözdüm nopcommercede farklı olduğu için farklı şekilde çözdüm 3d ekranı açıldı telefona kod geldi ve calbackurl sayfasına düştü ancak orda bir hata aldım forum üzerinden gelen verileri nasıl decrypt etmem gerekiyor.

bu arada sorunu aşağıdaki gibi çözdüm

Dictionary<string, string> httpParameters = new Dictionary<string, string>();
            httpParameters.Add("xmldata", requestXml);
            var content = new FormUrlEncodedContent(httpParameters);
            var response = httpClient.PostAsync(_ThreeDPaymentPaymentSettings.VerifyUrl, content);
            string responseContent = response.Result.Content.ReadAsStringAsync().Result;
fetullahyldz commented 3 years ago

Callback(IFormCollection form) burda gelen forum değeri aşağıdaki gibi atıyorum ama orda hata veriyor.

var order = _orderService.GetOrderById(Convert.ToInt32(form["Xid"]));

fetullahyldz commented 3 years ago

Callback Bu şekilde geri dönüş sayfası bankadan forum ile değerler geliyor ancak form["xid"]; buda hata veriyor. ben bunu nopcommerce için entegre ediyorum yardımcı olursanız sevinirim

public IActionResult Callback(IFormCollection form) { var OrderId = form["xid"]; var order = _orderService.GetOrderById(Convert.ToInt32(Decrypt(OrderId)));

        var GetForum = form;
        VerifyGatewayResult verifyResult = VerifyGateway(GetForum); 
        verifyResult.OrderNumber = order.OrderGuid.ToString();

        if (verifyResult.Success)
        {
            order.AuthorizationTransactionId = form["posnetResponse"];
            order.PaymentStatusId = 30;
            order.OrderStatusId = 20;
            _orderService.UpdateOrder(order);
            return RedirectToRoute("CheckoutCompleted", new { orderId = order });
        }

        PosErrorModel model = new PosErrorModel();
        var toostds = form["posnetResponse"];
        string str = form["txnStatus"];
        model.StrRespText = toostds;
        model.StrtdsStatus = str;
        return base.View("~/Plugins/Payments.ThreeDPayment/Views/PosError.cshtml", order);
    }
fetullahyldz commented 3 years ago

Sorunu Çözdüm Sonunda ama bu sefer bir hata var bankadan dönen hata aşağıdaki gibi bankaya yazdım

"<?xml version='1.0' encoding='iso-8859-9'?>0E216Mac Doğrulama hatalı"

sefacan commented 3 years ago

Sorunun çözümü ile ilgili yapmamız gerektiğini düşündüğün bir düzeltme varsa pull request gönderebilirsin veya burada bahsedip benim de değişikliği yapmama destek olabilirsin.

fetullahyldz commented 3 years ago

Merhaba VerifyGateway kısmında eksik parametre var mac bilgisi istiyorlar şifreli aşağıdaki gibi herşey çalıştı ancak bir sorun var bankaya ödeme düşmüyor. bankaya gönderdim kodyapısını inceliyorlar ama kendilerinde sorun var gibi halen dönüş yapmadılar.

string firstHash = HASH(encKey + ';' + terminalId); string MAC = HASH(xid + ';' + amount + ';' + currency + ';' + merchantId + ';' + firstHash);

        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>
                                        <mac>{MAC}</mac> 
                                    </oosResolveMerchantData>
                                </posnetRequest>";

Burdada Bankadan Dönen Değerler aşağıdaki gibi

"<?xml version='1.0' encoding='iso-8859-9'?>1204TL00wwwwwwwwwwwwwwwwww5400Y1AuthenticatedsFW7mgE6NFaUJjxPUN7N5odGw98+oXH/JjOyleRX7us="

fetullahyldz commented 3 years ago

"<?xml version='1.0' encoding='iso-8859-9'?><posnetResponse><approved>1</approved><respCode /><respText /><oosResolveMerchantDataResponse><amount>204</amount><currency>TL</currency><installment>00</installment><xid>wwwwwwwwwwwwwwwwww54</xid><point>0</point><pointAmount>0</pointAmount><txStatus>Y</txStatus><mdStatus>1</mdStatus><mdErrorMessage>Authenticated</mdErrorMessage><mac>sFW7mgE6NFaUJjxPUN7N5odGw98+oXH/JjOyleRX7us=</mac></oosResolveMerchantDataResponse></posnetResponse>"

fetullahyldz commented 3 years ago

https://www.yapikredipos.com.tr/_assets/pdf/sanal-pos-entegrasyon-dokumanlari/POSNET-3D-Secure-Integration-Tr.pdf burdaki pdf te baktım herşey doğru ama en sonda 15 sayfada Finansallaştırma var orası sizin kod kısında yok bi bakarmısınız oraya

fetullahyldz commented 3 years ago

Sorunu çözdüm ve çalıştı bankaya ödeme düştü

sefacan commented 3 years ago

ne gibi değişiklikler yaptınız?

fetullahyldz commented 3 years ago

Merhaba Müsait olunca Yazacağım Değişiklikleri

Hmtasln commented 2 years ago

fetullahyldz finansallaşma sorununu nasıl çözdünüz ?

ahmetkocadogan commented 2 years ago

@sefacan

0E216Mac Doğrulama hatalı hatası şu sebepten olabiliyor.

Eğer çekilen tutar kuruşlu bir tutarsa, ve kuruşun sonu 0 ise, örneğin 1000,20 TL, bu hatayı alıyoruz. Eğer 1000,21 çekersen sorun olmuyor. API'dan dönen tutar değerini MAC hesabına eklerken bir sorun olabilir. İşlemin tüm API isteklerinde kullanılan/gönderilen tutar değerinin aynı olmadığı durumda bu yaşanabiliyor.

Belki birilerine yardımcı olur.

mrthanbrr commented 2 years ago

bende tam sayılı ödemelerde de aynı hatayı alıyorum.

ahmetkocadogan @.***>, 27 Haz 2022 Pzt, 10:50 tarihinde şunu yazdı:

@sefacan https://github.com/sefacan

0E216Mac Doğrulama hatalı hatası şu sebepten olabiliyor.

Eğer çekilen tutar kuruşlu bir tutarsa, ve kuruşun sonu 0 ise, örneğin 1000,20 TL, bu hatayı alıyoruz. Eğer 1000,21 çekersen sorun olmuyor. API'dan dönen tutar değerini MAC hesabına eklerken bir sorun olabilir. İşlemin tüm API isteklerinde kullanılan/gönderilen tutar değerinin aynı olmadığı durumda bu yaşanabiliyor.

Belki birilerine yardımcı olur.

— Reply to this email directly, view it on GitHub https://github.com/sefacan/3DPayment/issues/21#issuecomment-1167005923, or unsubscribe https://github.com/notifications/unsubscribe-auth/ABQCZ5CMIHM2HHQXAA4P5QDVRFMLRANCNFSM4VZG5XUQ . You are receiving this because you are subscribed to this thread.Message ID: @.***>

--

[image: metin, küçük resim içeren bir resim Açıklama otomatik olarak oluşturuldu]

Murat BİRER

Yönetim Bilişim Sistemleri Uzmanı

TANRIVERDI TEKSTIL SAN. VE PAZ. A.Ş. | Member Of Tanrıverdi Holding A.Ş.

Mobil: +90 546 599 02 10 | Ofis: 444 7 134 | Fax: +90 212 514 81 67

Etiler Mahallesi, Etiler Sok. No:2 34337 Beşiktaş, İSTANBUL

http://verdihome.com/ | https://tanriverdi.com/

[image: signature_4287678944]

Bu mesajı yazdırmadan önce çevreye olan sorumluluğumuzu bir kez daha düşünelim. Please consider the environment before printing this e-mail.

ahmetkocadogan commented 2 years ago

@mrthanbrr MAC hesabını yaparken kullanılan parametrelerin her istekte, her oluşturmada aynı olup olmadığını kontrol etmen faydalı olabilir. Sorun herkes için kuruş olmayabilir, bir şekilde sorunun sebebi MAC datasını hatalı oluşturmak, ya da farklı API isteklerinde farklı MAC datası kullanmak gibi duruyor.

mrthanbrr commented 2 years ago

üstadım, bankada ki personelin dediğine göre mac datası uyumsuzlugu varmış. bir de bana diyor ki, sen eski sistemi kullanıyorsun dll lerin olduğu. oysa ki 1 hafta öncesine kadar sorunsuz kullanabiliyordum. ilk şey dedi bana 100 ile çarpma gerek yok "amount" değerini. zaten 2 sayfada tamamlanıyor butun ödeme. Bana bir pdf dökümanı attı entegrasyon için, örnek kod falan yok. şaştım kaldım, çok sıkıntıya girdim. tek çalışıyorum başıma bela oldu.

ahmetkocadogan @.***>, 27 Haz 2022 Pzt, 10:58 tarihinde şunu yazdı:

@mrthanbrr https://github.com/mrthanbrr MAC hesabını yaparken kullanılan parametrelerin her istekte, her oluşturmada aynı olup olmadığını kontrol etmen faydalı olabilir. Sorun herkes için kuruş olmayabilir, bir şekilde sorunun sebebi MAC datasını hatalı oluşturmak, ya da farklı API isteklerinde farklı MAC datası kullanmak gibi duruyor.

— Reply to this email directly, view it on GitHub https://github.com/sefacan/3DPayment/issues/21#issuecomment-1167013320, or unsubscribe https://github.com/notifications/unsubscribe-auth/ABQCZ5CMDV5OYQB57CPJHFDVRFNKPANCNFSM4VZG5XUQ . You are receiving this because you were mentioned.Message ID: @.***>

--

[image: metin, küçük resim içeren bir resim Açıklama otomatik olarak oluşturuldu]

Murat BİRER

Yönetim Bilişim Sistemleri Uzmanı

TANRIVERDI TEKSTIL SAN. VE PAZ. A.Ş. | Member Of Tanrıverdi Holding A.Ş.

Mobil: +90 546 599 02 10 | Ofis: 444 7 134 | Fax: +90 212 514 81 67

Etiler Mahallesi, Etiler Sok. No:2 34337 Beşiktaş, İSTANBUL

http://verdihome.com/ | https://tanriverdi.com/

[image: signature_4287678944]

Bu mesajı yazdırmadan önce çevreye olan sorumluluğumuzu bir kez daha düşünelim. Please consider the environment before printing this e-mail.

fetullahyldz commented 2 years ago

public async Task ThreeDGatewayRequest(PaymentGatewayRequest request) { string merchantId = _ThreeDPaymentPaymentSettings.MerchantID; string terminalId = _ThreeDPaymentPaymentSettings.TerminalID; string posnetId = _ThreeDPaymentPaymentSettings.PosnetID; var httpClient = new HttpClient(); try { //yapıkredi bankasında tutar bilgisinde nokta, virgül gibi değerler istenmiyor. 1.10 TL'lik işlem 110 olarak gönderilmeli. Yani tutarı 100 ile çarpabiliriz.

            string amount = Math.Round(request.TotalAmount, 2).ToString().Replace(",", string.Empty).Replace(".", string.Empty);
            string currencyCode = "TL";//yapıkredi halen eski Türk lirası kodunu kullanıyor

            string requestXml = $@"<?xml version=""1.0"" encoding=""utf-8""?>
                                    <posnetRequest>
                                        <mid>{merchantId}</mid>
                                        <tid>{terminalId}</tid>
                                        <oosRequestData>
                                            <posnetid>{posnetId}</posnetid>
                                            <XID>{request.OrderNumber}</XID>
                                            <amount>{amount}</amount>
                                            <currencyCode>{currencyCode}</currencyCode>
                                            <installment>{string.Format("{0:00}", request.Installment)}</installment>
                                            <tranType>Sale</tranType>
                                            <cardHolderName>{request.CardHolderName}</cardHolderName>
                                            <ccno>{request.CardNumber}</ccno>
                                            <expDate>{request.ExpireYear}{request.ExpireMonth}</expDate>
                                            <cvc>{request.CvvCode}</cvc>
                                        </oosRequestData>
                                    </posnetRequest>";

            var httpParameters = new Dictionary<string, string>();
            httpParameters.Add("xmldata", requestXml);

            var response = await httpClient.PostAsync(request.BankParameters["verifyUrl"], new FormUrlEncodedContent(httpParameters));
            response.EnsureSuccessStatusCode();
            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")
            {
                string errorMessage = xmlDocument.SelectSingleNode("posnetResponse/respText")?.InnerText ?? string.Empty;
                if (string.IsNullOrEmpty(errorMessage))
                    errorMessage = "Bankadan hata mesajı alınamadı.";

                return PaymentGatewayResult.Failed(errorMessage);
            }

            var data1Node = xmlDocument.SelectSingleNode("posnetResponse/oosRequestDataResponse/data1");
            var data2Node = xmlDocument.SelectSingleNode("posnetResponse/oosRequestDataResponse/data2");
            var signNode = xmlDocument.SelectSingleNode("posnetResponse/oosRequestDataResponse/sign");

            var parameters = new Dictionary<string, object>();
            parameters.Add("posnetData", data1Node.InnerText);
            parameters.Add("posnetData2", data2Node.InnerText);
            parameters.Add("digest", signNode.InnerText);

            parameters.Add("mid", merchantId);
            parameters.Add("posnetID", posnetId);

            //Vade Farklı işlemler için kullanılacak olan kampanya kodunu belirler.
            //Üye İşyeri için tanımlı olan kampanya kodu, İşyeri Yönetici Ekranlarına giriş yapıldıktan sonra, Üye İşyeri bilgileri sayfasından öğrenilebilinir.
            parameters.Add("vftCode", string.Empty);

            parameters.Add("merchantReturnURL", request.CallbackUrl);//geri dönüş adresi
            parameters.Add("lang", request.LanguageIsoCode);
            parameters.Add("url", string.Empty);//openANewWindow 1 olarak ayarlanırsa buraya gidilecek url verilmeli
            parameters.Add("openANewWindow", "0");//POST edilecek formun yeni bir sayfaya mı yoksa mevcut sayfayı mı yönlendirileceği
            parameters.Add("useJokerVadaa", "1");//yapıkredi kartlarında vadaa kullanılabilirse izin verir

            return PaymentGatewayResult.Successed(parameters, request.BankParameters["gatewayUrl"]);
        }
        catch (Exception ex)
        {
            return PaymentGatewayResult.Failed(ex.ToString());
        }
    }
fetullahyldz commented 2 years ago
    var paymentGatewayResult = await ThreeDGatewayRequest(new PaymentGatewayRequest
            {
                CardHolderName = CardHolderName,
                CardNumber = CardNumber,
                ExpireMonth = ExpireMonth,
                ExpireYear = Convert.ToInt32(ExpireYear),
                CvvCode = CvvCode,
                Installment = Convert.ToInt32(Installment),
                TotalAmount = Convert.ToDecimal(totalAmount),
                LanguageIsoCode = LanguageIsoCode,
                CardType = "1",
                OrderNumber = OrderId,
                BankName = BankNames.Yapikredi,
                CallbackUrl = CallbackUrl,
                BankParameters = TestParameters //canli ortam bilgileri veritabanından gelecek
            });

            if (paymentGatewayResult.Success)
            {
                var ForumPost = CreatePaymentFormHtml(paymentGatewayResult.Parameters, paymentGatewayResult.GatewayUrl);
                _httpContext.HttpContext.Response.Redirect(ForumPost);
            }
            else
            {
                string CallbackUrlError = storeLocation + "Plugins/PaymentThreeDPayment/PosError";
                _httpContext.HttpContext.Response.Redirect(CallbackUrlError);
            }
fetullahyldz commented 2 years ago

public async Task Callback(IFormCollection form) {

        var order = _orderService.GetOrderById(Convert.ToInt32(form["Xid"]));

        if (HttpContext.Session.TryGetValue(PaymentSessionName, out byte[] paymentInfo))
            return base.View("~/Plugins/Payments.ThreeDPayment/Views/PosError.cshtml", order);

        var paymentModel = JsonConvert.DeserializeObject<PaymentViewModel>(paymentInfo.ToString());
        if (paymentModel == null)
            return base.View("~/Plugins/Payments.ThreeDPayment/Views/PosError.cshtml", order);

        //clear payment info session
        HttpContext.Session.Remove(PaymentSessionName);

        var verifyGatewayResult = await VerifyGateway(new VerifyGatewayRequest
        {

        }, form);

        HttpContext.Session.Set(PaymentResultSessionName, JsonConvert.SerializeObject(verifyGatewayResult));

        if (verifyGatewayResult.Success)
        {
            order.AuthorizationTransactionId = form["posnetResponse"];
            order.PaymentStatusId = 30;
            order.OrderStatusId = 20;
            _orderService.UpdateOrder(order);
            return RedirectToRoute("CheckoutCompleted", new { orderId = order });
        }

        PosErrorModel model = new PosErrorModel();
        var toostds = form["posnetResponse"];
        string str = form["txnStatus"];
        model.StrRespText = toostds;
        model.StrtdsStatus = str;
        return base.View("~/Plugins/Payments.ThreeDPayment/Views/PosError.cshtml", order);
    }
fetullahyldz commented 2 years ago
public async Task<VerifyGatewayResult> VerifyGateway(VerifyGatewayRequest request, 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 httpClient = new HttpClient();
        var response = await httpClient.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);
        }

        return VerifyGatewayResult.Successed(form["HostLogKey"], $"{form["HostLogKey"]}-{form["AuthCode"]}",
            int.Parse(form["InstalmentNumber"]),
            xmlDocument.SelectSingleNode("posnetResponse/respText")?.InnerText,
            form["ApprovedCode"]);
    }
fetullahyldz commented 2 years ago

Merhaba Arkadaşlar Ben bu şekilde çözmüştüm Burdaki Kodlara Bakabilirsiniz Yapıkredi Bankası 2 kez istekte bulunmanızı istiyor ödemenin tamalnması için

sefacan commented 2 years ago

Selamlar, destek için teşekkürler bu kodlarda yaptığınız düzenleme için pull request açabilir misiniz. Github reponun da güncel kalması için.

On Mon, Jul 4, 2022, 5:59 PM Fatih Yıldız @.***> wrote:

Merhaba Arkadaşlar Ben bu şekilde çözmüştüm Burdaki Kodlara Bakabilirsiniz Yapıkredi Bankası 2 kez istekte bulunmanızı istiyor ödemenin tamalnması için

— Reply to this email directly, view it on GitHub https://github.com/sefacan/3DPayment/issues/21#issuecomment-1173913660, or unsubscribe https://github.com/notifications/unsubscribe-auth/AB4QUGGJPGRTG3E33K4WZ63VSL34RANCNFSM4VZG5XUQ . You are receiving this because you were mentioned.Message ID: @.***>

mrthanbrr commented 2 years ago

Bu sayfadan ResultPage e mi yonlendirme yapıyorduk üstadım.

4 Tem 2022 Pzt 17:58 tarihinde Fatih Yıldız @.***> şunu yazdı:

public async Task VerifyGateway(VerifyGatewayRequest request, 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 httpClient = new HttpClient();

    var response = await httpClient.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);

    }

    return VerifyGatewayResult.Successed(form["HostLogKey"], $"{form["HostLogKey"]}-{form["AuthCode"]}",

        int.Parse(form["InstalmentNumber"]),

        xmlDocument.SelectSingleNode("posnetResponse/respText")?.InnerText,

        form["ApprovedCode"]);

}

— Reply to this email directly, view it on GitHub https://github.com/sefacan/3DPayment/issues/21#issuecomment-1173912698, or unsubscribe https://github.com/notifications/unsubscribe-auth/ABQCZ5FEE3Q4JQUYHZ3YDD3VSL3YLANCNFSM4VZG5XUQ . You are receiving this because you were mentioned.Message ID: @.***>