• 29-05-2023, 15:13:19
    #1
    {"status":"failed","reason":"Zorunlu alan degeri gecersiz veya gonderilmedi (odeme): payment_type"}
    bu hatayı alıyoruz ödeme sayfasında yardımcı olabilecek var mı ?
  • 29-05-2023, 15:14:44
    #2
    PayTR kodunu paylaşırsanız ücret ödemenize gerek kalmadan üyeler yardımcı olacaktır.
  • 29-05-2023, 15:17:19
    #3
            <!doctype html>
    <html lang="tr">
    <head>
        <meta charset="UTF-8">
        <title>Su Arıtma Ödeme Sayfası</title>
    </head>
    <body>
    
    <br><br>
    
    <div style="width: 100%;margin: 0 auto;display: table;">
    
        <?php
    try {
         $db = new PDO("mysql:host=localhost;dbname=xxxx;charset=utf8", "xxxx", "xxxx");
        
    } catch ( PDOException $e ){
         print $e->getMessage();
    }
    
        /*
    
    if ($_POST) {
      
    
    date_default_timezone_set('Europe/Istanbul');
    $zaman=date('d.m.Y H:i:s');
    
    
    $giris_sifre=$_POST['sifre'];
    $mail=$_POST['mail'];
    $telefon=$_POST['telefon'];
    
    }
    
        */
        ## 1. ADIM için örnek kodlar ##
    
        ####################### DÜZENLEMESİ ZORUNLU ALANLAR #######################
        #
        ## API Entegrasyon Bilgileri - Mağaza paneline giriş yaparak BİLGİ sayfasından alabilirsiniz.
        $merchant_id     = '';
        $merchant_key     = '';
        $merchant_salt    = '';
        #
        ## Müşterinizin sitenizde kayıtlı veya form vasıtasıyla aldığınız eposta adresi
        $email = $_POST['mail'];
        #
        ## Tahsil edilecek tutar.
        $payment_amount    = $_POST['miktar']*100; //9.99 için 9.99 * 100 = 999 gönderilmelidir. $_POST['miktar']*100;
        #
        ## Sipariş numarası: Her işlemde benzersiz olmalıdır!! Bu bilgi bildirim sayfanıza yapılacak bildirimde geri gönderilir.
        
    $heh = $db->query("SELECT * FROM odemeler ORDER BY id DESC LIMIT 1")->fetch(PDO::FETCH_ASSOC);
    
    $heh=$heh['id']+1;
    
    
    
        $merchant_oid = $heh;
        #
        ## Müşterinizin sitenizde kayıtlı veya form aracılığıyla aldığınız ad ve soyad bilgisi
        $user_name = $_POST['ad_soyad'];
        #
        ## Müşterinizin sitenizde kayıtlı veya form aracılığıyla aldığınız adres bilgisi
        $user_address = "Istanbul Turkiye";
        #
        ## Müşterinizin sitenizde kayıtlı veya form aracılığıyla aldığınız telefon bilgisi
        $user_phone = $_POST['telefon'];
        #
        ## Başarılı ödeme sonrası müşterinizin yönlendirileceği sayfa
        ## !!! Bu sayfa siparişi onaylayacağınız sayfa değildir! Yalnızca müşterinizi bilgilendireceğiniz sayfadır!
        ## !!! Siparişi onaylayacağız sayfa "Bildirim URL" sayfasıdır (Bakınız: 2.ADIM Klasörü).
        $merchant_ok_url = "xxx/bayi/odeme_basarili.php";
        #
        ## Ödeme sürecinde beklenmedik bir hata oluşması durumunda müşterinizin yönlendirileceği sayfa
        ## !!! Bu sayfa siparişi iptal edeceğiniz sayfa değildir! Yalnızca müşterinizi bilgilendireceğiniz sayfadır!
        ## !!! Siparişi iptal edeceğiniz sayfa "Bildirim URL" sayfasıdır (Bakınız: 2.ADIM Klasörü).
        $merchant_fail_url = "xxx/bayi/odeme_hata.php";
        #
    
    $giris_id=$_POST['giris_id'];
    
    date_default_timezone_set('Europe/Istanbul');
    
    
    $zaman=date('d.m.Y H:i:s');
    $bugun=date('d.m.Y');
    
    $query = $db->prepare("INSERT INTO odemeler SET
    id = ?,
    odemeyi_yapan = ?,
    miktar = ?,
    zaman  = ?,
    newtime= ?,
    durum  = ?");
    $insert = $query->execute(array(
         $merchant_oid, $giris_id , $_POST['miktar'], $zaman, $bugun, "new"
    ));
    
    
        
        $user_basket = base64_encode(json_encode(array(
            array("Su Arıtma Cihazı", "0000", 1)  // 3. ürün (Ürün Ad - Birim Fiyat - Adet )
        )));
        
        ############################################################################################
    
        ## Kullanıcının IP adresi
        if( isset( $_SERVER["HTTP_CLIENT_IP"] ) ) {
            $ip = $_SERVER["HTTP_CLIENT_IP"];
        } elseif( isset( $_SERVER["HTTP_X_FORWARDED_FOR"] ) ) {
            $ip = $_SERVER["HTTP_X_FORWARDED_FOR"];
        } else {
            $ip = $_SERVER["REMOTE_ADDR"];
        }
    
        ## !!! Eğer bu örnek kodu sunucuda değil local makinanızda çalıştırıyorsanız
        ## buraya dış ip adresinizi (https://www.whatismyip.com/) yazmalısınız. Aksi halde geçersiz paytr_token hatası alırsınız.
        $user_ip=$ip;
        ##
    
        ## İşlem zaman aşımı süresi - dakika cinsinden
        $timeout_limit = "30";
    
        ## Hata mesajlarının ekrana basılması için entegrasyon ve test sürecinde 1 olarak bırakın. Daha sonra 0 yapabilirsiniz.
        $debug_on = 1;
    
        ## Mağaza canlı modda iken test işlem yapmak için 1 olarak gönderilebilir.
        $test_mode = 0;
    
        $no_installment    = 0; // Taksit yapılmasını istemiyorsanız, sadece tek çekim sunacaksanız 1 yapın
    
        ## Sayfada görüntülenecek taksit adedini sınırlamak istiyorsanız uygun şekilde değiştirin.
        ## Sıfır (0) gönderilmesi durumunda yürürlükteki en fazla izin verilen taksit geçerli olur.
        $max_installment = 0;
    
        $currency = "TL";
        
        ####### Bu kısımda herhangi bir değişiklik yapmanıza gerek yoktur. #######
        $hash_str = $merchant_id .$user_ip .$merchant_oid .$email .$payment_amount .$user_basket.$no_installment.$max_installment.$currency.$payment_type.$test_mode;
        $paytr_token=base64_encode(hash_hmac('sha256',$hash_str.$merchant_salt,$merchant_key,true));
        $post_vals=array(
                'merchant_id'=>$merchant_id,
                'user_ip'=>$user_ip,
                'merchant_oid'=>$merchant_oid,
                'email'=>$email,
                'payment_amount'=>$payment_amount,
                'paytr_token'=>$paytr_token,
                'user_basket'=>$user_basket,
                'debug_on'=>$debug_on,
                'no_installment'=>$no_installment,
                'max_installment'=>$max_installment,
                'user_name'=>$user_name,
                'user_address'=>$user_address,
                'user_phone'=>$user_phone,
                'merchant_ok_url'=>$merchant_ok_url,
                'merchant_fail_url'=>$merchant_fail_url,
                'timeout_limit'=>$timeout_limit,
                'currency'=>$currency,
                'test_mode'=>$test_mode
            );
        
        $ch=curl_init();
        curl_setopt($ch, CURLOPT_URL, "https://www.paytr.com/odeme/api/get-token");
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_POST, 1) ;
        curl_setopt($ch, CURLOPT_POSTFIELDS, $post_vals);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
        curl_setopt($ch, CURLOPT_FRESH_CONNECT, true);
        curl_setopt($ch, CURLOPT_TIMEOUT, 20);
        $result = @curl_exec($ch);
    
        if(curl_errno($ch))
            die("PAYTR IFRAME connection error. err:".curl_error($ch));
    
        curl_close($ch);
        
        $result=json_decode($result,1);
            
        if($result['status']=='success')
            $token=$result['token'];
        else
            die("PAYTR IFRAME failed. reason:".$result['reason']);
        #########################################################################
    
        ?>
    
        <!-- Ödeme formunun açılması için gereken HTML kodlar / Başlangıç -->
        <script src="https://www.paytr.com/js/iframeResizer.min.js"></script>
        <iframe src="https://www.paytr.com/odeme/guvenli/<?php echo $token;?>" id="paytriframe" frameborder="0" scrolling="no" style="width: 100%;"></iframe>
        <script>iFrameResize({},'#paytriframe');</script>
        <!-- Ödeme formunun açılması için gereken HTML kodlar / Bitiş -->
    
    </div>
    
    <br><br>
    </body>
    </html>
  • 29-05-2023, 15:18:34
    #4
    Hocm payment type değişkenini kaldırın yerince card yazın
  • 29-05-2023, 15:20:53
    #5
    SauRonn adlı üyeden alıntı: mesajı görüntüle
    Hocm payment type değişkenini kaldırın yerince card yazın
                'payment_type'=>'card',
    bu şekilde mi hocam
  • 29-05-2023, 15:25:53
    #6
    Khaaos adlı üyeden alıntı: mesajı görüntüle
                'payment_type'=>'card',
    bu şekilde mi hocam
    Evet o şekilde hocam. Başka eksik değişken var mı pek bakamadım direkt sorununuzu cevapladım ama tekrar hata alırsanız yazmaktan çekinmeyin.
  • 29-05-2023, 15:29:09
    #7
    SauRonn adlı üyeden alıntı: mesajı görüntüle
    Evet o şekilde hocam. Başka eksik değişken var mı pek bakamadım direkt sorununuzu cevapladım ama tekrar hata alırsanız yazmaktan çekinmeyin.
    maalesef hata devam ediyor
  • 29-05-2023, 15:36:00
    #8
    Hocam iFrame API de payment_type yokmuş zaten, sizin bu test işleminizdeki ödeme tutarını söyler misiniz?
  • 29-05-2023, 17:16:35
    #9
    'payment_type'=>'card', diye bie alan yok
    buradan
    $hash_str = $merchant_id .$user_ip .$merchant_oid .$email .$payment_amount .$user_basket.$no_installment.$max_installment.$cu rrency.$payment_type.$test_mode;
    $payment_type.
    silin.