• 05-04-2025, 12:16:38
    #1
    Merhaba kendim için prestashop tabanlı pos yazıyorken kodlarını da paylaşmak istedim

    ödeme yapma formu
    <!DOCTYPE html>
    <html lang="tr">
    <head>
    <meta charset="UTF-8">
    <title>Kredi Kartı ile Ödeme</title>
    <script src="https://cdn.tailwindcss.com"></script>
    </head>
    <body class="bg-gray-100 flex items-center justify-center min-h-screen">
    
    <form action="odeme.php" method="POST" class="bg-white p-8 rounded-2xl shadow-md w-full max-w-md space-y-6">
    <h2 class="text-2xl font-bold text-center text-gray-800">Ödeme Yap</h2>
    
    <div>
    <label class="block text-gray-600 mb-1">Kart Sahibi Adı</label>
    <input type="text" name="cardName" value="Test Kullanıcı" placeholder="Ad Soyad" required class="w-full px-4 py-2 border rounded-xl focus:outline-none focus:ring-2 focus:ring-blue-400" />
    </div>
    
    <div>
    <label class="block text-gray-600 mb-1">Kart Numarası</label>
    <input type="text" name="cardNumber" maxlength="19" value="4355093000315232" placeholder="XXXX XXXX XXXX XXXX" required class="w-full px-4 py-2 border rounded-xl focus:outline-none focus:ring-2 focus:ring-blue-400" oninput="formatCardNumber(this)" />
    </div>
    
    <div class="flex space-x-4">
    <div class="w-1/2">
    <label class="block text-gray-600 mb-1">Son Kullanım</label>
    <input type="text" name="expiry" maxlength="5" value="1140" placeholder="MM/YY" required class="w-full px-4 py-2 border rounded-xl focus:outline-none focus:ring-2 focus:ring-blue-400" />
    </div>
    <div class="w-1/2">
    <label class="block text-gray-600 mb-1">CVC</label>
    <input type="password" autocomplate="off" name="cvv" value="471" maxlength="4" placeholder="CVC" required class="w-full px-4 py-2 border rounded-xl focus:outline-none focus:ring-2 focus:ring-blue-400" />
    </div>
    </div>
    
    <button type="submit" class="w-full bg-blue-600 text-white font-semibold py-3 rounded-xl hover:bg-blue-700 transition">₺ Ödeme Yap</button>
    </form>
    
    <script>
    function formatCardNumber(input) {
    let value = input.value.replace(/\D/g, "").substring(0,16);
    let formatted = "";
    for (let i = 0; i < value.length; i += 4) {
    formatted += value.substring(i, i + 4) + " ";
    }
    input.value = formatted.trim();
    }
    </script>
    
    
    <?php
    echo '<p>'.$_POST['responseMessage'].'</p>';
    /* Buradakiler sonuç olarak dönen veridir bunları kullanabilirsiniz
    txnCode "1000"
    responseCode "VPS-0000"
    responseMessage "BAŞARILI"
    hostResponseCode "00"
    hostMessage "000+ONAY+KODU+XXXXXX"
    txnDateTime "2025-04-05T12:06:02.000"
    merchantSafeId "20231008172012760876143660674662"
    terminalSafeId "30231008172012760876143660674662"
    cardHolderName "EK***+AK***"
    orderId "51bbffe2-aaa2-4ecf-a177-740564893429"
    authCode "089363"
    rrn "509624655937"
    batchNumber "582"
    stan "65"
    amount "500.00"
    installCount "1"
    additionalInstallCount "0"
    deferingMonth "0"
    ccbEarnedRewardAmount "3.00"
    ccbBalanceRewardAmount "1483646.99"
    ccbRewardDesc "CHIP+PARA"
    pcbEarnedRewardAmount "39.76"
    pcbBalanceRewardAmount "332807.13"
    pcbRewardDesc "Divarese+axess+may�s"
    xcbEarnedRewardAmount "0.00"
    xcbBalanceRewardAmount "28036.04"
    xcbRewardDesc "MarkaPuan+PREP"
    hashParams "txnCode+responseCode+responseMessage+hostResponseCode+hostMessage+txnDateTime+merchantSafeId+terminalSafeId+orderId+cardHolderName+authCode+rrn+batchNumber+stan+amount+installCount+additionalInstallCount+deferingMonth+ccbEarnedRewardAmount+ccbBalanceRewardAmount+ccbRewardDesc+pcbEarnedRewardAmount+pcbBalanceRewardAmount+pcbRewardDesc+xcbEarnedRewardAmount+xcbBalanceRewardAmount+xcbRewardDesc"
    hash "xTP01E7uDWLX2ONOXwjyzWqqNIF5i+2kduRqwrEfw2RCKhDqJO1jUhmNlTFJySoh3W/d9+Hjcijrzu1jqrPhZQ=="
    */
    ?>
    </body>
    </html>
    odeme.php

    <?php
    if ($_POST)
    {
    $amount = number_format((float)500, 2, '.', ''); // Ödeme miktarı
    $paymentModel = '3D_PAY';
    $txnCode = '3000';
    $merchantSafeId = '20231008172012760876143660674662'; // Test Kullanıcısı örnek bilgi
    $terminalSafeId = '30231008172012760876143660674662'; // Test Kullanıcısı örnek bilgi
    $orderId = date('YmdHis'); // Anlık sipariş numarası örnek ECZ-00021
    $lang = 'TR';
    $ccbRewardAmount = '1.00';
    $pcbRewardAmount = '1.00';
    $xcbRewardAmount = '1.00';
    $currencyCode = '949';
    $installCount = '1';
    $okUrl = 'https://eoksijen.com/ivirzivir/akbank/';
    $failUrl = 'https://eoksijen.com/ivirzivir/akbank/';
    $emailAddress = 'test@test.com';
    $creditCard = str_replace(' ', '', $_POST['cardNumber']);
    $expiredDate = $_POST['expiry'];
    $cvv = $_POST['cvc'];
    $randomNumber = '4b202386c89c63dc45b60c525c387d5150bb89a48dbbedf8b357296b5f877f7a94005cc6eed80647b8b0a25751c0e09e68ee3208b4bdeedd9f418ddfa9f92b46';
    $requestDateTime = '2025-04-05T11:00:55.314';
    $secretKey = '32303232303432313136333632303233363567733773355f6731385f72375f6733337437726773335f7674383738763567387437335f5f737272763137736735'; // Test Kullanıcısı örnek bilgi
    $data = $paymentModel.$txnCode.$merchantSafeId.$terminalSafeId.$orderId.$lang.$amount.$ccbRewardAmount.$pcbRewardAmount.$xcbRewardAmount.$currencyCode.$installCount.$okUrl.$failUrl.$emailAddress.$creditCard.$expiredDate.$cvv.$randomNumber.$requestDateTime;
    function hashToString($data, $secretKey){
    $hash = hash_hmac('sha512', $data, $secretKey, true);
    return base64_encode($hash);
    }
    $hash = hashToString($data, $secretKey);
    echo '
    <html>
    <head></head>
    <body>
    <form id="paymentForm" action="https://virtualpospaymentgatewaypre.akbank.com/securepay" method="POST">
    <input type="hidden" name="paymentModel" value="'.$paymentModel.'">
    <input type="hidden" name="txnCode" value="'.$txnCode.'">
    <input type="hidden" name="merchantSafeId" value="'.$merchantSafeId.'">
    <input type="hidden" name="terminalSafeId" value="'.$terminalSafeId.'">
    <input type="hidden" name="orderId" value="'.$orderId.'">
    <input type="hidden" name="lang" value="'.$lang.'">
    <input type="hidden" name="amount" value="'.$amount.'">
    <input type="hidden" name="ccbRewardAmount" value="'.$ccbRewardAmount.'">
    <input type="hidden" name="pcbRewardAmount" value="'.$pcbRewardAmount.'">
    <input type="hidden" name="xcbRewardAmount" value="'.$xcbRewardAmount.'">
    <input type="hidden" name="currencyCode" value="'.$currencyCode.'">
    <input type="hidden" name="installCount" value="'.$installCount.'">
    <input type="hidden" name="okUrl" value="'.$okUrl.'">
    <input type="hidden" name="failUrl" value="'.$failUrl.'">
    <input type="hidden" name="emailAddress" value="'.$emailAddress.'">
    <input type="hidden" name="creditCard" value="'.$creditCard.'">
    <input type="hidden" name="expiredDate" value="'.$expiredDate.'">
    <input type="hidden" name="cvv" value="'.$cvv.'">
    <input type="hidden" name="randomNumber" value="'.$randomNumber.'">
    <input type="hidden" name="requestDateTime" value="'.$requestDateTime.'">
    <input type="hidden" name="hash" value="'.$hash.'">
    <noscript><input type="submit" value="'.$amount.'₺ Ödeme Yap"></noscript>
    </form>
    <script>
    // Sayfa yüklendiğinde form otomatik olarak gönderilsin
    window.onload = function() {
    document.getElementById("paymentForm").submit();
    };
    </script>
    </body>
    </html>';
    
    }
    ?>
    Örnek çalışan kod : https://eoksijen.com/ivirzivir/akbank/

    İstek üzerinde farklı sistemlere entegre edilmesi konusunda ücretli destek olabilirim
  • 05-04-2025, 12:33:15
    #2
    Bir yazılımcı olarak, bankaların dinamiğindeki posların zorluğunu bildiğim için tebrik ediyorum. Paylaşım içinde çok teşekkürler.