Skip to content

🧾 Ödeme Almak

🔐 1. Token Oluşturmak

Endpoint

GET /api/cardPayment/token

Açıklama

Güvenlik amaçlı token üretir. Diğer işlemler öncesinde bu token kullanılır. Ödeme almanın ilk adımı tek seferlik güvenlik tokeni oluşturmaktır.

Response: PrepareToken

json
{
  "token": "string"
}

Notlar

  • Token her işlem için tek kullanımlıktır.
  • Token süresi sınırlıdır, 5 dakika içinde kullanılmalıdır.

🛠 2. Kart Ödemesine Hazırlık

Endpoint

POST /api/cardPayment/prepare

Açıklama

Kart bilgilerinin ön doğrulaması yapılır. Asıl ödeme işlemi bu adımdan sonra başlatılır.

Request: PrepareCardPaymentRequest

json
{
  "creditCard": {
    "cardNumber": "string",
    "cvv": "string",
    "expireMonth": 1,
    "expireYear": 2025,
    "cardHolderName": "string"
  }
}

Response: HTTP 200 OK

(Başarılıysa tekrar bu istek döner. Aksi halde ProblemDetails döner.)

İpucu

  • Bu adım fraud kontrolü ve BIN analizi gibi işlemler için kullanılır.

💸 3. Kart Ödemesi

Endpoint

POST /api/cardPayment

Açıklama

Karttan ödeme işlemi yapılır. 3D Secure desteklidir.

Request: CardPaymentRequest

json
{
  "token": "string",
  "amount": 1.0,
  "installment": 1,
  "referenceCode": "unique-ref-123",
  "card": {
    "cardNumber": "string",
    "cvv": "string",
    "expireMonth": 12,
    "expireYear": 2025,
    "cardHolderName": "string"
  },
  "useStoredCard": false,
  "ownerKey": "string",
  "cardId": "uuid",
  "saveCard": false,
  "customerIp": "string",
  "reward": {
    "amount": 1.0,
    "useReward": true
  },
  "invoice": { ... },
  "shipping": { ... },
  "explanation": "Açıklama",
  "use3d": true,
  "additionalData": {
    "property1": "extra1"
  },
  "currency": "TRY",
  "email": "user@example.com",
  "phone": "5551234567",
  "returnURL": "https://example.com/return",
  "chargeType": "directSale",
  "paymentSystemId": "UUID",
  "nationalNumber": "12345678901",
  "products": [
    {
      "id": "prod-1",
      "category": "electronics",
      "quantity": 1,
      "code": "PRD001",
      "description": "Product desc",
      "price": 1.0
    }
  ]
}

Notlar

  • referenceCode her işlem için eşsiz olmalıdır.
  • use3d true ise kullanıcı 3D Secure sayfasına yönlendirilir.
  • chargeType: "directSale" ya da "provision" olabilir.
  • additionalData Bankalara gönderilecek banka özelinde değerler için kullanılır.
  • Kayıtlı kart ile ödeme yapılmak istenirse, cardId, ownerKey, useStoredCard:true gönderilmesi gerekmektedir. Bu bilgiler kart kaydı yapıldığında webhook ile size iletilen bilgilerdir.
  • Kartı ödeme sonrasında kaydetmek için saveCard:true gönderilmelidir

🧾 4. Provizyon İşleminin Tamamlanması

Endpoint

POST /api/cardPayment/provisionCommit

Açıklama

Ön provizyon işlemlerinde bloklanan tutarın gerçekten çekilmesini sağlar.

Request: ProvisionCommitRequest

json
{
  "referenceCode": "unique-ref-123",
  "amount": 1.0
}

Notlar

  • Sadece chargeType = "provision" olan işlemler için geçerlidir.
  • Tutar, ilk provizyon tutarından küçük ya da eşit olmalıdır.

❌ Ortak Hata Formatı: ProblemDetails

json
{
  "type": "Error",
  "title": "Unauthorized",
  "status": 401,
  "detail": "API key missing or invalid.",
  "instance": "/api/cardPayment"
}

İpucu

  • Uygulamada her hata bu standart yapı ile yakalanabilir.

📌 Tipler

CardPaymentRequest

