3D olmayan işlemlerin dönüş parametreleri:

İşlem sonucu olarak RESPONSE_CODE = 2 olması işlemin başarılı olduğu anlamına gelir fakat AUTH_CODE boş veya sıfır (0) olmamalıdır.

İşlem sonucunda size gönderilen Response Hash'i (hashData) mutlaka kontrol ediniz. Şayet sizin oluşturduğunuz hash ile size gönderilen hash farklıysa bu işlem paynkolaydan gelmiyor demektir, işlemi kesmeniz gerekir.


RESPONSE_CODE: 2
RESPONSE_DATA: İşlem Başarılı
USE_3D: false
RND: 1630051651137
MERCHANT_NO: 400000001
AUTH_CODE: S00586
REFERENCE_CODE: IKSIRPF102168
CLIENT_REFERENCE_CODE: 42794212
TIMESTAMP: 2021-08-27
TRANSACTION_AMOUNT: 1.00
AUTHORIZATION_AMOUNT: 1.00
COMMISION: 0.00000000
COMMISION_RATE: null
INSTALLMENT: 1
hashData: bjb49lGdnE2D/D5Jze2/sn7Xfk0=
3D İşlem Ön Onay

3D işleminden sonra, size bankadan gelen ilk onayı gönderiyoruz. Bu onay para çekildiği anlamına gelmemektedir, bankadan gelen ön onaydır.

3D işlemlerde işlemi tamamlamak için burada gelen REFERENCE_CODE ve size ait sx değerinizle Complete Payment methodunu çağırmanız gerekmektedir.

Başarılı ön onay successUrl olarak girdiğiniz linke post edilir. İşlem başarısız olursa failUrl olarak girdiğiniz linke dönüş yapılacaktır.

İşlemin successUrl sayfasına dönmesi işlemin başarılı olduğu anlamına gelmemektedir.

AUTHORIZATION_AMOUNT karttan çekilen tutarı gösterir. İşlem sonrasında dönülen AUTHORIZATION_AMOUNT ile sizin ödeme sayfasına POST ettiğiniz amount değerini karşılaştırmanız gerekir.

İşlem sonunda size gönderilen Response Hash'i (hashData) mutlaka kontrol ediniz. Şayet sizin oluşturduğunuz hash ile size gönderilen hash farklıysa bu işlem paynkolaydan gelmiyor demektir.

3D işlemlerde işlemi tamamlamak için Complete Payment methodunu çağırmanız gerekmektedir.

3D İşlem Ön Onay Parametreleri

RESPONSE_CODE : 2
RESPONSE_DATA : İşlem Başarılı.
REFERENCE_CODE : YPsvysCzU936bJ8AnntVMvGEbjOfODCEzdkB5QrTAb2R7LmscfXcctEcbnceJiSorYOb3ipBGRK6aSpbeib1nXM3U48=
USE_3D : true
MERCHANT_NO : 400000002
AUTH_CODE :
CLIENT_REFERENCE_CODE : 24809740
TIMESTAMP : 2022-02-24 13:58:36.353
TRANSACTION_AMOUNT : 1.00
AUTHORIZATION_AMOUNT : 1.00
COMMISION : 0.00
COMMISION_RATE : 0.0000
INSTALLMENT : 1
RND : 1645700316156
hashData : +wDy2xeI1hOCnwaatSqylWhtj9E=

Burada size RESPONSE_CODE= 2 dönülmüşse ön onay işlemi başarılı demektir. ( Ön onay alınmıştır) Ödeme işlemini tamamlamak için sx değerinizle birlikte REFERENCE_CODE’u aşağıdaki linke form datası olarak body’de post etmeniz gerekmektedir.

TEST linki : https://paynkolaytest.nkolayislem.com.tr/Vpos/v1/CompletePayment
PROD linki : https://paynkolay.nkolayislem.com.tr/Vpos/v1/CompletePayment

'REFERENCE_CODE'u para çekme işlemini tamamlamak için şu şekilde post edebilirsiniz.

3D İşlem tamamlama (CompletePayment Metodu) PHP

$REFERENCE_CODE = $_POST['REFERENCE_CODE'];
$ch = curl_init();
$arrData = array(
  "sx" => "114488219|SjEH1wb6qoqWtN2X9/5Y6sVy/JxniIbR01EKWRcHxPl0iAjkadGNaNAEV5l6O3tjzcPEiFOO8OwCSb6dzo/fN/2zyv7sVbweqJvgKr7cWnMwPIgqipXBk+B7Z4bFqmeD1LlUgNMXdstufUNxmCHIfb3nT0NDrfScCxlQX8H1YYPvcNE+oTtci3fB+X/fpYec0Gu2JPAIzG74pQN07MmdHq+GSR73+RkAjMi0cP4pfjNf6C/0Igc6qcnTtYH9YIJIpRxySQ==",
  "referenceCode" => $REFERENCE_CODE
);
curl_setopt($ch, CURLOPT_URL,"https://paynkolaytest.nkolayislem.com.tr/Vpos/v1/CompletePayment");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $arrData);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$server_output = curl_exec($ch);
var_dump($server_output);
3D İşlem tamamlama (CompletePayment Metodu) .NET

