Ana içeriğe geç

Ödeme Başlatma ve Tamamlama

  • Endpoint: /pws/payment
  • HTTP Method: POST
  • Request Content-Type: application/json
  • Response Content-Type: application/json
  • Yetkilendirme: Geçerli AccessToken zorunludur.
    (Bkz: 2. Kimlik Doğrulama – AccessToken Alınması)

Açıklama

Bu servis bir kart ödemesini başlatır**.**

  • 3D’li ödeme: Banka OTP (3D Secure) adımı için redirectUrl döner; kullanıcı OTP’yi bankanın sayfasında tamamlar. Ardından otoCommit ile işlem otomatik finalize edilir (başarılı/başarısız).

  • 3D’siz ödeme: Banka tarafı provizyonu başarılıysa OTP olmadan işlem anında tamamlanır (otoCommit anında gerçekleşir); redirectUrl dönmez.

Önemli: transactionStatusId alanı akışın durumunu verir (bkz. “Durum Kodları” bölümü).

Header Bilgileri

Header AdıZorunluAçıklama
AuthorizationEvetBearer {AccessToken} formatında geçerli token.
Content-TypeHayırapplication/json

Request Body

Üst Düzey Alanlar

AlanTipZorunluAçıklama
agentCodestringEvetİşlem sahibi bayi/alt bayi/müşteri kodu (sistem kurallarına göre zorunlu)
amountnumberEvetİşlem tutarı
installmentintEvetTaksit sayısı (tek çekim için 1)
tenantPosIdstringEvetKullanılacak POS’un tenant kimliği (GUID)
paymentSetDefinitionIdstringEvetÖdeme seti kimliği (GUID)
currencyCodestringEvetPara birimi (örn. TRY)
use3DbooleanEvet3D Secure kullanılsın mı
returnUrlstring3D’de Evet3D akışında OTP tamamlandıktan sonra dönüş URL’si
clientOrderReferenceCodestringHayırÜye işyeri/uygulama sipariş referansı (idempotency takibi için önerilir)
contactobjectEvetKart sahibi iletişim bilgileri (aşağıda)
cardobjectEvetKart bilgileri (aşağıda)

Contact Alanı

AlanTipZorunluAçıklama
namestringEvetAd
surnamestringEvetSoyad
emailstringEvetE-posta
tcknstringHayırTCKN (yerel regülasyonlara göre zorunlu olabilir)
descriptionstringHayırAçıklama
phonestringHayırGSM

Card Alanı

AlanTipZorunluAçıklama
cardNumberstringEvetKart numarası (PAN)
cardHolderNamestringEvetKart üzerindeki ad-soyad
cvvstringEvetGüvenlik kodu
expMonthintEvetSon kullanma ayı (1–12)
expYearintEvetSon kullanma yılı (YYYY)

Response Yapısı

Kök alanlar

AlanTipAçıklama
messagestring/nullGenel mesaj
statusCodeintHTTP benzeri durum kodu (işlemsel)
exceptionsanyHata ayrıntıları (varsa)
dataobjectİşleme ait sonuçlar
oldDataanyGeriye dönük veri (varsa)
errorsanyHata listesi (varsa)

data nesnesi

AlanTipAçıklama
redirectUrlstring/null3D’li akışta OTP için yönlendirme URL’si; 3D’siz akışta null
referenceNumberstringSistem referans numarası (ör. NTH2P00000002248)
transactionStatusIdintİşlem durum kodu (bkz. “Durum Kodları”)
errorMessagestring/nullBanka/işlem hata mesajı (varsa)
errorCodestring/nullBanka/işlem hata kodu (varsa)
isMembershipCompletedbooleanÜyelik/kayıt süreçleriyle ilişkili durum (varsa)
currentAccountIdstring/nullİlişkili cari hesap kimliği (varsa)
bonusTextstring/nullBonus/puan bilgisi (varsa)
memberIdstring (GUID)Üye/müşteri kimliği
transactionIdstring (GUID)İşlem kimliği
remainingErrorCountint/nullKalan deneme sayısı (varsa)

Akışlar (Adım Adım)

3D’li Ödeme Akışı (use3D: true)

  1. Ödeme İsteği (POST /pws/payment)

    İstek geçerliyse yanıt data.redirectUrl ve referenceNumber ile döner; transactionStatusId tipik olarak 4: “3D doğrulama bekleniyor” durumundadır**.**

  2. OTP Adımı (Bankanın 3D Sayfası)

    Müşteri redirectUrl’e yönlendirilir ve OTP doğrulamasını bankanın sayfasında tamamlar. Banka sonucunu (başarılı/başarısız) ödeme sistemine iletir.

  3. OtoCommit (Otomatik Tamamlama)

    • OTP başarılı ise: İşlem başarıyla tamamlanır.
    • OTP başarısız ise: İşlem başarısız olur**.**
  4. Son Durumun Sorgulanması (Önerilir)

    İşlem durumunu teyit etmek için /pws/payment/transaction veya iptal/iade gibi sonraki adımlar kullanılabilir.

