Skip to main content
https://js.tahsilat.com/v1/tahsilat.js

İstek
const tahsilat = new TahsilatSDK('pk_test_wsg...');
const elements = tahsilat.elements();

const paymentElement = elements.create('payment', {
    amount: 10000,
    metadata: [
      { key: "order_id", value: "123456" },
      { key: "customer_type", value: "premium" }
    ],
});

// İlgili element içine ödeme formunu yerleştirin
paymentElement.mount('#payment-element');

Direkt Ödeme Yönlendirme
Bu yöntem müşteriyi doğrudan Tahsilat ödeme sayfasına yönlendirir.
const tahsilat = new TahsilatSDK('pk_test_wsg...');

async function initiatePayment() {
    try {
        await tahsilat.redirectToPayment({
            amount: 61900,
            metadata: [
              { key: "order_id", value: "123456" },
              { key: "customer_type", value: "premium" }
            ],
        });
    } catch (error) {
        console.error('Ödeme hatası:', error);
    }
}

initiatePayment();
Secret key sadece arka uçta kullanılmalı ve asla açıkta olmamalıdır. Public key’i güvenle mobil ve web uygulamalarınızda kullanabilirsiniz.
Tahsilat.js SDK, herhangi bir backend altyapısı gerektirmeden, doğrudan tarayıcı üzerinden güvenli ödeme işlemleri başlatmanıza olanak tanır. SDK, PCI-DSS uyumlu ödeme formlarını iframe veya redirect yöntemiyle entegre etmenizi sağlar.
Tahsilat.js, modern web uygulamalarında ödeme entegrasyonunu kolaylaştıran güçlü bir JavaScript SDK’dır. Hassas kart bilgilerinin hiçbir zaman sunucularınızdan geçmemesini sağlayarak PCI uyumluluk yükünüzü minimize eder.
Entegrasyon sürecinde hata takibi için tarayıcı konsolunu takip ediniz.
Ödeme tutarı ile ürünler arasındaki toplam tutarın eşleşmesi gerekmektedir. Aksi takdirde, ödeme reddedilir.
Tahsilat JS sadece “Public Key” ile çalışır. Entegrasyon aşamasında isterseniz herhangi bir div elementine ödeme formunu yerleştirebilir ya da redirectToPayment metodu ile direkt ödeme sayfasına yönlendirebilirsiniz. Ödeme formu, Tahsilat.js SDK tarafından sağlanan payment elementi ile oluşturulur.

1. Direkt Ödeme

Ürün ya da müşteri bilgisi belirtmeden doğrudan ödeme isteği tanımlayabilirsiniz:
const tahsilat = new TahsilatSDK('pk_test_wsg...');
const elements = tahsilat.elements();

const paymentElement = elements.create('payment', {
    amount: 10000,
    metadata: [
        { key: "order_id", value: "123456" },
        { key: "customer_type", value: "premium" }
    ],
});

// İlgili element içine ödeme formunu yerleştirin
paymentElement.mount('#payment-element');

2. Doğrudan Ürün Bilgileri ile Ödeme

Ürün bilgilerini doğrudan ödeme isteği içerisinde tanımlayabilirsiniz:
const tahsilat = new TahsilatSDK('pk_test_wsg...');
const elements = tahsilat.elements();

const paymentElement = elements.create('payment', {
    amount: 10000,
    products: [
        {
            product_name: 'Test Product',
            price: 10000,
            description: "This is a test product"
        }
    ],
    metadata: [
        { key: "order_id", value: "123456" },
        { key: "customer_type", value: "premium" }
    ],
});

// İlgili element içine ödeme formunu yerleştirin
paymentElement.mount('#payment-element');

3. Ürün ID’leri ile Ödeme

Önceden oluşturulmuş ürünlerin ID’lerini kullanarak ödeme başlatabilirsiniz bu durumda ürünleriniz hakkında raporlama ve analiz yapabilirsiniz: Ürün oluşturmak için Ürünler sayfasını ziyaret edebilirsiniz.
const tahsilat = new TahsilatSDK('pk_test_wsg...');
const elements = tahsilat.elements();

const paymentElement = elements.create('payment', {
    amount: 10000,
    product_ids: ['11111111111111', '2222222222222'],
    metadata: [
        { key: "order_id", value: "123456" },
        { key: "customer_type", value: "premium" }
    ],
});

// İlgili element içine ödeme formunu yerleştirin
paymentElement.mount('#payment-element');

4. Müşteri ile İlişkilendirilmiş Ödeme

Mevcut bir müşteriyi ödeme ile ilişkilendirmek için customer_id parametresini kullanabilirsiniz. Bu durumda ödeme esnasında müşteri bilgileri tekrardan alınmaz: Müşteri oluşturmak için Müşteriler sayfasını ziyaret edebilirsiniz.
const tahsilat = new TahsilatSDK('pk_test_wsg...');
const elements = tahsilat.elements();

const paymentElement = elements.create('payment', {
    amount: 10000,
    customer_id: 123456789,
    product_ids: ['11111111111111', '2222222222222'],
    metadata: [
        { key: "order_id", value: "123456" },
        { key: "customer_type", value: "premium" }
    ],
});

// İlgili element içine ödeme formunu yerleştirin
paymentElement.mount('#payment-element');

5. Direkt Ödeme Yönlendirme

Tahsilat.js SDK, ödeme işlemlerini doğrudan Tahsilat ödeme sayfasına yönlendirme sunar. Bu yöntem, iframe kullanmadan, kullanıcıyı Tahsilat ödeme sayfasına yönlendirerek ödeme işlemini başlatmanızı sağlar.
const tahsilat = new TahsilatSDK('pk_test_wsg...');

