Başlarken

Paynoloji API Dökümanına hoşgeldiniz. Dökümanlarda ödeme kronolojisi, sırasıyla adım adım ele alınmıştır ve json-post yöntemiyle çalışmaktadır.

Önemli Uyarı: Entegrasyon yapacağınız web sitesi ve ip adresinizi, Paynoloji Yönetici ekranındaki "Ayarlar - Yetkilendirme" menüsünden ekleyiniz. Aksi takdirde, servislerimizle bağlantı kurmanız mümkün olmayacaktır.

Bir sorunuz varsa [email protected] adresinden bize ulaşabilirsiniz.

Token Alma

                
// API bilgilerini tanımla
define("APP_ID", "Müşteri APP ID");
define("APP_SECRET", "Müşteri APP SECRET");

// API isteği için veri dizisini oluştur
$requestData = [
    "app_id" => APP_ID,
    "app_secret" => APP_SECRET
];

// cURL öğesini başlat
$ch = curl_init("https://api.paynoloji.com/token");

// cURL ayarlarını tanımla
curl_setopt_array($ch, [
    CURLOPT_POSTFIELDS => json_encode($requestData),
    CURLOPT_HTTPHEADER => ['Content-Type: application/json'],
    CURLOPT_RETURNTRANSFER => true
]);

// cURL isteğini gerçekleştir
$result = curl_exec($ch);

// cURL öğesini kapat
curl_close($ch);

// Sunucudan gelen cevabı çözümle
$response = json_decode($result, true);

// Elde edilen sonucu kullanma (örneğin, ekrana yazdırma)
print_r($response);
                
            

Servis Adresi: https://api.paynoloji.com/token

İstek Türü: POST / JSON

Değer Tür Açıklama
app_id string Paynoloji panelinizde API Ayarlar sayfasındaki API KEY değeri
app_secret string Paynoloji panelinizde API Ayarlar sayfasındaki API SECRET değeri

Başarılı Cevap


                    
{
    "code": 200,
    "token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.xxx",
    "createdAt": 1624625707,
    "expireAt": 1624631707
}
                    
                

Token geçerlilik süresi 1 saat olarak tanımlanmıştır.

Değer Tür Açıklama
code integer Yapılan isteğin sonucunu bildirir. İşlem başarılı ise 200 döner.
token string Bir sonraki adım olan getPos methoduna gönderilecek olan değer.
createdAt string Token oluşturma tarihi.
expireAt string Token son kullanma tarihi.

Başarısız Cevap


                
{
    "code": 404,
    "message": "Wrong app_id or app_secret"
}
                
            
Değer Tür Açıklama
code integer Yapılan isteğin sonucunu bildirir. İşlem hatalı ise aşağıdaki kodlar döner.
message string Yapılan istekteki hata mesajını belirtir.

Hata Mesajları


Hata Kodu Hata Mesajı Açıklama
404 Mandatory parameters are missing Hatalı istek türü ya da zorunlu parametrelerden birisi eksik.
414 * is required Eksik gönderilen parametreler burada belirtilir.
404 Wrong app_id or app_secret Hatalı app_id yada app_secret.

Taksit Sorgulama

                
// TOKEN bilgilerini tanımla
define("Token", "Your Token");

// Kredi ve kart bilgilerini al
$credit_amount = $_POST['amount'];
$card_number = $_POST['number'];

// API isteği için veri dizisini oluştur
$pyz_data = [
    'card_number' => $card_number,
    'amount' => $credit_amount
];

// cURL öğesini başlat
$ch = curl_init("https://api.paynoloji.com/installments");

// cURL ayarlarını tanımla
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST => true,
    CURLOPT_TIMEOUT => 5,
    CURLOPT_HTTPHEADER => ['Content-Type: application/json',
    'Authorization: Bearer Token'
    ],
    CURLOPT_POSTFIELDS => json_encode($pyz_data)
]);

// cURL isteğini gerçekleştir
$hRet = curl_exec($ch);

// cURL öğesini kapat
curl_close($ch);

