ugurterzi / iyzipay

WHMCS Module for iyzico Payment Gateway
MIT License
6 stars 6 forks source link

3D Secure başarısız/iptal olsa bile ödeme başarılı şekilde işleme alınıyor #7

Open corebyte opened 1 year ago

corebyte commented 1 year ago

Modülü geliştirdiğiniz için teşekkür ederiz. Elinize sağlık. 1 hata ve buna bağlı 1 hata daha keşfettik.

3D Secure sayfasından müşteri iptal ederse, ödeme başarılı olmuş gibi işleme alıyorsunuz çünkü CheckoutForm::retrieve ile aldığınız bilgi ile ve sonrasında getStatus() ile "success" dönüyor. Evet, Iyzipay success dönüyor ancak dönen json içerisinde son parametrede paymentStatus FAILURE olarak da geliyor. Sadece ilk success değerine bakmak yanlış sonucu veriyor.

Modules/gateways/callback/Iyizpay.php dosyasında;

if ("success" == $checkoutForm->getStatus() && 1 == $checkoutForm->getFraudStatus() olan satır

if ("success" == $checkoutForm->getStatus() && 1 == $checkoutForm->getFraudStatus() && $checkoutForm->getPaymentStatus() == "SUCCESS") olarak değişmeli

$invoiceId = $checkoutForm->getBasketId(); olan satır

$cbSuccess = false; $invoiceId = $checkoutForm->getBasketId(); satırının altına koyulmalı çünkü hata varsa en sonda yönlendirilen kod $invoiceId bulamadığı için boş geliyor.

elseif ("failure" == $checkoutForm->getStatus() olan satır

elseif ("failure" == $checkoutForm->getStatus() || $checkoutForm->getPaymentStatus() == "FAILURE") { olarak değiştirilmeli

Full fixed code: Iyizpay.txt

corebyte commented 1 year ago

$invoiceId = $checkoutForm->getBasketId(); satır değişikliği yaptık, ancak; Gerçekten direkt olarak "failure" gelirse, CheckoutForm::retrive üzerinden basketId her zaman boş dönüyor.

Bu durumda; callback3DSecureRedirect fonksiyonu içerisindeki invoiceId boş yönlendirilince whmcs hata veriyor.

Hızlı çözüm olarak, Modules/gateways/iyzipay/index.php dosyasındaki callbackurl adresinin sonuna invoiceid parametresi vererek dönüşte onu alıyoruz: $request->setCallbackUrl($systemurl . 'modules/gateways/callback/' . $moduleName . '.php?invoiceid=' . $params['invoiceid']);

ugurterzi commented 1 year ago

teşekkür ederiz desteğiniz için, çözüm test edildiyse commit edebiliriz düzenlemeleri.

corebyte commented 1 year ago

teşekkür ederiz desteğiniz için, çözüm test edildiyse commit edebiliriz düzenlemeleri.

Son düzenlemeler ile sorunsuz çalışıyor. Test ortamında sizin de test etmenizde fayda var.

ugurterzi commented 1 year ago

Sanırım bi Pull Requests göndermeniz iyi olur, böylece düzenlemeler için yeni bir branch oluşturabilirsiniz, biz de test eder ve master kodu güncelleriz.

ugurterzi commented 11 months ago

$invoiceId = $checkoutForm->getBasketId(); satır değişikliği yaptık, ancak; Gerçekten direkt olarak "failure" gelirse, CheckoutForm::retrive üzerinden basketId her zaman boş dönüyor.

Bu durumda; callback3DSecureRedirect fonksiyonu içerisindeki invoiceId boş yönlendirilince whmcs hata veriyor.

Hızlı çözüm olarak, Modules/gateways/iyzipay/index.php dosyasındaki callbackurl adresinin sonuna invoiceid parametresi vererek dönüşte onu alıyoruz: $request->setCallbackUrl($systemurl . 'modules/gateways/callback/' . $moduleName . '.php?invoiceid=' . $params['invoiceid']);

Bunu anlamadık, hangi satırda yaptınız bu değişikliği?