• 19-07-2024, 15:35:22
    #1
    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
  • 19-07-2024, 15:46:29
    #2
    Signature validation kısmı çalışmıyordur %90 hocam. Printr ile dönen yanıtları ekrana yazdırdığınızda $signature === $expected koşulunun gerçekleşmediğini göreceksiniz büyük ihtimalle. Şu iki değişken dönmüyor olabilir . $data'dan $_POST["total_order_value"] . $_POST["currency"] bunları silip deneyin olmazsa bunlar silikken $shopierSecret değerini kodunuza sadece test amaçlı kendiniz ekleyin.
  • 19-07-2024, 15:49:39
    #3
    ayrıca odeme sonrası panel/callback/xxxxxx yonlendirince imza doğrulaması yanlış diyor mesala
  • 19-07-2024, 15:50:13
    #4
    BABER adlı üyeden alıntı: mesajı görüntüle
    Signature validation kısmı çalışmıyordur %90 hocam. Printr ile dönen yanıtları ekrana yazdırdığınızda $signature === $expected koşulunun gerçekleşmediğini göreceksiniz büyük ihtimalle.
    az once bende farketdim hocam nası cozcem kafayı sıyırdım valla işi gücü bıraktım buna bakıom 3 saatdir
  • 19-07-2024, 15:51:17
    #5
    slowy adlı üyeden alıntı: mesajı görüntüle
    az once bende farketdim hocam nası cozcem kafayı sıyırdım valla işi gücü bıraktım buna bakıom 3 saatdir
    İlk yanıtımı güncelledim onu dener misiniz?
  • 19-07-2024, 16:04:56
    #6
    BABER adlı üyeden alıntı: mesajı görüntüle
    İlk yanıtımı güncelledim onu dener misiniz?
    shopier secret vb ekledim oldu şimdi ama veritabanı işlemlerini yapmıyor bu sefer hocam kodu aşşağıya bırakıyorum

    $router->map('POST', '/panel/callback/[*:platform]', function($platform) {
        global $vt, $shopierSecret; // Assuming $shopierSecret is defined somewhere
        $shopierSecret = xxxxxxx;
        // 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);
                
                    $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]);
                echo "para eklendi";
            }
        } else {
            echo "İmza doğrulaması başarısız.";
        }
        exit(); // Ensure script terminates after processing
    }, 'app.callback.post');
  • 19-07-2024, 16:11:26
    #7
    $signature==$expected gerçekleştiğinden emin misiniz? Veritabanı işlemi yerine örneğin basitçe başarılıysa anasayfaya yönlendir değilse başka bir sayfaya şeklinde deneyebilir misiniz?
  • 19-07-2024, 16:12:35
    #8
    BABER adlı üyeden alıntı: mesajı görüntüle
    $signature==$expected gerçekleştiğinden emin misiniz? Veritabanı işlemi yerine örneğin basitçe başarılıysa anasayfaya yönlendir değilse başka bir sayfaya şeklinde deneyebilir misiniz?
    eminim hocam imza hatası vermiyor cunku ok yaz diyorum $signature==$expected gerçekleşince yazdırıyor
  • 19-07-2024, 16:14:29
    #9
    slowy adlı üyeden alıntı: mesajı görüntüle
    eminim hocam imza hatası vermiyor cunku ok yaz diyorum $signature==$expected gerçekleşince yazdırıyor
    $status değeri ne dönüyor peki?