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

Web uygulaması hataları. #12

Closed leventsumaksau closed 3 years ago

leventsumaksau commented 3 years ago

Merhabalar. Elinize sağlık.

Sample projesindeki hatalar çok fazla ve işleyişi tam olarak bilmediğim için müdahale edemiyorum. O kısımlar için yapabileceğiniz bir şey var mıdır?

sefacan commented 3 years ago

Merhaba, Yakın zamanda daha gelişmiş bir örnek proje oluşturacağım.

Teşekkürler.

fetullahyldz commented 3 years ago

Merhaba Sadece yapıkredi için çalışmanız varmı

sefacan commented 3 years ago

@fetullahyldz merhaba proje kodları içerisinde Yapikredi entegrasyonu mevcut.

fetullahyldz commented 3 years ago

Evet Denedim Ama Çalışmadı Galiba Sorun Yapı kredi kaynaklı sürekli ip değişiyor ve çok uğraştırıyor.

sefacan commented 3 years ago

Öncelikle local ortamda bankadan alacağınız test bilgileriyle başarılı işlem geçmeniz ve sonrasında canlı bilgilerini bankadan isteyip canlı ortamda 1 liralık gerçek işlem geçin. Tabi canlıya geçerken sunucu ip adresini mutlaka bankaya iletin. Bazı bankalarda ip kısıtlaması varken bazılarında böyle bir sorun yok.

fetullahyldz commented 3 years ago

Localde de ip hatası veriyor ben Nopcommerce için sadece yapı kredi bankası için modül oluşturdum tabi nopcommerce xml serialize etmiyor o yüzden biraz farklı metod denedim ancak sürekli ip hatalı görüştüm banka tarfıyla ordaki destek veren arkaş çok kafa karştıryor. ilerliyemedik bir türlü yapı kredi 3 defa istek yaptırıyor .

fetullahyldz commented 3 years ago

Merhaba Localde Test Etiğimde Hata Alıyorum

System.AggregateException HResult=0x80131500 İleti=One or more errors occurred. (Bilinen böyle bir ana bilgisayar yok) Kaynak=System.Private.CoreLib StackTrace: at System.Threading.Tasks.Task1.GetResultCore(Boolean waitCompletionNotification) in C:\A\1\11\s\src\mscorlib\src\System\Threading\Tasks\future.cs:line 498 at Nop.Plugin.Payments.ThreeDPayment.ThreeDPaymentPaymentProcessor.<ThreeDGatewayRequest>d__16.MoveNext() in C:\Users\Fatih\Desktop\New-NopCommerce_4.10_\Plugins\Nop.Plugin.Payments.ThreeDPayment\ThreeDPaymentPaymentProcessor.cs:line 218 at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() in C:\A\1\11\s\src\mscorlib\src\System\Runtime\ExceptionServices\ExceptionDispatchInfo.cs:line 132 at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) in C:\A\1\11\s\src\mscorlib\src\System\Runtime\CompilerServices\TaskAwaiter.cs:line 155 at System.Runtime.CompilerServices.TaskAwaiter1.GetResult() in C:\A\1\11\s\src\mscorlib\src\System\Runtime\CompilerServices\TaskAwaiter.cs:line 376 at Nop.Plugin.Payments.ThreeDPayment.ThreeDPaymentPaymentProcessor.d__15.MoveNext() in C:\Users\Fatih\Desktop\New-NopCommerce4.10\Plugins\Nop.Plugin.Payments.ThreeDPayment\ThreeDPaymentPaymentProcessor.cs:line 157 at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() in C:\A\1\11\s\src\mscorlib\src\System\Runtime\ExceptionServices\ExceptionDispatchInfo.cs:line 132 at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state) in C:\A\1\11\s\src\mscorlib\shared\System\Threading\ExecutionContext.cs:line 167 at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() in C:\A\1\11\s\src\mscorlib\src\System\Runtime\ExceptionServices\ExceptionDispatchInfo.cs:line 132 at System.Threading.ThreadPoolWorkQueue.Dispatch() in C:\A\1\11\s\src\mscorlib\src\System\Threading\ThreadPool.cs:line 588

İçteki Özel Durum 1: HttpRequestException: Bilinen böyle bir ana bilgisayar yok

İçteki Özel Durum 2: SocketException: Bilinen böyle bir ana bilgisayar yok

sefacan commented 3 years ago

Merhaba, Projede bir bağlantı yapmaya çalışıyor fakat adres geçersiz görünüyor.

fetullahyldz commented 3 years ago

Sizin istek yapınız 3DS' mi. 3DS istek için sanal postn 3Ds tanımımı olmalıdır.

fetullahyldz commented 3 years ago

public string CreatePaymentFormHtml(IDictionary<string, object> parameters, Uri actionUrl, bool appendSubmitScript = true) { if (parameters == null || !parameters.Any()) throw new ArgumentNullException(nameof(parameters));

        if (actionUrl == null)
            throw new ArgumentNullException(nameof(actionUrl));

        var formId = "PaymentForm";
        var formBuilder = new StringBuilder();
        formBuilder.Append($"<form id=\"{formId}\" name=\"{formId}\" action=\"{actionUrl}\" role=\"form\" method=\"POST\">");

        foreach (var parameter in parameters)
        {
            formBuilder.Append($"<input type=\"hidden\" name=\"{parameter.Key}\" value=\"{parameter.Value}\">");
        }

        formBuilder.Append("</form>");

        if (appendSubmitScript)
        {
            var scriptBuilder = new StringBuilder();
            scriptBuilder.Append("<script>");
            scriptBuilder.Append($"document.{formId}.submit();");
            scriptBuilder.Append("</script>");
            formBuilder.Append(scriptBuilder.ToString());
        }

        return formBuilder.ToString();
    }