**`POST https://pgw.netahsilatdemo.com/pws/payment`** 

{
"contact": {
"name": "John",
"surname": "Doe",
"email": "[email protected]",
"tckn": "00000000000",
"description": "test",
"phone": "5000000000"
},
"card": {
"cardNumber": "4155650100416111",
"cardHolderName": "Test Test",
"cvv": "715",
"expMonth": 1,
"expYear": 2050
},
"agentCode": "NT53240185",
"amount": 52,
"installment": 1,
"tenantPosId": "384badef-11ec-ee11-98f2-005056b0d2e5",
"paymentSetDefinitionId": "504978bf-bebd-40c5-89aa-b76f3a20341c",
"currencyCode": "TRY",
"use3D": true,
"returnUrl": "https://google.com",
"clientOrderReferenceCode": "11001122010"
}

OTP Sonrası

  • OTP başarılı → sistem otoCommit yapar ve işlem tamamlanır.
  • OTP başarısız → işlem tamamlanamaz.

3D’siz Ödeme Akışı (use3D: false)

  1. Ödeme İsteği (POST /pws/payment)

    Banka provizyonu anında değerlendirilir. Başarılıysa işlem anında tamamlanır (redirectUrl = null).

  2. OtoCommit (Anlık)

    3D olmadığı için OTP yoktur; işlem banka yanıtına göre anında başarılı/başarısız final duruma geçer.

  3. Son Durumun Sorgulanması (Opsiyonel/Önerilir)

    İşlem teyidi/raporlama için /pws/payment/transaction kullanılabilir.

POST https://pgw.netahsilatdemo.com/pws/payment  

{
"contact": {
"name": "John",
"surname": "Doe",
"email": "[email protected]",
"tckn": "00000000000",
"description": "test",
"phone": "5000000000"
},
"card": {
"cardNumber": "4155650100416111",
"cardHolderName": "Test Test",
"cvv": "715",
"expMonth": 1,
"expYear": 2050
},
"agentCode": "NT53240185",
"amount": 53,
"installment": 1,
"tenantPosId": "384badef-11ec-ee11-98f2-005056b0d2e5",
"paymentSetDefinitionId": "504978bf-bebd-40c5-89aa-b76f3a20341c",
"currencyCode": "TRY",
"use3D": false,
"returnUrl": "https://google.com",
"clientOrderReferenceCode": "11001122011"
}

Not: 3D’siz akışta OTP yoktur. transactionStatusId çoğunlukla 1 (Başarılı) döner; başarısız durumda uygun hata bilgileri (errorCode, errorMessage) ile dönebilir.

Durum Kodları (transactionStatusId) – Örnek Haritalama

Not: Gerçek/nihai değerler sistem kurulumuna göre değişebilir; aşağıdaki harita belgelendirme amaçlıdır.

KodDurumAçıklama
1Ödeme BaşarılıProvizyon + capture tamam
2Ödeme BaşarısızBanka/işlemsel hata
3Bekliyor / İşlemdeAsenkron/ara durum
43D Doğrulama BekleniyorredirectUrl döner, OTP sonucu beklenecek
5İptal EdildiSonradan iptal
6İade Edildi / Kısmi İadeSonradan iade

### Notlar & En İyi Uygulamalar {#notes-and-best-practices}

  • 3D (OTP) Akışı: use3D=true ise returnUrl mutlaka geçerli olmalı. OTP sonucu sistemce alınır ve otoCommit ile finalize edilir.

  • 3D’siz Akış: OTP yoktur; banka yanıtına göre anında finalize olur.

  • Provizyonlu Ödeme: Ödeme Seti “Ödeme Tipi” Provizyon seçiliyse, ödeme işlemi provizyonlu olarak gerçekleşir.

  • POS/Set Senkronu: tenantPosId ve paymentSetDefinitionId, /pws/paymentOptions çıktılarıyla uyumlu olmalı (taksit/komisyon seçimi buradan belirlenir).

  • Idempotency: Aynı sipariş için birden fazla deneme yapma ihtimali varsa clientOrderReferenceCode benzersiz tutulmalı.

  • Taksit Kuralları: Kart programı/BIN’e göre taksit kısıtları olabilir; /pws/paymentOptions/{bin} ile önceden doğrulama önerilir.

  • Hata Yönetimi: errorCode + errorMessage alanları banka/işlem kaynaklı hataların kök nedenini verir. Retri politikalarını bu kodlara göre belirleyin.

  • Güvenlik: Kart verilerini sadece TLS 1.2+ üzerinden gönderin. PCI-DSS gereksinimlerine uyun; kart verisini log’lamayın.

  • Durum Sorgulama: İşlem sonucu kritik ise /pws/payment/transaction ile referans numarası üzerinden son durumu doğrulayın.

  • Sonraki Adımlar: Başarılı işlemler için iptal/iade gereksinimi olursa /pws/payment/cancel ve /pws/payment/refund uç noktalarını kullanın.