// Sunucudan gelen cevabı çözümle
$pyz_res = json_decode($hRet, true);

// Cevap kodunu kontrol et ve işlem yap
if ($pyz_res['code'] == 200) {
    print($hRet);
} else {
    exit("Access denied");
}
                
            

Bu adımdan sadece kart için izin verilen taksit sayısını ve taksit oranlarını görüntüleyebilirsiniz. Taksitli satış yapmayacaksanız bir sonraki adıma geçebilirsiniz.

Servis Adresi: https://api.paynoloji.com/installments

Doğrulama Türü: Bearer Token

İstek Türü: POST / JSON

Değer Tür Zorunlu Açıklama
card_number string Evet Banka/Kredi kartı numarası
amount string / integer Evet Çekim yapılacak tutar (Numerik olmalı 2,1 kabul edilmez 2.1 kabul edilir.)
Header string Evet Header olarak Authorization: Bearer (Token) yollamanız gerekli

Başarılı Cevap


                
{
    "code": 200,
    "message": "Başarılı"
    "data": {
        "binNumber": "Your Card Bin Number",
        "amount": "1000.00",
        "type:": "0",
        "brand": "CARDFINANS",
        "family": "CARDFINANS",
        "bankName": "Finansbank A.Ş"
        "installments": [
            {
                    "commissionRate": 0,
                    "totalAmount": 1000,
                    "installmentAmount": "1000",
                    "installmentNumber": 1
            },
            {
                    "commissionRate": 5.96,
                    "totalAmount": 1059.6,
                    "installmentAmount": "59.6",
                    "installmentNumber": 2
            },
            {
                    "commissionRate": 7.83,
                    "totalAmount": 1078.3,
                    "installmentAmount": "78.3",
                    "installmentNumber": 3
            },
            {
                    "commissionRate": 9.7,
                    "totalAmount": 1097,
                    "installmentAmount": "97",
                    "installmentNumber": 4
            },
            {
                    "commissionRate": 11.56,
                    "totalAmount": 1115.6,
                    "installmentAmount": "115.6",
                    "installmentNumber": 5
            },
            {
                    "commissionRate": 13.43,
                    "totalAmount": 1134.3,
                    "installmentAmount": "134.3",
                    "installmentNumber": 6
            },
            {
                    "commissionRate": 15.3,
                    "totalAmount": 1153,
                    "installmentAmount": "153",
                    "installmentNumber": 7
            },
            {
                    "commissionRate": 10.03,
                    "totalAmount": 1100.3,
                    "installmentAmount": "110.3",
                    "installmentNumber": 8
            },
            {
                    "commissionRate": 19.04,
                    "totalAmount": 1190.4,
                    "installmentAmount": "190.4",
                    "installmentNumber": 9
            },
            {
                    "commissionRate": 20.91,
                    "totalAmount": 1209.1,
                    "installmentAmount": "209.1",
                    "installmentNumber": 10
            },
            {
                    "commissionRate": 22.78,
                    "totalAmount": 1227.8,
                    "installmentAmount": "227.8",
                    "installmentNumber": 11
            },
            {
                    "commissionRate": 24.65,
                    "totalAmount": 1246.5,
                    "installmentAmount": "246.5",
                    "installmentNumber": 12
            }
        ]
    }
}
                
            
Değer Tür Açıklama
code integer Yapılan isteğin sonucunu bildirir. İşlem başarılı ise 200 döner.
card_number string Kredi kartı numarası
amount string Tutar
store_comission string Mağazanın tek çekim komisyon oranı
installments array Karta yapılabilecek taksit listesi
details array Karta yapılabilecek taksit detayı
comission string Taksit sayısına göre belirlenen komisyon oranı.
total_amount string Taksit sayısına göre belirlenen komisyonlu toplam tutar.

Başarısız Cevap


                
{
    "code": 404,
    "message": " Invalid app_id or app_secret"
}
                
            
Değer Tür Açıklama
code integer Yapılan isteğin sonucunu bildirir. İşlem hatalı ise aşağıdaki kodlar döner.
message string Yapılan istekteki hata mesajını belirtir.

