karakaya26 adlı üyeden alıntı: mesajı görüntüle
Kodlarım bunlar ne yaptıysam sorunu çözemedim. https://www.paytr.com/odeme adresine yönlendiriyor ve

{"status":"failed","reason":"paytr_token gonderilmedi veya gecersiz"}

hatasını alıyorum. Yardımcı olur musunuz?

<?php
session_start(); // Oturum başlatma
// Hataları göster
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
$title = "Ödeme Sayfası";
include('../include/header.php'); // Header dosyasını dahil et
include('../include/db.php'); // Veritabanı bağlantısı
// Kullanıcı giriş kontrolü
if (!isset($_SESSION['kullanici_id'])) {
    header("Location: /giris-yap");
    exit;
}
$cv_id = $_GET['cv_id'] ?? null;
$kullanici_id = $_SESSION['kullanici_id'];
if ($cv_id) {
    // CV bilgilerini al
    $sorgu = $conn->prepare("SELECT * FROM cv_liste WHERE id = ? AND kullanici_id = ?");
    $sorgu->execute([$cv_id, $kullanici_id]);
    $cv = $sorgu->fetch(PDO::FETCH_ASSOC);
    if ($cv) {
        // Kullanıcı bilgilerini al
        $kullanici_sorgu = $conn->prepare("SELECT * FROM kullanicilar WHERE id = ?");
        $kullanici_sorgu->execute([$kullanici_id]);
        $kullanici = $kullanici_sorgu->fetch(PDO::FETCH_ASSOC);
        if ($kullanici) {
            // Ödeme için gerekli bilgiler
            $merchant_id = '480';  // bilgilerim
            $merchant_key = 'EySp4NBzPF3A';  // bilgilerim
            $merchant_salt = 'pcr6ffAdr2n';  // bilgilerim
            $email = $kullanici['email'] ?? null; // Kullanıcının email adresi
            $payment_amount = 5000; // Ödeme tutarı (kuruş cinsinden)
            $user_basket = base64_encode(json_encode([
                ["CV " . ($cv['cv_adi'] ?? 'Bilinmeyen'), "50.00", 1]
            ]));
            $merchant_oid = uniqid(); // Ödeme işlemi için benzersiz bir ID
            $merchant_ok_url = "http://site-ismi/basarili";
            $merchant_fail_url = "http://site-ismi/basarisiz";
            $test_mode = "1"; // Test modu aktif
            $non_3d = "0";
            $client_lang = "tr";
            $installment_count = "1"; // Varsayılan taksit sayısı
            $user_name = $kullanici['ad'] . ' ' . $kullanici['soyad'];
            $user_address = $kullanici['adres'] ?? 'Adres bilgisi girilmemiş';
            $user_phone = $kullanici['telefon'] ?? 'Telefon bilgisi girilmemiş';
            // Kullanıcı email kontrolü
            if (empty($email)) {
                echo "<p class='text-danger'>Kullanıcı email bilgisi bulunamadı. Lütfen tekrar deneyin.</p>";
                exit;
            }
            // IP adresini al
            if (isset($_SERVER["HTTP_CLIENT_IP"])) {
                $user_ip = $_SERVER["HTTP_CLIENT_IP"];
            } elseif (isset($_SERVER["HTTP_X_FORWARDED_FOR"])) {
                $user_ip = $_SERVER["HTTP_X_FORWARDED_FOR"];
            } else {
                $user_ip = $_SERVER["REMOTE_ADDR"];
            }
            // Güvenlik imzası oluşturma
            $payment_type = 'card';
$currency = 'TL';
$hash_str = $merchant_id . $user_ip . $merchant_oid . $email . $payment_amount . $payment_type . $installment_count . $currency . $test_mode . $non_3d . $merchant_salt;
            $paytr_token = base64_encode(hash_hmac('sha256', $hash_str, $merchant_key, true));
            $paytr_token      = base64_encode(hash_hmac('sha256',$hash_str.$merchant_salt,$merchant_key,true));
            
            

            // Ödeme formu
            ?>
            <section class="container my-5">
                <h2>Ödeme Yap</h2>
                <p class="lead"> ödeme yapmanız gerekmektedir.</p>
                <form action="https://www.paytr.com/odeme" method="post">
                    Kart Sahibi Adı: <input type="text" name="cc_owner" value="TEST KARTI"><br>
                    Kart Numarası: <input type="text" name="card_number" value="9792030394440796"><br>
                    Kart Son Kullanma Ay: <input type="text" name="expiry_month" value="12"><br>
                    Kart Son Kullanma Yıl: <input type="text" name="expiry_year" value="30"><br>
                    Kart Güvenlik Kodu: <input type="text" name="cvv" value="000"><br>
                    <input type="hidden" name="merchant_id" value="<?php echo $merchant_id; ?>">
                    <input type="hidden" name="user_ip" value="<?php echo $user_ip; ?>">
                    <input type="hidden" name="merchant_oid" value="<?php echo $merchant_oid; ?>">
                    <input type="hidden" name="email" value="<?php echo $email; ?>">
                    <input type="hidden" name="payment_type" value="card">
                    <input type="hidden" name="payment_amount" value="<?php echo $payment_amount; ?>">
                    <input type="hidden" name="currency" value="TL">
                    <input type="hidden" name="test_mode" value="<?php echo $test_mode; ?>">
                    <input type="hidden" name="non_3d" value="<?php echo $non_3d; ?>">
                    <input type="hidden" name="merchant_ok_url" value="<?php echo $merchant_ok_url; ?>">
                    <input type="hidden" name="merchant_fail_url" value="<?php echo $merchant_fail_url; ?>">
                    <input type="hidden" name="user_basket" value="<?php echo $user_basket; ?>">
                    <input type="hidden" name="client_lang" value="<?php echo $client_lang; ?>">
                    <input type="hidden" name="paytr_token" value="<?php echo $paytr_token; ?>">
                    <input type="hidden" name="installment_count" value="0">
                    <input type="hidden" name="no_installment" value="0">
                    
                    
                    <input type="hidden" name="max_installment" value="1">
                    <input type="hidden" name="user_name" value="<?php echo $user_name; ?>">
                    <input type="hidden" name="user_address" value="<?php echo $user_address; ?>">
                    <input type="hidden" name="user_phone" value="<?php echo $user_phone; ?>">
                    <input type="hidden" name="client_lang" value="<?php echo $client_lang; ?>">
<input type="hidden" name="lang" value="<?php echo $client_lang; ?>">
                    <input type="submit" value="Ödeme Yap">
                </form>
            </section>
            <?php
        } else {
            echo "<p class='text-danger'>Kullanıcı bilgileri bulunamadı. Lütfen tekrar deneyin.</p>";
        }
    } else {
        echo "<p class='text-danger'>CV bilgileri bulunamadı. Lütfen tekrar deneyin.</p>";
    }
} else {
    echo "<p class='text-danger'>CV ID bulunamadı. Lütfen tekrar deneyin.</p>";
}
include('../include/footer.php'); // Footer dosyasını dahil et
?>
Bu kodu denermisiniz?
<?php
session_start();
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

