• 15-06-2025, 20:01:53
    #1
    merhaba arkadaşlar shopier ödeme entegrasyonu yaptım ama başaramadım en son carem burası oldu bana yardımcı olabilirmisiniz entegrasyonun kodunu vereceğim burada ne hata yaptım ben ve shopier geçince bu uyarı verıyor



    kodu sizle paylaşıyorum bakarmısınız anlamadım bu hatayı YADA CALISAN BIR KOD VARSA PAYLAŞABILIRMISINIZ

    <?php
    session_start();
    include 'includes/db.php';
    include 'includes/shopier_config.php';
    
    $order_id = (int)($_GET['order_id'] ?? 0);
    
    if (!$order_id) {
        echo '<div class="alert alert-danger">Sipariş bulunamadı.</div>';
        exit;
    }
    
    // Sipariş ve kullanıcı bilgisi
    $stmt = $pdo->prepare('SELECT o.*, u.username, u.email, u.first_name, u.last_name, u.tc_kimlik_no, u.phone_number, u.billing_address, u.billing_city, u.billing_district, u.billing_country, u.billing_postcode FROM orders o LEFT JOIN users u ON o.user_id = u.id WHERE o.id = ?');
    $stmt->execute([$order_id]);
    $order = $stmt->fetch();
    
    if (!$order) {
        echo '<div class="alert alert-danger">Sipariş bulunamadı.</div>';
        exit;
    }
    
    // Shopier parametreleri
    $buyer_name = $order['first_name'] ?? '';
    $buyer_surname = $order['last_name'] ?? '';
    
    $buyer_email = $order['email'] ?? '';
    
    // Telefon, adres, şehir, posta kodu gibi bilgiler users tablosundan çekiliyor
    $buyer_phone = $order['phone_number'] ?? '';
    $billing_address = $order['billing_address'] ?? '';
    $billing_city = $order['billing_city'] ?? '';
    $billing_district = $order['billing_district'] ?? ''; // Shopier'da billing_state olarak geçer
    $billing_country = $order['billing_country'] ?? 'TR'; // Varsayılan Türkiye
    $billing_postcode = $order['billing_postcode'] ?? '';
    
    // Eğer ülke bilgisi TR değilse veya boşsa, Shopier'ın beklediği formata çevir veya varsayılan atama
    if (strtoupper($billing_country) === 'TÜRKİYE' || empty($billing_country)) {
        $billing_country = 'TR';
    }
    
    $shipping_address = $billing_address; // Fatura adresi ile aynı, farklıysa veritabanından çekin
    $shipping_city = $billing_city; // Fatura adresi ile aynı, farklıysa veritabanından çekin
    $shipping_country = $billing_country; // Fatura adresi ile aynı, farklıysa veritabanından çekin
    $shipping_postcode = $billing_postcode; // Fatura adresi ile aynı, farklıysa veritabanından çekin
    
    $order_total_formatted = number_format($order['total'], 2, '.', ''); // Virgül yerine nokta kullanıldı
    $order_currency = 'TL'; // 'TRY' yerine 'TL' olarak düzeltildi
    $product_name = 'Yazılım Siparişi #' . $order_id;
    $random_nr = uniqid(); // Her işlem için benzersiz rastgele sayı
    
    $shopier_args = [
        'API_key' => SHOPIER_API_KEY,
        'website_index' => 1,
        'platform_order_id' => $order_id,
        'product_name' => $product_name,
        'product_type' => 1, // 1: Dijital/Sanal Ürün (Shopier dökümanına göre)
        'buyer_name' => $buyer_name,
        'buyer_surname' => $buyer_surname,
        'buyer_email' => $buyer_email,
        'buyer_account_age' => 1, // Müşteri hesabı yaşı (gün cinsinden). Varsayılan 1.
        'buyer_id_nr' => $order['tc_kimlik_no'] ?? '', // Müşterinin TC Kimlik Numarası
        'buyer_phone' => $buyer_phone,
        'billing_address' => $billing_address,
        'billing_city' => $billing_city,
        'billing_state' => $billing_district, // İlçe bilgisi Shopier'da billing_state olarak kullanılır
        'billing_country' => $billing_country,
        'billing_postcode' => $billing_postcode,
        'shipping_address' => $shipping_address,
        'shipping_city' => $shipping_city,
        'shipping_country' => $shipping_country,
        'shipping_postcode' => $shipping_postcode,
        'total_order_value' => $order_total_formatted,
        'currency' => $order_currency,
        'platform' => 0, // 0: Web, 1: Mobil, 2: API (Önceki örnekteki 2 yerine 0 daha mantıklı olabilir)
        'is_in_frame' => 0, // 0: Yönlendirme, 1: Iframe
        'current_language' => 0, // 0: Türkçe, 1: İngilizce
        'random_nr' => $random_nr,
        'callback_url' => SHOPIER_CALLBACK_URL,
    ];
    
    // Shopier hash (güvenlik imzası) - EN KAPSAMLI VE MUHTEMELEN DOĞRU HESAPLAMA SIRASI
    // Bu sıralama ve parametreler, Shopier'ın çeşitli SDK'larında ve örneklerinde görülen yaygın bir desendir.
    // API Anahtarlarınızın (SHOPIER_API_KEY, SHOPIER_API_SECRET) kesinlikle doğru olduğundan emin olun!
    $hash_str =
        $shopier_args['random_nr'] .
        $shopier_args['platform_order_id'] .
        $shopier_args['total_order_value'] .
        $shopier_args['currency'] .
        $shopier_args['website_index'] .
        $shopier_args['buyer_name'] .
        $shopier_args['buyer_surname'] .
        $shopier_args['buyer_email'] .
        $shopier_args['buyer_id_nr'] .
        $shopier_args['buyer_phone'] .
        $shopier_args['billing_address'] .
        $shopier_args['billing_city'] .
        $shopier_args['billing_country'] .
        $shopier_args['billing_postcode'] .
        $shopier_args['shipping_address'] .
        $shopier_args['shipping_city'] .
        $shopier_args['shipping_country'] .
        $shopier_args['shipping_postcode'] .
        SHOPIER_API_KEY .
        SHOPIER_API_SECRET;
    
    $signature = base64_encode(hash_hmac('SHA256', $hash_str, SHOPIER_API_SECRET, true));
    $shopier_args['signature'] = $signature;
    
    $shopier_url = 'https://www.shopier.com/ShowProduct/api_pay4.php';
    
    // HTML çıktısı (heredoc syntax)
    echo <<<HTML_START
    <!DOCTYPE html>
    <html lang="tr">
    <head>
        <meta charset="UTF-8">
        <title>Shopier ile Ödeme</title>
        <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
    </head>
    <body>
    <div class="container mt-5">
        <h2>Shopier'a Yönlendiriliyorsunuz...</h2>
        <p>Lütfen bekleyiniz, ödeme sayfasına yönlendiriliyorsunuz.</p>
        <form action="{$shopier_url}" method="post" id="shopierForm">
    HTML_START;
    
    foreach ($shopier_args as $k => $v) {
        echo '<input type="hidden" name="' . htmlspecialchars($k) . '" value="' . htmlspecialchars($v) . '">';
    }
    
    echo <<<HTML_END
    </form>
        <script>
            document.getElementById('shopierForm').submit();
        </script>
    </div>
    </body>
    </html>
    HTML_END;
    
    exit; // Ödeme işlemi tamamlandığında script'i sonlandır.
  • 15-06-2025, 20:14:40
    #2
    Üyeliği durduruldu

    Olası Hata Nedenleri ve Çözümler:


    1. 🔑 API Anahtarları yanlış veya eksik

    • SHOPIER_API_KEY ve SHOPIER_API_SECRET değerlerin Shopier panelinden birebir alınmış ve doğru şekilde shopier_config.php dosyasına yazılmış mı?
    • Özellikle boşluk, görünmeyen karakter, yanlış kopyalama gibi hatalara dikkat et.

    2. 💳 Shopier tarafında ürün veya site tanımı yapılmamış

    • Shopier panelinden "Site Tanımları" bölümüne gidip "Website Index" numarasını (website_index => 1) doğru girdiğinden emin ol.
    • Eğer tanımlı bir site yoksa, 1 yazmak işe yaramaz, hata verir.

    3. 🔐 İmza (signature) hatalı oluşturulmuş olabilir

    • hash_hmac ile oluşturulan signature değeri, Shopier tarafındaki hesaplamayla uyuşmazsa sistem güvenlik hatası verir.
    • Shopier, sıralama konusunda çok hassastır. Parametrelerin doğru sıralandığından emin misin?
      Öneri: En sade test için zorunlu olan parametrelerle dene (örn. sadece 5-6 tane) ve adım adım artır.

    4. 🌐 Callback veya yönlendirme URL’in yanlış ya da eksik

    • SHOPIER_CALLBACK_URL tanımlı mı? Doğru URL mi?
      Bu URL çalışır ve açık olmalı. 404 veriyorsa Shopier hata döner.

    5. 🔁 Aynı random_nr tekrar kullanılmış olabilir

    • uniqid() gibi bir yapı kullanman güzel ama bazen hızla aynı order_id için çağrılırsa Shopier bunu reddedebilir.
    • Farklı random_nr kullanıldığına emin ol.

    🧪 Test için ne yapabilirsin?


    ➤ Adım 1: var_dump($shopier_args); ile verileri kontrol et


    echo '<pre>';
    var_dump($shopier_args);
    echo '</pre>';
    exit;

    Form postu yapmadan önce çıktıyı gör ve her şeyin doğru gidip gitmediğini kontrol et.

    ➤ Adım 2: API KEY & SECRET’ı test panelinde yeniden oluştur

    • Shopier → Geliştirici Ayarları → API Anahtarı → Yeni anahtar oluştur.

    ➤ Adım 3: Shopier destekten test modunu açmalarını iste


    Varsayılan olarak her hesap canlı moddadır. Test için ayrıca aktivasyon gerekir.

    ❓ İstersen


    İstersen bana özel olarak şu bilgileri (gizli değilse) verebilirsin:
    • shopier_config.php içinde tanımladığın SHOPIER_API_KEY, SHOPIER_API_SECRET, SHOPIER_CALLBACK_URL (tabii sahteleyebilirsin burada)
    • website_index değerin doğru mu?
    • Shopier panelinde ürün tanımı veya site tanımı yaptın mı?
  • 15-06-2025, 20:17:21
    #3
    Selamlar hocam githubta bu repoyu buldum ekleyebilirseniz çalışır daha önce buradan kurmuştum bir müşteriye
    https://github.com/erkineren/shopier
  • 15-06-2025, 20:19:46
    #4
    Hc4k adlı üyeden alıntı: mesajı görüntüle

    Olası Hata Nedenleri ve Çözümler:


    1. 🔑 API Anahtarları yanlış veya eksik

    • SHOPIER_API_KEY ve SHOPIER_API_SECRET değerlerin Shopier panelinden birebir alınmış ve doğru şekilde shopier_config.php dosyasına yazılmış mı?
    • Özellikle boşluk, görünmeyen karakter, yanlış kopyalama gibi hatalara dikkat et.

    2. 💳 Shopier tarafında ürün veya site tanımı yapılmamış

    • Shopier panelinden "Site Tanımları" bölümüne gidip "Website Index" numarasını (website_index => 1) doğru girdiğinden emin ol.
    • Eğer tanımlı bir site yoksa, 1 yazmak işe yaramaz, hata verir.

    3. 🔐 İmza (signature) hatalı oluşturulmuş olabilir

    • hash_hmac ile oluşturulan signature değeri, Shopier tarafındaki hesaplamayla uyuşmazsa sistem güvenlik hatası verir.
    • Shopier, sıralama konusunda çok hassastır. Parametrelerin doğru sıralandığından emin misin?
      Öneri: En sade test için zorunlu olan parametrelerle dene (örn. sadece 5-6 tane) ve adım adım artır.

    4. 🌐 Callback veya yönlendirme URL’in yanlış ya da eksik

    • SHOPIER_CALLBACK_URL tanımlı mı? Doğru URL mi?
      Bu URL çalışır ve açık olmalı. 404 veriyorsa Shopier hata döner.

    5. 🔁 Aynı random_nr tekrar kullanılmış olabilir

    • uniqid() gibi bir yapı kullanman güzel ama bazen hızla aynı order_id için çağrılırsa Shopier bunu reddedebilir.
    • Farklı random_nr kullanıldığına emin ol.

    🧪 Test için ne yapabilirsin?


    ➤ Adım 1: var_dump($shopier_args); ile verileri kontrol et


    echo '<pre>';
    var_dump($shopier_args);
    echo '</pre>';
    exit;

    Form postu yapmadan önce çıktıyı gör ve her şeyin doğru gidip gitmediğini kontrol et.

    ➤ Adım 2: API KEY & SECRET’ı test panelinde yeniden oluştur

    • Shopier → Geliştirici Ayarları → API Anahtarı → Yeni anahtar oluştur.

    ➤ Adım 3: Shopier destekten test modunu açmalarını iste


    Varsayılan olarak her hesap canlı moddadır. Test için ayrıca aktivasyon gerekir.

    ❓ İstersen


    İstersen bana özel olarak şu bilgileri (gizli değilse) verebilirsin:
    • shopier_config.php içinde tanımladığın SHOPIER_API_KEY, SHOPIER_API_SECRET, SHOPIER_CALLBACK_URL (tabii sahteleyebilirsin burada)
    • website_index değerin doğru mu?
    • Shopier panelinde ürün tanımı veya site tanımı yaptın mı?
    Hocam yapay zekayı azaltalım, işe yaramayan bir çözüm. Saygılar.
  • 15-06-2025, 20:23:29
    #5
    Üyeliği durduruldu
    cssMage adlı üyeden alıntı: mesajı görüntüle
    Hocam yapay zekayı azaltalım, işe yaramayan bir çözüm. Saygılar.
    işe yaramayan bir çözüm dediğiniz sıkıntıyı analiz edip yazıyor yapay zeka dahi olsa arkadaşa yardımı olur diye paylaşım yaptım
    işlemin düzenini biliyorsanız arkadaşla paylaşın halletsin o vakit.
  • 15-06-2025, 20:53:13
    #6
    bu shopier basıt bir sekılde hali varmı comproser yapamam hocam cunku paylasımlı hostıng bendekı ızın yok ornekleme varsa verebilirmisiniz php olarak
  • 16-06-2025, 23:52:57
    #7
    evscreativ adlı üyeden alıntı: mesajı görüntüle
    bu shopier basıt bir sekılde hali varmı comproser yapamam hocam cunku paylasımlı hostıng bendekı ızın yok ornekleme varsa verebilirmisiniz php olarak
    Çözebildin mi bende buna benzer hatalar aldım çok olmuyor bir türlü
  • 16-06-2025, 23:54:10
    #8
    cozemedım daha hocam bakamadım