Hata Mesajları


Hata Kodu Hata Mesajı Açıklama
404 Mandatory parameters are missing Hatalı istek türü ya da zorunlu parametrelerden birisi eksik.
411 * is required Eksik gönderilen parametreler burada belirtilir.
404 Token is missing Bearer token gönderilmedi.
400 Access denied Bearer token hatalı yada süresi dolmuş.
408 Undefined Card Number Tanımlanmamış yada hatalı kart numarası.
403 Foreign Cards are not Allowed for this Merchant Mağazada yabancı kart kullanılamaz.
403 Undefined Pos ID Tanımlanmamış Pos.
406 getPos Error Pos hatası.
500 System Error Sistem hatası.
410 The credit card must be 16 digits Kart numarası 16 karakterden oluşmalı.
406 Merchant is not active Mağaza aktif değil.

Ödeme Tamamlama


                    
// Ödeme bilgilerini içeren veri dizisini oluştur
$paymentData = [
    "card_holder" => $name,
    "card_number" => $number,
    "exp_month" => $month,
    "exp_year" => $year,
    "cvv" => $cvc2,
    "amount" => $price,
    "payment_token" => $result->payToken,
    "redirect_url" => $redirect,
    "other_code" => $id,
    "note" => $note
];

// cURL öğesini başlat
$ch = curl_init("https://api.paynoloji.com/pay3D");

// cURL ayarlarını tanımla
curl_setopt_array($ch, [
    CURLOPT_POSTFIELDS => json_encode($paymentData),
    CURLOPT_HTTPHEADER => ['Content-Type: application/json'],
    CURLOPT_RETURNTRANSFER => true
]);

// cURL isteğini gerçekleştir
$result = curl_exec($ch);

// cURL öğesini kapat
curl_close($ch);

// Sunucudan gelen cevabı çözümle
$result = json_decode($result, true);

// Elde edilen sonucu kullanma (örneğin, ekrana yazdırma)
print_r($result);
                    
                

Servis Adresi: https://api.paynoloji.com/pay3D

İstek Türü: POST / JSON

Değer Tür Zorunlu Açıklama
card_holder string Evet Banka/Kredi kartının üzerindeki isim.
card_number string Evet Banka/Kredi kartı numarası. (Bir önceki getPos methoduna gönderilen kart ile aynı olmalı)
exp_month string Evet Banka/Kredi kartı son kullanma tarihi (Ay)
exp_year string Evet Banka/Kredi kartı son kullanma tarihi (Yıl)
cvv string Evet Banka/Kredi CVV kodu (Yıl)
amount string / integer Evet Çekim yapılacak tutar (Numerik olmalı 2,1 kabul edilmez 2.1 doğru olanı).
Bir önceki getPos apisine gönderilen amount ile aynı olmalı
currency string Hayır Para birim (Varsayılan TRY)
installment string / integer Evet Taksit sayısı (Zorunlu değil boş gönderilirse tek çekim yapılır.)
redirectOkUrl string Evet 3D işleminde sonra dönülecek başarılı callback adresi.
redirectFailUrl string Evet 3D işleminde sonra dönülecek başarısız callback adresi.
notifyUrl string Evet 3D işleminde sonra dönülecek callback adresi.
paymentID string Evet Benzersiz sipariş kodu.(pay3D methoduna gönderilen her istekte parametre değeri farklı olmalı)
note string Hayır Sipariş açıklaması

Başarılı Cevap


                    
{
    "status": true,
    "code": 200,
    "redirectUrl": "https://api.paynoloji.com/redirect/xxx",
}
                    
                
Değer Tür Açıklama
status boolean Yapılan isteğin sonucunu bildirir. İşlem başarılı ise true döner.
code integer Yapılan isteğin sonucunu bildirir. İşlem başarılı ise 200 döner.
redirectUrl string Ödeme için yönlendirilecek güvenli 3D sayfası.

Başarısız Cevap


                    
{
    "code": 404,
    "message": " Token is missing"
}
                    
                
Değer Tür Açıklama
code integer Yapılan isteğin sonucunu bildirir. İşlem hatalı ise aşağıdaki kodlar döner.
message string Yapılan istekteki hata mesajını belirtir.

