• 06-10-2016, 16:44:03
    #1
    merhaba şimdi ode.php dosyama ürün adeti ve taksit sayısını post ediyorum çok güzel ama 3d şifre girme sonrası sayfaya geri dönüyor ve 3d doğrulama fonksiyonunu çalıştırıyor. bu fonksiyonda fiyatın olması gerekiyor ama urun miktarı post edilmediği için fiyat 0 oluyor doğrulama yapılamıyor. ben de 3d öncesi fiyatı bir sessiona aktarıp sonra doğrulama için kullanmak istedim ama fonksiyon içinde session çalışmıyor sanırım ne yapabilirim?
    public function confirmThreeDPayment()
        {
            print("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">");
            print("<html>");
            print("<body><div style=\"width:350px;margin:0 auto;\">");
    
            date_default_timezone_set('Europe/Istanbul');
    
            $obj = new iParaPayment();
    
            $response = array();
    
            $obj->private_key = $this->private_key;
            $obj->public_key = $this->public_key;
    
            try {
                // iPara nin gonderdigi 3D Secure sonuc bilgileri request bilgisinden alinir
                $response = $obj->getThreeDResponse($_POST);
                if ($response['result'] != 1) {
                    print "<span style=\"font-weight:bold\">ÖDEME İŞLEMİNİZ BAŞARISIZ</span>";
                    return;
                }
            } catch (Exception $e) {
                print "<span style=\"font-weight:bold\">ÖDEME İŞLEMİNİZ BAŞARISIZ</span>";
                print '</br>' . $e->getMessage();
                return;
            }
    
            // Odeme bilgilerinin hazirlanmasi
    
            // odenecek toplam tutarin hesaplanmasi
            $amount = $_SESSION['miktar'];
     
    
            $obj->mode = "P";
            $obj->three_d_secure_code = $response['three_d_secure_code'];
            $obj->order_id = $response['order_id'];
            $obj->amount = $amount;
            $obj->echo = "echo message";
    //        $obj->vendor_id = $this->vendor_id;
            $obj->products = $this->products;
            $obj->shipping_address = $this->shipping_address;
            $obj->invoice_address = $this->invoice_address;
            $obj->purchaser = $this->purchaser;
    
            $response = array();
            try {
                // 3D Secure sonuc bilgileri API ile odeme servisine iletilir.
                $response = $obj->pay();
            } catch (Exception $e) {
                print "<span style=\"font-weight:bold\">ÖDEME İŞLEMİNİZ BAŞARISIZ</span>";
                print '</br>' . $e->getMessage();
                return;
            }
    
    }
    }
  • 07-10-2016, 01:17:24
    #2
    @SerimGrup; bu işlem için 3 adet yol önerebilirim.

    Pratik basit yol 1: sessionu denedim demişsiniz ama fonksiyonun içinde session değerini okuyabilirsiniz, fonksiyonun tanımlı olduğu php dosyasının üstünde session_start(); olmasına dikkat ediniz ve aşama aşama print_r($_SESSION); diyerek session yazıyormu nerde kayboluyor bunun debugunu yapabilirsiniz.

    Pratik basit yol 2: ode.php dosyanıza ode.php?urun_miktari=x&taksit=y&toplam_tutar=z

    şeklinde yönlendirirsiniz, callback yeni geri dönüşte urlyi bu şekilde verirseniz GET ile değerleri çekip kullanabilirsiniz. Geri dönüş urlsini ilk 3d secure isteği yaptığınız success_url ve failure_url kısmından yapabilirsiniz.

    Ama ben bu özellikle 2. yöntemi hiç önermiyorum, dikkat edilmezse güvenlik zafiyetleri oluşturabilir.

    Önerdiğim yöntem yol 3:
    Bu yöntem diğerlerine göre daha profesyonel bir yöntemdir, siz ilk başta kredi kartı ödeme sayfasına hiç gelmeden kullanıcının bilgilerini, hangi üründen kaç adet aldığını toplam ödeme miktarını dbde bir tabloya (örn: siparisler veya faturalar vb.) eklersiniz.

    Sonrasında ode.php nize ise ode.php?siparisno=x şeklinde kullanıcıyı yönlendirirsiniz ve yine aynı şekilde callback yani 3dsecureden dönüş linklerinide ode.php?siparisno=x şeklinde ayarlarsanız. burdaki siparisno yu get ile çekip dbden sorgulayarak siparişle ilgili gerekli bilgileri elde edebilirsiniz.
  • 07-10-2016, 16:41:26
    #3
    2. yöntemle çözmüştüm ben de hocam teşekkürler