var refCode = formCollection["REFERENCE_CODE"];
var formContent = new FormUrlEncodedContent(new[]
{
new KeyValuePair<string, string>("sx", SxDegeri),
new KeyValuePair<string, string>("referenceCode", refCode)
});
var client = new HttpClient();
var response = await client.PostAsync(PaymentConfirmUrl, formContent);
string responseJson = await response.Content.ReadAsStringAsync();
  
Postman Ekran Görüntüsü

Başarılı post işlemi sonrası ödeme alınır ve sonuç yine aynı sayfaya Json formatında dönülür. RESPONSE_CODE = 2 olması işlemin başarılı olduğu anlamına gelir fakat AUTH_CODE boş olmamalıdır. İşlemin başarılı olup olmadığı kontrol edilirken AUTH_CODE kontrolü de mutlaka yapılmalıdır. ( Bankadan gelen onay kodudur.)

Son Dönüş Parametreleri JSON Decode Hali


RESPONSE_CODE: 2
RESPONSE_DATA: İşlem Başarılı
REFERENCE_CODE: IKSIRPF142277040
COMMISION: 0.0400
COMMISION_RATE: 4.2000
AUTHORIZATION_AMOUNT: 1.00
TRANSACTION_AMOUNT: 1.00
BANK_CODE: 046
CLIENT_REFERENCE_CODE: 364576546|LT26s1
BANK_RESULT: Response : IKSIRPF142277040 ....
ERROR_MESSAGE:
BANK_MESSAGE: Approved
AUTH_CODE: 032880

3D İşlem Sonuç

İşlem sonucu olarak RESPONSE_CODE = 2 olması işlemin başarılı olduğu anlamına gelir fakat AUTH_CODE boş veya sıfır (0) olmamalıdır. İşlemin başarılı olup olmadığı kontrol edilirken AUTH_CODE kontrolü de mutlaka yapılmalıdır. 3D işlemlerde, işlem sonucu completePayment methodu sonucunda dönmektedir.

PHP İşlem Dönüş Parametrelerine Erişim


$ch = curl_init();

$REFERENCE_CODE = "YOUR_REFERENCE_CODE"; // Define $REFERENCE_CODE properly

$arrData = array(
  "sx" => "114488219|SjEH1wb6qoqWtN2X9/5Y6sVy/JxniIbR01EKWRcHxPl0iAjkadGNaNAEV5l6O3tjzcPEiFOO8OwCSb6dzo/fN/2zyv7sVbweqJvgKr7cWnMwPIgqipXBk+B7Z4bFqmeD1LlUgNMXdstufUNxmCHIfb3nT0NDrfScCxlQX8H1YYPvcNE+oTtci3fB+X/fpYec0Gu2JPAIzG74pQN07MmdHq+GSR73+RkAjMi0cP4pfjNf6C/0Igc6qcnTtYH9YIJIpRxySQ==",
  "referenceCode" => $REFERENCE_CODE
);

curl_setopt($ch, CURLOPT_URL, "https://paynkolaytest.nkolayislem.com.tr/Vpos/v1/CompletePayment");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $arrData);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$server_output = curl_exec($ch);