Hata Mesajları


Hata Kodu Hata Mesajı Açıklama
403 Api is not active in the merchant Mağaza apisi aktif değil.
402 This payment token already used payment_token değeri daha önce kullanılmış.
getPos apisinden alınan payment_token sadece 1 kere kullanılır (3D sayfasına başarıyla yönlenmiş transactionlar için geçerli)
402 other_code must be unique other_code parametresi benzersiz olmalı.
403 Payment token and card number do not match getPos apisinde gönderilen kart numarası ile pay3D apisine gönderilen kart numarasını aynı değil.
403 Payment token and amount do not match getPos apisinde gönderilen tutar ile pay3D apisine gönderilen tutar aynı değil.
410 Installment must be numeric Taksit sayısı numerik olmalı.
412 Non-permitted installment getPos apisinden alınan taksitlerden farklı bir taksit sayısı gönderildi.
500 Installment Error - ... Taksit hatası - Gönderilen taksit sayısı oranlar tablosunda bulunamadı.
404 Wrong payment token payment_token değeri hatalı.
500 System Error Sistem hatası.
410 The credit card must be 16 digits Kart numarası 16 karakterden oluşmalı.
406 Merchant is not active Mağaza aktif değil.

Sonuç


Başarılı Cevap


                    
{
    "status": true,
    "resultCode": 200,
    "resultMessage": 'Payment successful',
    "VerifyHash": 'ece8dc908184c31dcc3d7247eae083572a712709',
    "otherCode": 'afafb566cdea0aa37477324b702f0ba6',
    "saleID": 2452
}
                    
                
Değer Tür Açıklama
status boolean Ödemenin sonucunu bildirir. İşlem başarılı ise true döner.
resultCode integer Ödemenin sonucunu bildirir. İşlem başarılı ise 200 döner.
resultMessage string Payment successful.
VerifyHash string Gelen cevabı doğrulamak için SHA256 ile şifrelenmiş değerdir.
otherCode string pay3D methodunda gönderilen benzersiz kod.
saleID integer Paynoloji tarafında oluşturulan satışın ID'si

Başarısız Cevap


                    
{
    "status": false,
    "resultCode": 302,
    "resultMessage": '3D Tamamlanmadı',
    "VerifyHash": 'ece8dc908184c31dcc3d7247eae083572a712709',
    "otherCode": 'afafb566cdea0aa37477324b702f0ba6',
    "saleID": 2452
}
                    
                
Değer Tür Açıklama
status boolean Ödemenin sonucunu bildirir. İşlem başarısız ise false döner.
resultCode integer Ödemenin sonucunu bildirir. İşlem başarısız ise hata kodu döner.
resultMessage string Başarısız ödemenin hata mesajını belirtir.
VerifyHash string Gelen cevabı doğrulamak için SHA256 ile şifrelenmiş değerdir.
otherCode string pay3D methodunda gönderilen benzersiz kod.
saleID integer Paynoloji tarafında oluşturulan satışın ID'si

VerifyHash Doğrulama


                    
$VerifyHash = hash("sha256", 'APP_ID_DEGERI' . "|" . 'APP_SECRET_DEGERI' . "|" . 'OTHER_CODE_DEGERI' . "|true");
if($VerifyHash == $_POST['VerifyHash']) {
    $payment_status = true;
} else {
    $payment_status = false;
}
                    
                

VerifyHash kodunu aşağıdaki gibi oluşturup post ile gelen veriyi ile eşleştirerek güvenlik önleminizi arttırabilirsiniz.

Hazır PHP Kodu


                    
define("APP_ID", "XXXXXXXXXXXXX");
define("APP_SECRET", "XXXXXXXXXXXXX");
define("CALLBACK_URL", "https://website.com/callback.php");

$pyz_data = [
    'app_id' => APP_ID,
    'app_secret' => APP_SECRET
];