$title = "Ödeme Sayfası";
include('../include/header.php');
include('../include/db.php');

if (!isset($_SESSION['kullanici_id'])) {
    header("Location: /giris-yap");
    exit;
}

$cv_id = $_GET['cv_id'] ?? null;
$kullanici_id = $_SESSION['kullanici_id'];

if ($cv_id) {
    $sorgu = $conn->prepare("SELECT * FROM cv_liste WHERE id = ? AND kullanici_id = ?");
    $sorgu->execute([$cv_id, $kullanici_id]);
    $cv = $sorgu->fetch(PDO::FETCH_ASSOC);

    if ($cv) {
        $kullanici_sorgu = $conn->prepare("SELECT * FROM kullanicilar WHERE id = ?");
        $kullanici_sorgu->execute([$kullanici_id]);
        $kullanici = $kullanici_sorgu->fetch(PDO::FETCH_ASSOC);

        if ($kullanici) {
            $merchant_id = '480';
            $merchant_key = 'EySp4NBzPF3A';
            $merchant_salt = 'pcr6ffAdr2n';
            
            $email = $kullanici['email'] ?? null;
            if (empty($email)) {
                echo "<p class='text-danger'>Kullanıcı email bilgisi bulunamadı. Lütfen tekrar deneyin.</p>";
                exit;
            }

            $payment_amount = 5000; // 50.00 TL
            $merchant_oid = time() . rand(1000, 9999);
            $user_name = $kullanici['ad'] . ' ' . $kullanici['soyad'];
            $user_address = $kullanici['adres'] ?? 'Adres bilgisi girilmemiş';
            $user_phone = $kullanici['telefon'] ?? 'Telefon bilgisi girilmemiş';
            $merchant_ok_url = "https://site-ismi/basarili";
            $merchant_fail_url = "https://site-ismi/basarisiz";
            $user_basket = base64_encode(json_encode([
                ["CV " . ($cv['cv_adi'] ?? 'Bilinmeyen'), "50.00", 1]
            ]));

            if (isset($_SERVER["HTTP_CLIENT_IP"])) {
                $user_ip = $_SERVER["HTTP_CLIENT_IP"];
            } elseif (isset($_SERVER["HTTP_X_FORWARDED_FOR"])) {
                $user_ip = $_SERVER["HTTP_X_FORWARDED_FOR"];
            } else {
                $user_ip = $_SERVER["REMOTE_ADDR"];
            }

            $no_installment = 0;
            $max_installment = 1;
            $currency = "TL";
            $test_mode = "1";
            
            $hash_str = $merchant_id . $user_ip . $merchant_oid . $email . $payment_amount . $user_basket . $no_installment . $max_installment . $currency . $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' => 1,
                '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' => 30,
                '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_FRESH_CONNECT, true);
            curl_setopt($ch, CURLOPT_TIMEOUT, 20);

            $result = @curl_exec($ch);

            if(curl_errno($ch))
                die("PAYTR IFRAME bağlantı hatası. err:".curl_error($ch));

            curl_close($ch);

            $result = json_decode($result, 1);

            if($result['status'] == 'success')
                $token = $result['token'];
            else
                die("PAYTR IFRAME hatası. reason:".$result['reason']);
            ?>
            
            <section class="container my-5">
                <h2>Ödeme Yap</h2>
                <p class="lead">Ödeme yapmanız gerekmektedir.</p>
                <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>
            </section>

            <?php
        } else {
            echo "<p class='text-danger'>Kullanıcı bilgileri bulunamadı. Lütfen tekrar deneyin.</p>";
        }
    } else {
        echo "<p class='text-danger'>CV bilgileri bulunamadı. Lütfen tekrar deneyin.</p>";
    }
} else {
    echo "<p class='text-danger'>CV ID bulunamadı. Lütfen tekrar deneyin.</p>";
}

include('../include/footer.php');
?>