async function initiatePayment() {
    try {
        await tahsilat.redirectToPayment({
            amount: 61900,
            products: [
                {
                    product_name: 'Test Product',
                    price: 61900,
                    description: "This is a test product"
                }
            ],
            metadata: [
                { key: "order_id", value: "123456" },
                { key: "customer_type", value: "premium" }
            ],
        });
    } catch (error) {
        console.error('Ödeme hatası:', error);
    }
}

initiatePayment();
Ödeme isteği oluşturulurken customer_id gönderilmemesi durumunda her ödeme için müşteri bilgileri tekrar alınır ve yeni bir müşteri oluşturulur. Bu durumda müşteri takibi ve raporlama süreci zorlaşabilir.Üye işyeri arayüzünden ya da Müşteriler sayfasından api aracılığı ile müşteri oluşturarak customer_id parametresini kullanabilirsiniz.
Ödeme sonuçlarını alabilmek için backend tarafında Tahsilat API ile entegre olabilir ya da direkt post message sonuçlarını dinleyebilirsiniz. Webhook olayları en güvenilir yöntemdir.

Ödeme Sonuçlarını Dinleme

Tahsilat.js SDK, ödeme işlemlerinin sonuçlarını event listener’lar aracılığıyla yakalamanızı sağlar. Bu sayede ödeme başarılı, başarısız veya iptal edildiğinde kullanıcıya bilgi verebilir ve gerekli aksiyonları alabilirsiniz.
Eğer ödemeyi pre_auth: true ile başlattıysanız, sonuç aldığınızda is_pre_auth değerini kontrol edin. true dönmesi durumunda ödeme başarılıdır ancak tutar karttan çekilmemiş, yalnızca bloke edilmiştir. Bloke edilen tutarı çekmek için ayrıca ön provizyonu kapatma işlemi yapmanız gerekmektedir.
const tahsilat = new TahsilatSDK('pk_test_wsg...');
const elements = tahsilat.elements();

const paymentElement = elements.create('payment', {
    amount: 10000,
    metadata: [
        { key: "order_id", value: "123456" }
    ],
});

// Başarılı ödeme
tahsilat.on('paymentSuccess', function(data) {
    console.log('Ödeme başarılı:', data);
    // Örnek: Teşekkür sayfasına yönlendir
});

// Başarısız ödeme
tahsilat.on('paymentError', function(data) {
    console.log('Ödeme hatası:', data);
    // Örnek: Kullanıcıya hata mesajı göster
});

// İptal edilen ödeme
tahsilat.on('paymentCancelled', function(data) {
    console.log('Ödeme iptal edildi:', data);
    // Örnek: Sepet sayfasına yönlendir
});

// Ödeme formunu yerleştir
paymentElement.mount('#payment-element');

Yanıt Alanları

AlanTipAçıklama
successbooleanİşlem başarılı mı
transaction_idstringTahsilat işlem numarası
payment_statusinteger1: Başarılı, 2: Başarısız
transaction_statusinteger2: Tamamlandı, 3: Ön provizyon
is_pre_authbooleanÖn provizyon işlemi mi
amountintegerTutar (kuruş)
currencystringPara birimi
messagestringDurum mesajı
error_codestringHata kodu (başarısızsa)
metadataarrayÖdeme başlatılırken gönderilen ek veriler

Zorunlu ve İsteğe Bağlı Parametreler

customer_id
integer
Ödeme ile ilişkilendirilecek müşteri ID’si. Bu parametre isteğe bağlıdır, ancak müşteri takibi için önerilir.
amount
integer
required
Ödeme tutarı, kuruş cinsinden belirtilmelidir. Örneğin, 10.00 TL için 1000 olarak girilmelidir. Son 2 hane her zaman kuruş olarak kabul edilir.
currency
string
required
Ödeme para birimi. 3 haneli ISO 4217 kodu olarak belirtilmelidir (örn. “TRY” - Türk Lirası). Varsayılan değer “TRY”dir.
pre_auth
bool
Ödeme ön provizyon olarak başlatılacaksa true, normal ödeme için false olarak belirtilmelidir. Varsayılan değer false’dir.
products
array
required
Ödeme ile ilişkilendirilecek ürünlerin bilgilerini içeren JSON string formatında dizi. Eğer product_ids gönderilmiyorsa, bu parametre zorunludur.Format: JSON string olarak gönderilmelidir.Ürün alanları:
  • product_name (string, zorunlu): Ürün adı
  • price (integer, zorunlu): Ürün fiyatı (kuruş cinsinden)
  • description (string, isteğe bağlı): Ürün açıklaması
Örnek:
products=[{"product_name":"Premium Üyelik","price":10000,"description":"Aylık premium üyelik"}]
Birden fazla ürün:
products=[{"product_name":"Ürün 1","price":5000},{"product_name":"Ürün 2","price":3000}]
product_ids
array
required
Ödeme ile ilişkilendirilecek ürünlerin ID’lerini içeren dizi. Eğer products gönderilmiyorsa, bu parametre zorunludur. Her ürün için Tahsilat API’de önceden oluşturulmuş ürün ID’leri kullanılmalıdır.
metadata
array
Ödeme ile ilişkilendirilecek ek verileri içeren dizi. Bu parametre isteğe bağlıdır, ancak ödeme raporlaması için önerilir. Örneğin, müşteri türü gibi bilgiler burada saklanabilir.
description
string
Ödeme ile ilgili açıklama. Bu parametre isteğe bağlıdır ve ödeme hakkında ek bilgi sağlamak için kullanılabilir.