DOCS
Panel Giriş Başvurun

3DS

Ödeme Oluşturma

3D Secure ödemeyi başlatır ve sonuçlandırırsınız: isteği use3D=true ile gönderir, dönen banka doğrulama formunu müşteriye basar, adresinize gelen imzalı sonucu doğrularsınız; 2 aşamalı moddaysanız ödemeyi CompletePayment ile provizyona alırsınız.

Uç Nokta

Test POST https://paynkolaytest.nkolayislem.com.tr/Vpos/v1/Payment

Canlı POST https://paynkolay.nkolayislem.com.tr/Vpos/v1/Payment

Gövde application/x-www-form-urlencoded

Canlı ortama geçerken: canlı uç yalnızca sunucu tarafından yapılan istekleri kabul eder — localhost üzerinden gönderilen istekler güvenlik hatasıyla reddedilir. Bağlantı için en az TLS 1.2 gerekir.

İstek

İstek alanları Non-3DS ödeme oluşturma isteğiyle birebir aynıdır — tek fark use3D=true gönderilmesidir; imza da aynı hashDatav2 formülüyle üretilir.

Fark — form-data
use3D=true   # diğer tüm alanlar Ödeme Oluşturma isteğiyle aynı

3D Formunu Ekrana Basma

Yanıttaki BANK_REQUEST_MESSAGE alanı, bankanın 3D Secure sayfasına yönlendiren bir HTML form içerir. Kaçış karakterlerini (\r, \n, \") temizleyip bu içeriği olduğu gibi tarayıcıya bastığınızda bankanın 3D penceresi açılır ve müşteriden SMS/şifre doğrulaması beklenir:

$data = json_decode($response, true);
$form = $data['BANK_REQUEST_MESSAGE'] ?? '';

// kaçış karakterlerini temizle, formu olduğu gibi ekrana bas
$form = str_replace(["\r", "\n", '\"'], ["", "", '"'], $form);
echo $form;
const data = await response.json();
let form = data.BANK_REQUEST_MESSAGE ?? '';

// kaçış karakterlerini temizle, formu olduğu gibi tarayıcıya gönder
form = form.replaceAll('\r', '').replaceAll('\n', '').replaceAll('\"', '"');
res.type('html').send(form);

Sonucun Adresinize Dönüşü

Doğrulama tamamlandığında sonuç, form POST olarak successUrl / failUrl adresinize gelir. Başlıca alanlar:

AlanAçıklama
RESPONSE_CODEİşlem sonucu — başarı için 2 olmalı
RESPONSE_DATASonuç mesajı
AUTH_CODEBanka onay kodu — boş, 0 ya da 00 ise işlem başarısızdır
REFERENCE_CODEPaynkolay işlem referansı (iptal/iade ve tamamlama çağrılarında kullanılır)
CLIENT_REFERENCE_CODESizin gönderdiğiniz clientRefCode
TRANSACTION_AMOUNT / AUTHORIZATION_AMOUNTGönderilen ve provizyonu alınan tutar — gönderdiğiniz tutarla karşılaştırın
INSTALLMENTTaksit sayısı
USE_3D · RNDAkış bilgisi ve zaman değeri
hashDataV2Yanıt imzası — doğrulanmadan sipariş onaylanmaz

Altın Kural: yalnızca RESPONSE_CODE=2, geçerli bir AUTH_CODE ve doğrulanmış hashDataV2 birlikteyse ödeme başarılıdır; AUTHORIZATION_AMOUNT da gönderdiğiniz tutarla eşleşmelidir. Hazır kontrol fonksiyonu Ödeme Sonucu sayfasındadır.

2 Aşamalı 3D — Ödemeyi Tamamlama (CompletePayment)

2 Aşamalı 3D Secure kullanılıyorsa (AUTOCOMPLETE=false) otomatik provizyon devre dışıdır: doğrulama adımından sonra ödemenin durumu TAMAMLANMAMIŞ İŞLEM olur. Bu durumdaki ödemeyi provizyona almak için CompletePayment çağrısı yaparsınız; provizyon, daha önce alınmış doğrulama verileriyle gerçekleştirilir.

Test POST https://paynkolaytest.nkolayislem.com.tr/Vpos/v1/CompletePayment

Gövde application/x-www-form-urlencoded

ParametreTipZorunluAçıklama
SxstringSize verilen sx değeriniz
ReferenceCodestringTamamlanacak işlemin referans kodu
Örnek İstek — cURL
curl -X POST "https://paynkolaytest.nkolayislem.com.tr/Vpos/v1/CompletePayment" \
  -d "Sx=118591467|W8a1JLU8A5Cw…FbOO5A==" \
  -d "ReferenceCode=IKSIRPF142277040"

CompletePayment Yanıtları

Başarılı Yanıt — 200
{
  "RESPONSE_CODE": 2,
  "RESPONSE_DATA": "İşlem Başarılı.",
  "REFERENCE_CODE": "IKSIRPF142277040",
  "USE_3D": true,
  "AUTH_CODE": "345344",
  "CLIENT_REFERENCE_CODE": "24809740|988922",
  "TRANSACTION_AMOUNT": 1,
  "AUTHORIZATION_AMOUNT": 1,
  "INSTALLMENT": 1,
  "RND": "1645700316156",
  "hashDataV2": "lunnRyNfDu6pdpNjjlFrlATE4PjUluM8…"
}
Hatalı Yanıt — ReferenceCode boş
{
  "RESPONSE_CODE": 0,
  "RESPONSE_DATA": "referenceCode boş veya null set edilemez"
}

Son güncelleme: 11 Eylül 2026

v8 · Versiyonlar