• 22-12-2024, 23:06:46
    #1
    Merhaba arkadaşlar php ile kolayimza aracalığı ile dosyaları e-imza yaptırmak istiyorum.

    herşey çalışyor ama dosyaları bir türlü programa gönderemedim.

    maya/kimza.php de çalışıyor
    dosyalarda $dosya değişkeninde dosya/sertifika/dosyadi.pdf gibi düşünün
    yine maya klasörü içinde.
    döküman şu https://ftp.6kare.com/files/kolayimza/api/
    kodu şu

    <?php
    include("ayar/confing.php"); // ../ yerine doğrudan ayar klasörüne erişiyoruz
    function getUrl($query) {
        return 'http://' . $_SERVER["HTTP_HOST"] . '/maya/kimza.php?' . $query; // URL'de yeni konum
    }
    $gelen = $_GET["id"]; // Gelen id parametresi
    $cek = mysqli_query($conn, "SELECT dosya FROM cihaz_kabul WHERE pid='$gelen'"); // PDF dosyalarını çek
    while ($row = mysqli_fetch_array($cek)) {
        $dosya = $row["dosya"]; // Veritabanındaki dosya yolu
        $gercekDosyaYolu = $dosya; // Gerçek dosya yolu (artık ../ gerek yok)
        $dosyaURL = 'http://' . $_SERVER['HTTP_HOST'] . '/maya/' . $dosya; // Tarayıcıda kullanılacak tam URL
        // Dinamik imza isteği URL'si
        $query = http_build_query(['id' => $gelen, 'op' => 'request', 'file' => urlencode($dosya)]);
        $requestUrl = getUrl($query);
        // JavaScript tarafında işlem başlatan HTML
        echo "
        <html>
        <head>
            <script src='https://code.jquery.com/jquery-git.min.js' type='text/javascript'></script>
        </head>
        <body>
            <script type='text/javascript'>
                $(document).ready(function() {
                    $('<iframe></iframe>').appendTo('body').attr('src', 'sign://?xs=$requestUrl');
                    window.location.href = '" . getUrl("id=$gelen&op=wait&file=" . urlencode($dosya)) . "';
                });
            </script>
        </body>
        </html>";
    }
    // E-imza işlemleri
    switch ($_GET['op'] ?? '') {
        
        case 'wait': // İmza sürecini bekle
            ob_start();
            $dosyaURL =  $_GET['file'];
            echo '<html><body>';
            if (file_exists('./sig.json')) {
                echo 'İmza alındı';
                echo '<script>';
                echo "alert('" . file_get_contents('./sig.json') . "');";
                echo "window.location = '" . getUrl('') . "';";
                echo '</script>';
            } else {
                echo 'İmza bekleniyor';
                echo "$dosyaURL<br>";
                sleep(3);
                flush();
                echo '<script>';
                echo "window.location = '" . $_SERVER['REQUEST_URI'] . "';";
                echo '</script>';
            }
            echo '</body></html>';
            return;
            break;
        case 'request': // JSON isteği hazırla
            $dosyaURL =  $_GET['file'];
            header('Content-type: application/json');
            echo '{';
            echo '  "id":' . $_GET['id'] . ',';
            echo '  "resources": [{';
            echo '    "source" : "' . getUrl("id=" . $_GET['id'] . "&op=content&file=" . urlencode($_GET['file'])) . '",';
            echo '    "sourceName" : "' . basename($_GET['file']) . '"';
            echo '  }],';
            echo '  "responseUrl": "' . getUrl("id=" . $_GET['id'] . "&op=response&file=" . urlencode($_GET['file'])) . '"';
            echo '}';
            return;
            break;
            case 'content': // Dosyayı sun
                $dosyaURL = $_GET['file'];
                    header('Content-type: application/pdf');
                    readfile($dosyaURL);
              
              
                break;
        case 'response': // İmzalanmış dosyayı al ve kaydet
            $data = file_get_contents('php://input');
            $decoded = json_decode($data, true);
            if (isset($decoded['resources'][0]['source']) && isset($decoded['resources'][0]['signature'])) {
                $orijinalDosya = $_GET['file'];
                file_put_contents($orijinalDosya, base64_decode($decoded['resources'][0]['signature']));
                echo "İmzalı dosya kaydedildi: " . $orijinalDosya;
            } else {
                echo "İmzalı dosya alınamadı.";
            }
            // JSON verisini kaydet
            file_put_contents('./sig.json', $data);
            return;
            break;
    }
    ?>
    yardım eder misiniz? nerede hata yapıyorum?
  • 07-03-2025, 10:58:57
    #2
    selam hocam sorun devam ediyor mu bilmiyorum ama
    benim repo'ya bi bakabilirsin: https://github.com/hermesthecat/eimza