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

Yapı kredi Bankası Çekimde #11

Closed sebahattinkoc closed 4 years ago

sebahattinkoc commented 4 years ago

System.ArgumentException: 'ISO-8859-9' is not a supported encoding name. For information on defining a custom encoding, see the documentation for the Encoding.RegisterProvider method. (Parameter 'name')

uyarısı alıyorum.

Banka dökümanında

Servis Genel Yapısı Posnet XML servisi, posnet işyerlerinin XML dokümanları göndererek posnet işlemi yapmalarını sağlayan bir servistir. İşyeri sistemlerinin ortam değişkeni olan <%XML_SERVICE_URL%> adresine (test ortamı: https://setmpos.ykb.com/PosnetWebService/XML) oluşturdukları xml dokümanını UTF8 URL Encode ile encode ettikten sonra “xmldata” parametresinde Content-Type=application/xwww-form-urlencoded; charset=utf-8 ile POST etmesi gerekmektedir. İşlem sonucu yine bir XML dokümanı olarak işyerine dönülür.

Yardımcı olabilirmisiniz ? tşk.ler

sefacan commented 4 years ago

Merhaba,

Encoding'i şu şekilde kullanabilirsiniz.

System.Text.Encoding.GetEncoding("ISO-8859-9").GetBytes(hashstr)

sebahattinkoc commented 4 years ago

şu şekilde yaptım

VakifbankPaymentProvider.cs

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

Ekledim var data = new StringContent("xmldata="+requestXml, System.Text.Encoding.UTF8, "application/json");

Kaldırdım var response = client.PostAsync(requestUrl, new FormUrlEncodedContent(httpParameters)).GetAwaiter().GetResult();

Ekledim var response = client.PostAsync(requestUrl, data).GetAwaiter().GetResult();

sefacan commented 4 years ago

Merhaba, Islemi pull request olarak gönderirseniz projeye dahil edelim katkınızı.

sebahattinkoc commented 4 years ago

üstat son halini gönderirim, tam çalışır hale getirince.

ayrıca PaymentController 'de

public IActionResult ThreeDGate() {

//Eskisi /if (HttpContext.Session.TryGetValue(PaymentSessionName, out byte[] paymentInfo)) return RedirectToAction(nameof(Index));/

//Yenisi, ! ekledim if (!HttpContext.Session.TryGetValue(PaymentSessionName, out byte[] paymentInfo)) return RedirectToAction(nameof(Index));

....

sefacan commented 4 years ago

Teşekkürler gördüğüm kadarıyla sample tarafında bayağı sorunlarımız mevcut :)

sebahattinkoc commented 4 years ago

sefa bey ilginize tşk.ler, üzerinde çalışıyorum, takıldığım yerlerde sizi yoracağım.

sebahattinkoc commented 4 years ago

public IActionResult Callback(IFormCollection form)

işleminde sanırım kendi sitemizden ayrılıp banka ödeme sayfasından döndüğümüzde Session'da tuttuğumuz veriler siliniyor! alttaki blokta paymentInfo null oluyor .

Session'daki verilerin silinmemesi bir yöntem varmıdır? tşk.

       **if (!HttpContext.Session.TryGetValue(PaymentSessionName, out byte[] paymentInfo))
            return RedirectToAction(nameof(Index));**

        var paymentModel = JsonSerializer.Deserialize<PaymentViewModel>(paymentInfo);
        if (paymentModel == null)
            return RedirectToAction(nameof(Index));
sefacan commented 4 years ago

Merhaba, Bunun için Cookie SameSite Policy'ye bakmalısınız. Chrome, firefox ve edge yakın zamandaki bir sürümde bu konuda bazı düzenlemeler yaptılar.

sebahattinkoc commented 4 years ago

tşk.ler.

gokhanercan commented 4 years ago

Selamlar. Nisan'da Chrome SameSite policy'yi değiştirdi. Diğer browser'larda çalışıyorsa ondandır. SessionId'yi tutan cookie'yi SameSite=None yapacak bir update yapmanız gerekir kullandığınız versiyona göre.

sebahattinkoc commented 4 years ago

xml verisini iletmek için yukarıda değişiklikten bahsetmiştim, bankaya göndermiyormuş!

alttaki şekilde XML verisini yollayabiliyorum, ilgelenen arkadaşların işine yarayabilir.

string requestUrl = "https://setmpos.ykb.com/PosnetWebService/XML"; requestUrl += "?xmldata=" + requestXml;

string responseContent="";

HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(requestUrl); webRequest.Method = "POST"; webRequest.ContentType = "application/x-www-form-urlencoded; charset=utf-8";

            using (HttpWebResponse response = (HttpWebResponse)webRequest.GetResponse())
            {

                if (response.StatusCode != HttpStatusCode.OK)
                {
                   responseContent = String.Format("Server error (HTTP {0}: {1}).", response.StatusCode, response.StatusDescription); 

                }
                else
                {
                    System.IO.StreamReader sr = new System.IO.StreamReader(response.GetResponseStream());

                    responseContent = sr.ReadToEnd().Trim();
                }

            }

üst bloktaki gönderim şeklini alttaki koda uyarlamaya çalıştım olmadı! üstad uyarlayabilirseniz hoş olur, tşk.

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

var response = client.PostAsync(requestUrl, new FormUrlEncodedContent(httpParameters)).GetAwaiter().GetResult();

sefacan commented 4 years ago

Selam, Bu tarz çözümlerinizi pull request olarak gönderirseniz katkı sağlamış ve aynı sorunu başkalarının yaşamasının önüne geçmiş olursunuz. Hep birlikte geliştirip sanal pos konularındaki belirsizlikleri ve sürekli yaşanan sorunları çözmek adına open-source olarak bu repoyu oluşturdum.