if (curl_errno($ch)) {
    echo "cURL Error: " . curl_error($ch);
} else {
    $obj = json_decode($server_output);
    if (is_object($obj)) {
        echo "
RESPONSE_CODE: " . ($obj->RESPONSE_CODE ?? 'N/A'); echo "
RESPONSE_DATA: " . ($obj->RESPONSE_DATA ?? 'N/A'); echo "
REFERENCE_CODE: " . ($obj->REFERENCE_CODE ?? 'N/A'); echo "
COMMISION: " . ($obj->COMMISION ?? 'N/A'); echo "
COMMISION_RATE: " . ($obj->COMMISION_RATE ?? 'N/A'); echo "
AUTHORIZATION_AMOUNT: " . ($obj->AUTHORIZATION_AMOUNT ?? 'N/A'); echo "
TRANSACTION_AMOUNT: " . ($obj->TRANSACTION_AMOUNT ?? 'N/A'); echo "
BANK_CODE: " . ($obj->BANK_CODE ?? 'N/A'); echo "
CLIENT_REFERENCE_CODE: " . ($obj->CLIENT_REFERENCE_CODE ?? 'N/A'); echo "
BANK_RESULT: " . ($obj->BANK_RESULT ?? 'N/A'); echo "
ERROR_MESSAGE: " . ($obj->ERROR_MESSAGE ?? 'N/A'); echo "
BANK_MESSAGE: " . ($obj->BANK_MESSAGE ?? 'N/A'); echo "
AUTH_CODE: " . ($obj->AUTH_CODE ?? 'N/A'); } else { echo "Invalid server response or JSON decoding error."; } } curl_close($ch);

Örnek Success Sayfası ( PHP )


// TEST BAŞARILI SONUÇ SAYFASI

if ($_SERVER['REQUEST_METHOD'] === 'POST') 
{
    $MERCHANT_SECRET_KEY = "_YXMmaRPOK05Gzztl9lds";

    // Input sanitization and handling missing fields
    $REFERENCE_CODE = $_POST['REFERENCE_CODE'] ?? false;
    $RESPONSE_CODE = $_POST['RESPONSE_CODE'] ?? '';
    $USE_3D = $_POST['USE_3D'] ?? '';
    $MERCHANT_NO = $_POST['MERCHANT_NO'] ?? '';
    $AUTH_CODE = $_POST['AUTH_CODE'] ?? '';
    $CLIENT_REFERENCE_CODE = $_POST['CLIENT_REFERENCE_CODE'] ?? '';
    $AUTHORIZATION_AMOUNT = $_POST['AUTHORIZATION_AMOUNT'] ?? '';
    $INSTALLMENT = $_POST['INSTALLMENT'] ?? '';
    $RND = $_POST['RND'] ?? '';
    $HASHDATA = $_POST['hashData'] ?? '';

    // Generate the hash
    $HASHTR = $MERCHANT_NO . $REFERENCE_CODE . $AUTH_CODE . $RESPONSE_CODE . $USE_3D . $RND . $INSTALLMENT . $AUTHORIZATION_AMOUNT . $MERCHANT_SECRET_KEY;
    $HASH_CREATED = base64_encode(pack('H*', sha1($HASHTR)));

    // Validate the hash
    if ($HASH_CREATED !== $HASHDATA) {
        exit('Hash verification failed.');
    }

    // If not a 3D transaction
    if ($USE_3D === "false") {
        if ($RESPONSE_CODE == 2 && $AUTH_CODE) {
            echo "Payment successful.";
        } else {
            echo "Invalid attempt.";
            exit;
        }
    } 
    // If it is a 3D transaction
    else {
        // Complete payment process
        $ch = curl_init();

        $arrData = array(
            "sx" => "114488219|SjEH1wb6qoqWtN2X9/5Y6sVy/JxniIbR01EKWRcHxPl0iAjkadGNaNAEV5l6O3tjzcPEiFOO8OwCSb6dzo/fN/2zyv7sVbweqJvgKr7cWnMwPIgqipXBk+B7Z4bFqmeD1LlUgNMXdstufUNxmCHIfb3nT0NDrfScCxlQX8H1YYPvcNE+oTtci3fB+X/fpYec0Gu2JPAIzG74pQN07MmdHq+GSR73+RkAjMi0cP4pfjNf6C/0Igc6qcnTtYH9YIJIpRxySQ==",
            "referenceCode" => $REFERENCE_CODE
        );

        curl_setopt($ch, CURLOPT_URL, "https://paynkolaytest.nkolayislem.com.tr/Vpos/v1/CompletePayment");
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $arrData);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

        $server_output = curl_exec($ch);

        // Handle cURL errors
        if (curl_errno($ch)) {
            echo "cURL Error: " . curl_error($ch);
            curl_close($ch);
            exit;
        }

        curl_close($ch);

        // Decode and validate the server response
        $obj = json_decode($server_output);

        if (is_object($obj)) {
            echo "
RESPONSE_CODE: " . ($obj->RESPONSE_CODE ?? 'N/A'); echo "
RESPONSE_DATA: " . ($obj->RESPONSE_DATA ?? 'N/A'); echo "
REFERENCE_CODE: " . ($obj->REFERENCE_CODE ?? 'N/A'); echo "
COMMISION: " . ($obj->COMMISION ?? 'N/A'); echo "
COMMISION_RATE: " . ($obj->COMMISION_RATE ?? 'N/A'); echo "
AUTHORIZATION_AMOUNT: " . ($obj->AUTHORIZATION_AMOUNT ?? 'N/A'); echo "
TRANSACTION_AMOUNT: " . ($obj->TRANSACTION_AMOUNT ?? 'N/A'); echo "
BANK_CODE: " . ($obj->BANK_CODE ?? 'N/A'); echo "
CLIENT_REFERENCE_CODE: " . ($obj->CLIENT_REFERENCE_CODE ?? 'N/A'); echo "
BANK_RESULT: " . ($obj->BANK_RESULT ?? 'N/A'); echo "
ERROR_MESSAGE: " . ($obj->ERROR_MESSAGE ?? 'N/A'); echo "
BANK_MESSAGE: " . ($obj->BANK_MESSAGE ?? 'N/A'); echo "
AUTH_CODE: " . ($obj->AUTH_CODE ?? 'N/A'); if ($obj->RESPONSE_CODE == 2 && $obj->AUTH_CODE) { echo "Payment successful."; } else { echo "Invalid attempt."; exit; } } else { echo "Invalid response format or JSON decoding error."; exit; } } }

İşlem Başarısız olursa ( Fail durumunda ) Dönüş Parametrelerine Erişim ( PHP )


foreach ($_POST as $parametre_name => $parametre_val) {
    echo "Parametre: $parametre_name; Value: $parametre_val
\n"; }