• 19-07-2024, 16:15:26
    #10
    BABER adlı üyeden alıntı: mesajı görüntüle
    $status değeri ne dönüyor peki?
    succes donduğunde yazdır diyorum yazdırıyor hocam
  • 19-07-2024, 16:17:13
    #11
    slowy adlı üyeden alıntı: mesajı görüntüle
    succes donduğunde yazdır diyorum yazdırıyor hocam
    if ($status === "success") { try { $paymentInfoStmt = $vt->prepare("SELECT * FROM payments WHERE unique_id = ?"); $paymentInfoStmt->execute([$invoiceId]); $paymentInfo = $paymentInfoStmt->fetch(PDO::FETCH_OBJ); if ($paymentInfo) { $userDetailsStmt = $vt->prepare("SELECT * FROM users WHERE id = ?"); $userDetailsStmt->execute([$paymentInfo->user_id]); $userInfo = $userDetailsStmt->fetch(PDO::FETCH_OBJ); if ($userInfo) { // Update user balance $newBalance = $userInfo->balance + $paymentInfo->amount; $updateBalanceStmt = $vt->prepare("UPDATE users SET balance = ? WHERE id = ?"); $updateBalanceStmt->execute([$newBalance, $paymentInfo->user_id]); // Update payment status $updatePaymentStatusStmt = $vt->prepare("UPDATE payments SET status = ? WHERE id = ?"); $updatePaymentStatusStmt->execute([1, $paymentInfo->id]); echo "para eklendi"; } else { echo "Kullanıcı bulunamadı."; } } else { echo "Ödeme Hatası."; } } catch (PDOException $e) { echo "Veritabanı hatası: " . $e->getMessage(); } } else { echo "Ödeme Başarısız."; }
    Bu şekilde dener misiniz? Nedense r10'da kod düzgün gözükmüyor.
  • 19-07-2024, 16:23:27
    #12
    BABER adlı üyeden alıntı: mesajı görüntüle
    if ($status === "success") { try { $paymentInfoStmt = $vt->prepare("SELECT * FROM payments WHERE unique_id = ?"); $paymentInfoStmt->execute([$invoiceId]); $paymentInfo = $paymentInfoStmt->fetch(PDO::FETCH_OBJ); if ($paymentInfo) { $userDetailsStmt = $vt->prepare("SELECT * FROM users WHERE id = ?"); $userDetailsStmt->execute([$paymentInfo->user_id]); $userInfo = $userDetailsStmt->fetch(PDO::FETCH_OBJ); if ($userInfo) { // Update user balance $newBalance = $userInfo->balance + $paymentInfo->amount; $updateBalanceStmt = $vt->prepare("UPDATE users SET balance = ? WHERE id = ?"); $updateBalanceStmt->execute([$newBalance, $paymentInfo->user_id]); // Update payment status $updatePaymentStatusStmt = $vt->prepare("UPDATE payments SET status = ? WHERE id = ?"); $updatePaymentStatusStmt->execute([1, $paymentInfo->id]); echo "para eklendi"; } else { echo "Kullanıcı bulunamadı."; } } else { echo "Ödeme Hatası."; } } catch (PDOException $e) { echo "Veritabanı hatası: " . $e->getMessage(); } } else { echo "Ödeme Başarısız."; }
    Bu şekilde dener misiniz? Nedense r10'da kod düzgün gözükmüyor.
    ödeme hatası dedi ama shopierde şipariş yansıdı hocam pardon vt ile ilgiliymiş ödeme hatası demesinin sebebi
  • 19-07-2024, 16:27:11
    #13
    BABER adlı üyeden alıntı: mesajı görüntüle
    if ($status === "success") { try { $paymentInfoStmt = $vt->prepare("SELECT * FROM payments WHERE unique_id = ?"); $paymentInfoStmt->execute([$invoiceId]); $paymentInfo = $paymentInfoStmt->fetch(PDO::FETCH_OBJ); if ($paymentInfo) { $userDetailsStmt = $vt->prepare("SELECT * FROM users WHERE id = ?"); $userDetailsStmt->execute([$paymentInfo->user_id]); $userInfo = $userDetailsStmt->fetch(PDO::FETCH_OBJ); if ($userInfo) { // Update user balance $newBalance = $userInfo->balance + $paymentInfo->amount; $updateBalanceStmt = $vt->prepare("UPDATE users SET balance = ? WHERE id = ?"); $updateBalanceStmt->execute([$newBalance, $paymentInfo->user_id]); // Update payment status $updatePaymentStatusStmt = $vt->prepare("UPDATE payments SET status = ? WHERE id = ?"); $updatePaymentStatusStmt->execute([1, $paymentInfo->id]); echo "para eklendi"; } else { echo "Kullanıcı bulunamadı."; } } else { echo "Ödeme Hatası."; } } catch (PDOException $e) { echo "Veritabanı hatası: " . $e->getMessage(); } } else { echo "Ödeme Başarısız."; }
    Bu şekilde dener misiniz? Nedense r10'da kod düzgün gözükmüyor.
    $invoiceId bu değişkeni global değişken yaparsak çozulurmu hocam cunku arasıra ustde olan bir değişken alt taraflarda hep 0 değerini veriyor
    echo $invoiceId; yazdırınca hep 0 dönüyor
  • 19-07-2024, 16:42:03
    #14
    slowy adlı üyeden alıntı: mesajı görüntüle
    $invoiceId bu değişkeni global değişken yaparsak çozulurmu hocam cunku arasıra ustde olan bir değişken alt taraflarda hep 0 değerini veriyor
    echo $invoiceId; yazdırınca hep 0 dönüyor
    normalde order_id olarak ne gönderiyorsunuz? shopier_form_generation fonksiyonunuzda platform_order_id olarak ne yolluyorsunuz?
  • 19-07-2024, 16:45:16
    #15
    slowy adlı üyeden alıntı: mesajı görüntüle
    Merhaba arkadaşlar shopier sanal pos entegresi ediyorum ancak odeme yapılsa bile bakiye yansımıyor kodları alt tarafa bırakıyorum

        },'app.payment.view');$router->map('GET|POST', '/panel/ode/[*:id]', function($id){
            global $vt,$title,$router,$user;
            global $amount;
                
        $getveri = $vt->prepare("SELECT id, amount FROM payments WHERE id=?");
        $getveri->execute([$id]);
        
        // Fetch the result (assuming you're fetching only one row)
        $row = $getveri->fetch(PDO::FETCH_ASSOC);
        
        // Assign amount from the fetched row
        $amount = $row['amount'];
            
                if (@$_SESSION["login"]) {
    
    $getDatas    =    $vt->prepare("SELECT * FROM payments WHERE id=?");
    $getDatas    ->    execute(array($id));
                    
    
                    $data         =    $getDatas->fetch(PDO::FETCH_OBJ);
                    if($data->method == 'paymax'){
                                include 'shopierAPI.php';
            $shopier = new Shopier('xxxxxx', 'xxxxxxx');
            $shopier->setBuyer([
                'id' => $unique_id,
                'paket' => 'Site İçi Bakiye',
                'first_name' => $name[0],
                'last_name' => $name[1],
                'email' => $user->email,
                'phone' => $user->phone
            ]);
            $shopier->setOrderBilling([
                'billing_address' => 'Cemal Gürsel Caddesi No:544564',
                'billing_city' => 'İstanbul',
                'billing_country' => 'Türkiye',
                'billing_postcode' => '34000'
            ]);
            $shopier->setOrderShipping([
                'shipping_address' => 'Cemal Gürsel Caddesi No:544564',
                'shipping_city' => 'İstanbul',
                'shipping_country' => 'Türkiye',
                'shipping_postcode' => '34000'
            ]);
                        
            die($shopier->run('544546545', $amount, 'https://epins.com.tr/panel/callback/xxxxxx'));
    
                    }elseif ($data->method == 'paytr') {
                        # code...
                    }
    
                }else{
                    redirect($router->generate('app.landing.view'));
                }
            exit();
        },'app.payment.view');
    Bu kod girilen miktarı alır veritabanına payments olarak ekler ve odeme alanına yonlendirir buraya kadar birşey yok çalışıyor


    $router->map('POST', '/panel/callback/[*:platform]', function($platform) {
        global $vt, $shopierSecret; // Assuming $shopierSecret is defined somewhere
        
        // POST data retrieval and sanitization
        $status = $_POST["status"] ?? "";
        $invoiceId = $_POST["platform_order_id"] ?? "";
        $transactionId = $_POST["payment_id"] ?? "";
        $installment = $_POST["installment"] ?? "";
        $signature = $_POST["signature"] ?? "";
        
        // Signature validation
        $data = $_POST["random_nr"] . $_POST["platform_order_id"] . $_POST["total_order_value"] . $_POST["currency"];
        $signature = base64_decode($signature);
        $expected = hash_hmac('SHA256', $data, $shopierSecret, true);
        
        // Verify signature
        if ($signature === $expected) {
            $status = strtolower($status);
            
            if ($status === "success") {
                // Payment successful: Update user balance and payment status
                $paymentInfo = $vt->prepare("SELECT * FROM payments WHERE unique_id=?");
                $paymentInfo->execute([$invoiceId]);
                $paymentInfo = $paymentInfo->fetch(PDO::FETCH_OBJ);
                
                if ($paymentInfo) {
                    $userDetails = $vt->prepare("SELECT * FROM users WHERE id=?");
                    $userDetails->execute([$paymentInfo->user_id]);
                    $userInfo = $userDetails->fetch(PDO::FETCH_OBJ);
                    
                    // Update user balance
                    $newBalance = $userInfo->balance + $paymentInfo->amount;
                    $updateBalance = $vt->prepare("UPDATE users SET balance = ? WHERE id = ?");
                    $updateBalance->execute([$newBalance, $paymentInfo->user_id]);
                    
                    // Update payment status
                    $updatePaymentStatus = $vt->prepare("UPDATE payments SET status = ? WHERE id = ?");
                    $updatePaymentStatus->execute([1, $paymentInfo->id]);
                    
                    // Write payment information to a file
                    file_put_contents('odeme.txt', $invoiceId);
                } else {
                    echo "Ödeme bilgisi bulunamadı.";
                    file_put_contents('odeme.txt', "Ödeme bilgisi bulunamadı.");
                }
            } else {
                echo "Ödeme başarısız.";
                file_put_contents('odeme.txt', "Ödeme başarısız.");
            }
        } else {
            echo "İmza doğrulaması başarısız.";
            file_put_contents('odeme.txt', "İmza doğrulaması başarısız.");
        }
        exit(); // Ensure script terminates after processing
    }, 'app.callback.post');
    bu kod ise odeme sonrası kullanıcıya parasını yukler ancak odeme sonrası kullanıcıya para eklenmiyor çıldırcam lutfen yardım edin
    buradaki ilk koddaki kişiye özel id paymente kayıt edilio bu id vt kontrol edince de gözüküyor zaten id parametresi ile gönderiyorum yani

    BABER adlı üyeden alıntı: mesajı görüntüle
    normalde order_id olarak ne gönderiyorsunuz? shopier_form_generation fonksiyonunuzda platform_order_id olarak ne yolluyorsunuz?
  • 19-07-2024, 18:11:26
    #16
    Kimlik doğrulama veya yönetimden onay bekliyor.
    slowy adlı üyeden alıntı: mesajı görüntüle
    Merhaba arkadaşlar shopier sanal pos entegresi ediyorum ancak odeme yapılsa bile bakiye yansımıyor kodları alt tarafa bırakıyorum

        },'app.payment.view');$router->map('GET|POST', '/panel/ode/[*:id]', function($id){
            global $vt,$title,$router,$user;
            global $amount;
                
        $getveri = $vt->prepare("SELECT id, amount FROM payments WHERE id=?");
        $getveri->execute([$id]);
        
        // Fetch the result (assuming you're fetching only one row)
        $row = $getveri->fetch(PDO::FETCH_ASSOC);
        
        // Assign amount from the fetched row
        $amount = $row['amount'];
            
                if (@$_SESSION["login"]) {
    
    $getDatas    =    $vt->prepare("SELECT * FROM payments WHERE id=?");
    $getDatas    ->    execute(array($id));
                    
    
                    $data         =    $getDatas->fetch(PDO::FETCH_OBJ);
                    if($data->method == 'paymax'){
                                include 'shopierAPI.php';
            $shopier = new Shopier('xxxxxx', 'xxxxxxx');
            $shopier->setBuyer([
                'id' => $unique_id,
                'paket' => 'Site İçi Bakiye',
                'first_name' => $name[0],
                'last_name' => $name[1],
                'email' => $user->email,
                'phone' => $user->phone
            ]);
            $shopier->setOrderBilling([
                'billing_address' => 'Cemal Gürsel Caddesi No:544564',
                'billing_city' => 'İstanbul',
                'billing_country' => 'Türkiye',
                'billing_postcode' => '34000'
            ]);
            $shopier->setOrderShipping([
                'shipping_address' => 'Cemal Gürsel Caddesi No:544564',
                'shipping_city' => 'İstanbul',
                'shipping_country' => 'Türkiye',
                'shipping_postcode' => '34000'
            ]);
                        
            die($shopier->run('544546545', $amount, 'https://epins.com.tr/panel/callback/xxxxxx'));
    
                    }elseif ($data->method == 'paytr') {
                        # code...
                    }
    
                }else{
                    redirect($router->generate('app.landing.view'));
                }
            exit();
        },'app.payment.view');
    Bu kod girilen miktarı alır veritabanına payments olarak ekler ve odeme alanına yonlendirir buraya kadar birşey yok çalışıyor


    $router->map('POST', '/panel/callback/[*:platform]', function($platform) {
        global $vt, $shopierSecret; // Assuming $shopierSecret is defined somewhere
        
        // POST data retrieval and sanitization
        $status = $_POST["status"] ?? "";
        $invoiceId = $_POST["platform_order_id"] ?? "";
        $transactionId = $_POST["payment_id"] ?? "";
        $installment = $_POST["installment"] ?? "";
        $signature = $_POST["signature"] ?? "";
        
        // Signature validation
        $data = $_POST["random_nr"] . $_POST["platform_order_id"] . $_POST["total_order_value"] . $_POST["currency"];
        $signature = base64_decode($signature);
        $expected = hash_hmac('SHA256', $data, $shopierSecret, true);
        
        // Verify signature
        if ($signature === $expected) {
            $status = strtolower($status);
            
            if ($status === "success") {
                // Payment successful: Update user balance and payment status
                $paymentInfo = $vt->prepare("SELECT * FROM payments WHERE unique_id=?");
                $paymentInfo->execute([$invoiceId]);
                $paymentInfo = $paymentInfo->fetch(PDO::FETCH_OBJ);
                
                if ($paymentInfo) {
                    $userDetails = $vt->prepare("SELECT * FROM users WHERE id=?");
                    $userDetails->execute([$paymentInfo->user_id]);
                    $userInfo = $userDetails->fetch(PDO::FETCH_OBJ);
                    
                    // Update user balance
                    $newBalance = $userInfo->balance + $paymentInfo->amount;
                    $updateBalance = $vt->prepare("UPDATE users SET balance = ? WHERE id = ?");
                    $updateBalance->execute([$newBalance, $paymentInfo->user_id]);
                    
                    // Update payment status
                    $updatePaymentStatus = $vt->prepare("UPDATE payments SET status = ? WHERE id = ?");
                    $updatePaymentStatus->execute([1, $paymentInfo->id]);
                    
                    // Write payment information to a file
                    file_put_contents('odeme.txt', $invoiceId);
                } else {
                    echo "Ödeme bilgisi bulunamadı.";
                    file_put_contents('odeme.txt', "Ödeme bilgisi bulunamadı.");
                }
            } else {
                echo "Ödeme başarısız.";
                file_put_contents('odeme.txt', "Ödeme başarısız.");
            }
        } else {
            echo "İmza doğrulaması başarısız.";
            file_put_contents('odeme.txt', "İmza doğrulaması başarısız.");
        }
        exit(); // Ensure script terminates after processing
    }, 'app.callback.post');
    bu kod ise odeme sonrası kullanıcıya parasını yukler ancak odeme sonrası kullanıcıya para eklenmiyor çıldırcam lutfen yardım edin
    Selamlar.

    Callback url doğru yapılandırıldı mı her 2 tarafta? Bazen http-https protokolleri veya yazım hataları nedeniyle sıkıntı çıkabiliyor, örneğin shopier tarafında callback http ile başlıyor olabilir.

    Shopier'dan gelen POST verilerini doğru şekilde aldığınızdan emin olun. Şu anda $_POST kullanıyorsunuz, ancak bazen bu veriler php://input üzerinden gelebilir. Şu şekilde kontrol edebilirsiniz:
    $postData = json_decode(file_get_contents('php://input'), true);
    if (empty($postData)) {
        $postData = $_POST;
    }
    Callback fonksiyonunun çalışıp çalışmadığını anlamak için daha detaylı loglama yapabilirsiniz

    file_put_contents('odeme_log.txt', date('Y-m-d H:i:s') . " - Callback çağrıldı\n", FILE_APPEND);
    file_put_contents('odeme_log.txt', print_r($postData, true) . "\n", FILE_APPEND);
    Veritabanı işlemlerinin başarılı olup olmadığını kontrol edin. Her sorgudan sonra hata kontrolü yapabilirsiniz:
    $updateBalance = $vt->prepare("UPDATE users SET balance = ? WHERE id = ?");
    if (!$updateBalance->execute([$newBalance, $paymentInfo->user_id])) {
        file_put_contents('odeme_log.txt', "Bakiye güncelleme hatası: " . print_r($updateBalance->errorInfo(), true) . "\n", FILE_APPEND);
    }
  • 19-07-2024, 18:16:51
    #17
    Sinyor_Ridak adlı üyeden alıntı: mesajı görüntüle
    Selamlar.

    Callback url doğru yapılandırıldı mı her 2 tarafta? Bazen http-https protokolleri veya yazım hataları nedeniyle sıkıntı çıkabiliyor, örneğin shopier tarafında callback http ile başlıyor olabilir.

    Shopier'dan gelen POST verilerini doğru şekilde aldığınızdan emin olun. Şu anda $_POST kullanıyorsunuz, ancak bazen bu veriler php://input üzerinden gelebilir. Şu şekilde kontrol edebilirsiniz:
    $postData = json_decode(file_get_contents('php://input'), true);
    if (empty($postData)) {
        $postData = $_POST;
    }
    Callback fonksiyonunun çalışıp çalışmadığını anlamak için daha detaylı loglama yapabilirsiniz

    file_put_contents('odeme_log.txt', date('Y-m-d H:i:s') . " - Callback çağrıldı\n", FILE_APPEND);
    file_put_contents('odeme_log.txt', print_r($postData, true) . "\n", FILE_APPEND);
    Veritabanı işlemlerinin başarılı olup olmadığını kontrol edin. Her sorgudan sonra hata kontrolü yapabilirsiniz:
    $updateBalance = $vt->prepare("UPDATE users SET balance = ? WHERE id = ?");
    if (!$updateBalance->execute([$newBalance, $paymentInfo->user_id])) {
        file_put_contents('odeme_log.txt', "Bakiye güncelleme hatası: " . print_r($updateBalance->errorInfo(), true) . "\n", FILE_APPEND);
    }
    BABER adlı üyeden alıntı: mesajı görüntüle
    normalde order_id olarak ne gönderiyorsunuz? shopier_form_generation fonksiyonunuzda platform_order_id olarak ne yolluyorsunuz?
    problem unique_id nin shopierde yani bu kod kısmında 'id' => $unique_id, yukardan gelememesiydi bunun nasıl cozebilirim GLOBALS ilemi global ilemi?
  • 19-07-2024, 18:22:46
    #18
    slowy adlı üyeden alıntı: mesajı görüntüle
    problem unique_id nin shopierde yani bu kod kısmında 'id' => $unique_id, yukardan gelememesiydi bunun nasıl cozebilirim GLOBALS ilemi global ilemi?
    Selamlar.
    /panel/ode/[*:id] kısmını şu şekilde güncelleyin :
    $unique_id = uniqid('payment_', true);
    $updateUnique = $vt->prepare("UPDATE payments SET unique_id = ? WHERE id = ?");
    $updateUnique->execute([$unique_id, $id]);
    Shopier'a gönderilen id parametresini $unique_id olarak güncelleyin.
    $shopier->setBuyer([
        'id' => $unique_id,
        // ...
    ]);
    Shopier'a gönderilen run metodunda da $unique_id kullanın :

    die($shopier->run($unique_id, $data->amount, 'https://epins.com.tr/panel/callback/shopier'));
    Callback fonksiyonunda, ödeme bilgisini unique_id ile sorgulayacak şekilde güncelleyin :

    $paymentInfo = $vt->prepare("SELECT * FROM payments WHERE unique_id = ?");
    $paymentInfo->execute([$invoiceId]);
    Duruma göre yazın bakalım.