BURAYA DEBUG ETİĞİMDE DEĞERLER NULL GELİYOR VE O YÜZDEN HATA VERİYOR LÜTFEN BAKARMISINIZ YAPI KREDİ İÇİN

fetullahyldz commented 3 years ago

Merhaba Sonunda Bankaya Giti ancak forum alnında CallbackUrl geri dönmüyor direk sipariş tamamlandı kısmına düşüyor 3d şifre doğrulama ekranı gelmiyor

fetullahyldz commented 3 years ago

var paymentForm = _paymentProviderFactory.CreatePaymentFormHtml(paymentGatewayResult.Parameters, paymentGatewayResult.GatewayUrl); bu kısmda datallar geliyor ancak dediğim gibi CallbackUrl urleyde gitmiyor 3d ekran açılmıyor

sefacan commented 3 years ago

Bazı bankaların test ortamında sms sayfası açılmayıp başarılı sayfasına yönlendirme yapıyor. Bu sebepten dolayı olabilir. Size dönen değerleri kontrol ettiğinizde başarılı ise canlıda da aynı şekilde çalışacak demektir.

fetullahyldz commented 3 years ago

Anladım Yarın Test Edeceğim İp Değiştiği İçin şuan test yapmadım canlıda sms sayfası açılacak yani sms için bankanın ortak sms sayfasınmı gidecek yoksa popup şeklindemi açılacak

fetullahyldz commented 3 years ago

CreatePaymentFormHtml buraya datalar geliyor ama forumu post etmiyor bunun yapan javascriptmi var anlamadım

ouzdev commented 3 years ago

Sanırım javascript var entegrasyon dokumanı içerisinde bu şekilde bir ibare mevcut.

ouzdev commented 3 years ago

Bende Nop Commerce'e Yapı Kredi için eklenti yazacağım sanırım baya bi uğraşacağız.

sefacan commented 3 years ago

Javascript ile ekstra birşey yazmanız gerekmiyor aslında. Sayfa yönlendirmesi yapmak veya Modal olarak açmak sizin tercihiniz.

fetullahyldz commented 3 years ago

Buraya kadar datalar geliyor ama buradan sonra bankaya post işlemi olmuyor 2 haftadır banka ile birlikte işlem yapıyorum her şey tamam ama bankaya gitmiyor.

var ForumPost = CreatePaymentFormHtml(paymentGatewayResult.Parameters, paymentGatewayResult.GatewayUrl); _httpContext.HttpContext.Response.Redirect(ForumPost);

sefacan commented 3 years ago

Html olarak dönen veriyi redirect edemezsiniz. Örnek projeyi incelerseniz, onu model olarak view'a gönderip html olarak sayfaya basıyorum ve formu javascript ile otomatik submit ediyorum.

sefacan commented 3 years ago

@fetullahyldz Aşağıdaki satırları incelemenizi öneririm. PaymentController.cs#L87 ThreeDGate.cshtml#L14

fetullahyldz commented 3 years ago

ThreeDGatewayRequest içinde

string responseContent = await response.Content.ReadAsStringAsync(); burdan sonra benim post complete düşürüyor ama debug etiğimde devam ediyor nasıl çözeğimi anlamdım bir türlü

fetullahyldz commented 3 years ago

string requestXml = $@"<?xml version=""1.0"" encoding=""utf-8""?>

{merchantId} {terminalId} {posnetId} {request.OrderNumber} {amount} {currencyCode} {string.Format("{0:00}", request.Installment)} Sale {request.CardHolderName} {request.CardNumber} {request.ExpireYear}{request.ExpireMonth} {request.CvvCode} "; var httpParameters = new Dictionary(); httpParameters.Add("xmldata", requestXml); var response = await httpClient.PostAsync(request.BankParameters["verifyUrl"], new FormUrlEncodedContent(httpParameters)); string responseContent = await response.Content.ReadAsStringAsync(); Bu kısımda sonra bitiriyor aceba localde olduğu içinmi tam anlamadım burda xml olarak gidiyor await response.Content.ReadAsStringAsync(); dataları alıp https://setmpos.ykb.com/3DSWebService/YKBPaymentService buraya post emem gerekiyor ardından ama dediğim gibi orda bitiryor işlemi
sefacan commented 3 years ago

Örnek projeyi yeniledim ve tam olarka çalışır hale getirdim. Tüm aşamaların daha anlaşılır hale geldiğini düşünüyorum.

srknhcgl commented 3 years ago

örnek projede kredi kartı yapıştırma javascript ile kapatılmış. test işlemini çok uzattığı için kredi kartı no yapıştırma özelliğini açar mısınız?

fetullahyldz commented 3 years ago

Merhaba c# tarafında oluşturulan forum hiddenlar da hmtl head ve body etiketleri oluşturulamamış javascripleri head kısmında oluşturdum o kısmı geçti ancak localde test için yapı kredi gerçekten problem testleri gerçek sunucuda yapmamız gerektiğini söylediler. gerçek ortamda test edeceğim localde https olması lazım bundan dolayıda galiba banka izin vermiyordur. tüm yöntemleri deniyorum

sefacan commented 3 years ago

asp.net core ile geliştirme yapıyorsanız local ortamda ssl kullanabilirsiniz. Projeye bazı değişiklikler yaptım yeni örneği incelemenizi öneririm. Yapıkrediyi de test edebilirsniz.

fetullahyldz commented 3 years ago

Aslında Şöyle ben bunun nopcommerce uyarladım modül yazdım nopcommerce için nop ta ssl yok yeni sürümü incliyeyim teşekür ederim