$hCon = curl_init("https://api.paynoloji.com/token");
curl_setopt_array($hCon, [
    CURLOPT_USERAGENT => APP_ID,
    CURLOPT_RETURNTRANSFER => 1,
    CURLOPT_POST => 1,
    CURLOPT_HTTPHEADER => ['Content-Type:application/json'],
    CURLOPT_POSTFIELDS => json_encode($pyz_data)
]);
$hRet = curl_exec($hCon);
curl_close($hCon);

$pyz_res = json_decode($hRet, true);

if ($pyz_res['code'] == 200) {
    $authToken = $pyz_res['token'];

    $data = [
        'card_number' => $_POST['number'],
        'amount' => $_POST['amount']
    ];

    $hCon = curl_init("https://api.paynoloji.com/installments");
    curl_setopt_array($hCon, [
        CURLOPT_USERAGENT => APP_ID,
        CURLOPT_RETURNTRANSFER => 1,
        CURLOPT_POST => 1,
        CURLOPT_HTTPHEADER => ['Content-Type:application/json', "Authorization: Bearer " . $authToken],
        CURLOPT_POSTFIELDS => json_encode($data)
    ]);
    $hRet = curl_exec($hCon);
    curl_close($hCon);

    $pyz_res = json_decode($hRet, true);

    if ($pyz_res['code'] == 200) {
        $payToken = $pyz_res['payToken'];

        $other_code = md5(time());

        $pyz_data = [
            'card_holder' => $_POST['name'],
            'card_number' => $_POST['number'],
            'exp_month' => $_POST['expiry_month'],
            'exp_year' => $_POST['expiry_year'],
            'cvv' => $_POST['cvv'],
            'amount' => $_POST['amount'],
            'redirectOkUrl' => redirectOkUrl,
            'redirectFailUrl' => redirectFailUrl,
            'redirectOkUrl' => notifyUrl,
            'paymentID' => paymentID,
            'note' => note,
            'currency' => currency,
            'installment' => $_POST['installment'], // Taksitli kurgu yoksa 1 olarak gönderiniz.
        ];

        $hCon = curl_init("https://api.paynoloji.com/pay3D");
        curl_setopt_array($hCon, [
            CURLOPT_USERAGENT => APP_ID,
            CURLOPT_RETURNTRANSFER => 1,
            CURLOPT_POST => 1,
            CURLOPT_HTTPHEADER => ['Content-Type:application/json', "Authorization: Bearer " . $authToken],
            CURLOPT_POSTFIELDS => json_encode($pyz_data)
        ]);
        $hRet = curl_exec($hCon);
        curl_close($hCon);

        $pyz_res = json_decode($hRet, true);

        $redirectUrl = $pyz_res['redirectUrl'];

        header("Location: {$redirectUrl}");

        exit();
    } else {
        exit("payToken: jeton alınamadı.");
    }
} else {
    exit("authToken: jeton alınamadı.");
}
                    
                

Php ile tek çekimli ödeme başlatma kodlarını inceleyebilir dilerseniz buraya tıklayarak indirebilirsiniz.

Taksitli satış kurgusu için adımları incelemeniz gerekmektedir.

Örnek PHP Kodu


                    
define("APP_ID", "XXXXXXXXXXXXX");
define("APP_SECRET", "XXXXXXXXXXXXX");

if (isset($_POST['VerifyHash']) AND isset($_POST['otherCode'])) {

    $status 		= $_POST['status'];
    $VerifyHash 	= $_POST['VerifyHash'];
    $otherCode 		= $_POST['otherCode'];
    $saleID 		= $_POST['saleID'];

    $verify_key = APP_ID . '|' . APP_SECRET . '|' . $otherCode . '|true';

    if ($status == 1 AND $VerifyHash == hash("sha256", $verify_key)) {

        print("Ödemeniz başarılı.");

    }else{

        $result_code    = $_POST['resultCode'];
        $result_message = $_POST['resultMessage'];

        print($result_code, $result_message);

        exit();

    }

}
                    
                

Php ile geri dönüş kodlarını inceleyebilir dilerseniz buraya tıklayarak indirebilirsiniz.