FieldTypeRequiredAnnotationsAllowed ValuesDescription
tokenstringNo--Ham kart bilgisi yerine kullanılan tokenize edilmiş kart değeridir.
amountfloatYesrequired-Karttan tahsil edilecek toplam ödeme tutarıdır.
installmentintegerNo--Ödemeye uygulanacak taksit sayısını belirtir.
referenceCodestringYesrequired-İşlemi takip etmek için kullanılan benzersiz üye işyeri referans kodudur.
cardCreditCardNo--Kayıtlı kart kullanılmıyorsa ödeme için kullanılacak kart bilgileridir.
useStoredCardboolNo--Daha önce saklanmış bir kartın kullanılıp kullanılmayacağını belirtir.
ownerKeystringNo--Kart sahibini veya müşteriyi üye işyeri sisteminde tanımlayan benzersiz anahtardır.
cardIduuidNo--İşlemde kullanılacak kayıtlı kartın kimliğidir.
saveCardboolNo--Başarılı ödeme sonrası kartın saklanıp saklanmayacağını belirtir.
customerIpstringNo--İşlemi gerçekleştiren müşterinin IP adresidir.
rewardRewardUsageNo--Ödeme sırasında kullanılacak ödül veya sadakat puanı bilgileridir.
invoiceAddressNo--Müşteriye ait fatura adresi bilgileridir.
shippingAddressNo--Müşteriye ait teslimat veya gönderim adresi bilgileridir.
explanationstringNomax(400)-İşleme ait ek açıklama veya not bilgisidir.
use3dboolNo--Ödemenin 3D Secure ile işlenip işlenmeyeceğini belirtir.
additionalData{String:String}No--İşlemle birlikte gönderilen ek anahtar-değer verileridir.
currencystringYesrequired, currency (ISO4217)-Ödemenin ISO 4217 formatındaki para birimi kodudur.
emailstringYesrequired-Ödeme ile ilişkili müşteri e-posta adresidir.
phonestringYesrequired-Ödeme ile ilişkili müşteri telefon numarasıdır.
returnURLstringNourl-3D Secure veya ödeme tamamlandıktan sonra müşterinin yönlendirileceği URL adresidir.
chargeTypeSalesTypeNo-DirectSale, ProvisionGerçekleştirilecek tahsilat işlem tipini belirtir.
paymentSystemIduuidNo--Kullanılacak ödeme sistemi, banka veya sanal POS entegrasyonunun kimliğidir.
nationalNumberstringNo--Kart sahibine veya müşteriye ait ulusal kimlik numarasıdır.
productsProduct[]No--Ödeme ile ilişkili ürün veya sepet kalemlerinin listesidir.

CreditCard

FieldTypeRequiredAnnotationsAllowed ValuesDescription
cardNumberstringNo--İşlemde kullanılacak kart numarasıdır.
cvvstringNo--Kart üzerinde yer alan güvenlik kodudur.
expireMonthintegerNo--Kartın son kullanma ayıdır.
expireYearintegerNo--Kartın son kullanma yılıdır.
cardHolderNamestringNo--Kart üzerinde yazan kart sahibi adıdır.

RewardUsage

FieldTypeRequiredAnnotationsAllowed ValuesDescription
amountfloatNo--Kullanılacak ödül veya sadakat bakiyesi tutarıdır.
useRewardboolNo--Bu ödeme için ödül kullanımının aktif olup olmadığını belirtir.

Address

FieldTypeRequiredAnnotationsAllowed ValuesDescription
namestringNo--Adresle ilişkili kişinin adıdır.
surnamestringNo--Adresle ilişkili kişinin soyadıdır.
countryCodestringNo--Adresin ülke kodudur, genellikle ISO formatında beklenir.
citystringNo--Adresin şehir bilgisidir.
districtstringNo--Adresin ilçe, semt veya bölge bilgisidir.
street1stringNo--Birincil adres satırıdır.
street2stringNo--Daire, kat veya ek adres detaylarını içeren ikinci adres satırıdır.
numberstringNo--Bina veya kapı numarası bilgisidir.
postalCodestringNo--Adresin posta kodudur.
companystringNo--Varsa adresle ilişkili şirket adıdır.
phonestringNo--Adres için iletişim telefon numarasıdır.
faxstringNo--Varsa adresle ilişkili faks numarasıdır.

Product

FieldTypeRequiredAnnotationsAllowed ValuesDescription
idstringNo--Ürün veya sepet kalemine ait benzersiz kimliktir.
categorystringNo--Ürünün okunabilir kategori adıdır.
categoryCodestringNo--Ürüne ait sistem veya üye işyeri kategori kodudur.
quantityfloatNo--Sepette yer alan ürün miktarını belirtir.
codestringNo--Üye işyerine özel ürün kodu veya stok kodudur.
descriptionstringNo--Satın alınan ürün veya hizmetin açıklamasıdır.
pricefloatNo--Ürün satırına ait birim fiyat veya toplam fiyat bilgisidir.

📝 Ekstra İpuçları

  • Sandbox testleri için test kartları sağlayın (örnek: 4111 1111 1111 1111).
  • Rate Limiting uygulanabilir, aşırı istekler throttling ile engellenir.
  • Loglama yaparken kart bilgilerini (PAN, CVV) kesinlikle maskeleyin ya da loglamayın.
  • 3D Secure işlemleri için returnURL HTTPS olmalıdır.