Open corebyte opened 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']);
teşekkür ederiz desteğiniz için, çözüm test edildiyse commit edebiliriz düzenlemeleri.
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.
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.
$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?
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ırif ("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ırelseif ("failure" == $checkoutForm->getStatus() || $checkoutForm->getPaymentStatus() == "FAILURE") {
olarak değiştirilmeliFull fixed code: Iyizpay.txt