3D Secure Olmadan Ödeme İşlemi

C# Örneği
// API isteğinin yapılacağı endpoint linki
var api_url = "https://yourdomain.com/api/live";

// API hesabına ait güvenlik anahtarı
var secret_key = "İmzaPos panelinden aldığınız güvenlik anahtarı";

// Parametreler
var parameters = new Dictionary<string, string>
{
    // İmzaPos panelinden aldığınız bayi kodu
    { "merchant", "Bayi kodunuz" },
    { "mode", "pay" },
    { "price", "25,55" },
    { "card_holder", "İsim soyad" },
    { "card_number", "1111222233334444" },
    { "card_month", "05" },
    { "card_year", "2024" },

    { "customer_ip", "192.168.1.0" },
    { "product_name", "Ürün veya hizmet adı" },

    { "customer_firstname", "İsim" },
    { "customer_lastname", "Soyad" },
    { "customer_email", "[email protected]" },
    { "customer_phone", "+905554443322" },
};

// Parametreler başlıklarına göre alfabetik olarak sıralanır
var sortedParameters = parameters.OrderBy(k => k.Key);

// Parametreler birleştirilir.
var joinParameters = string.Join("ip", sortedParameters.Select(v=> v.Value));

// Parametreler hash'lenir.
var hashedParameters = ComputeSha256Hash(joinParameters + secret_key);

parameters.Add("hash", hashedParameters);

try
{
    var client = new HttpClient();
    var content = new FormUrlEncodedContent(parameters);
    var response = await client.PostAsync(api_url, content);

    // Değer alınır
    var responseString = await response.Content.ReadAsStringAsync();
}
catch (Exception)
{
    // Hata oluştu
    throw;
}

// SHA256 Metodu
static string ComputeSha256Hash(string rawData)
{
    using (SHA256 sha256Hash = SHA256.Create())
    {
        var bytes = sha256Hash.ComputeHash(Encoding.UTF8.GetBytes(rawData));

        var builder = new StringBuilder();
        for (int i = 0; i < bytes.Length; i++)
            builder.Append(bytes[i].ToString("x2"));
                    
        return builder.ToString();
    }
}

3D Olmadan yapılan işlemler ilgili banka kartından anında tahsil edilen işlemlerdir. 3D Secure'da olduğu gibi bir provizyon işlemi gerektirmez.

Taksitli işlemler için installment parametresi gönderilmelidir. Eğer bu değer gönderilirse hangi bankadan taksit yapılacağının anlaşılması için bank parametresinin ve hangi pos ile işlem yapılacağının anlaşılması için pos bilgilerinin de gönderilmesi gerekir. Bu bilgileri nasıl alacağınızı öğrenmek için linkteki sayfayı inceleyebilirsiniz.

Parametreler

Parametre Zorunlu Açıklama
mode Zorunlu string Değer Pay olarak gönderilmelidir.
merchant Zorunlu string İmzaPos paneli üzerinden aldığınız bayi kodu alanını bu bölüme yazmalısınız.
price Zorunlu string Ödeme tutarını string olarak ve ondalık basamağı virgül ile ayırarak göndermelisiniz ör: 25,55 veya 25,00
currency Opsiyonel string İşlemin yapılacağı para birimi gönderilmezse TRY kabul edilir. Desteklenen para birimleri: TRY/USD/EUR
installment Opsiyonel integer Taksit sayısı bu bölüme girilmeli. 1'den yüksek değer girilirse taksitli işlem kabul edilir.
bank Opsiyonel integer Bu değer opsiyonel olmakla birlikte sadece taksitli işlemler yapıldığında zorunlu hale gelir. İşlemin hangi banka üzerinden yapılacağını kodunu girerek iletebilirsiniz. Kodu nasıl alacağınızı öğrenmek için linkteki sayfayı ziyaret edebilirsiniz.
pos Opsiyonel integer Bu değer opsiyonel olmakla birlikte sadece taksitli işlemler yapıldığında zorunlu hale gelir. İşlemin hangi pos üzerinden yapılacağını kodunu girerek iletebilirsiniz. Kodu nasıl alacağınızı öğrenmek için linkteki sayfayı ziyaret edebilirsiniz.
lang Opsiyonel string Bu değer varsayılan olarak tr'dir. Eğer cevabı farklı bir dilde almak istiyorsanız bu bölüme dil kodunu yazmalısınız. Desteklenenler: tr
customer_ip Zorunlu string İşlem yapan müşterinin IP adresini bu bölümde iletmelisiniz.
product_name Zorunlu string Bu bölüme eğer ödeme bir ürün için yapılıyorsa ürün adı, hizmet ise hizmet adını yazmalısınız.
card_holder Zorunlu string Kredi kartı üzerinde yazan isim soyisim
card_number Zorunlu string Kredi kartı numarası
card_month Zorunlu string Kart son kullanım tarihi ay değeri. ör: 08
card_year Zorunlu string Kart son kullanım tarihi yıl değeri. ör: 2024
card_ccv Zorunlu integer Kartın güvenlik numarası CCV
customer_firstname Zorunlu string İşlemi yapan kullanıcının ismi
customer_lastname Zorunlu string İşlemi yapan kullanıcının soy ismi
customer_email Zorunlu string İşlemi yapan kullanıcının e-posta adresi
customer_phone Zorunlu string İşlemi yapan kullanıcının telefon numarası
customer_tc Opsiyonel string İşlemi yapan kullanıcının tc kimlik numarası
custom_data Opsiyonel string Bu bölüme yazdığınız değer API cevabında size geri gönderilecektir.
trx_id Opsiyonel string Yapılan ödeme işlemini daha sonra sorgulamak için sadece bu işleme özel bir değer gönderebilirsiniz.
hash Zorunlu hash İşlemi yapan API kullanıcısının tespiti için bu parametrenin gönderilmesi zorunludur. Güvenlik için gönderilen tüm parametrelerin sha256 formatında hash'lenmesi gerekmektedir.

Hash (Güvenlik kodu) Üretilmesi

Hash bilgisi gönderilen bilgileri teyit amaçlı alınan şifrelenmiş bir değerdir. Gönderilen parametrelerin belli bir format üzerinde birleşmesi sonucu bu değer üretilir. Oluşturulan değer İmzaPos tarafında aynı işlemler yapıldığında üretilen değer ile aynı olmalıdır.
Bu değeri oluşturmak için izlenecek adımlar şu şekildedir:
1- Zorunlu tüm parametreler ve ek olarak opsiyonel eklenene parametrelerin gönderimi sağlanır
2- Parametreler isimlerine göre alfabetik olarak sıralanıp bir string değer olarak birleştirilir.
3- Her parametre arasına "ip" harfleri yazılır
4- Oluşturulan string değer sha256 hash formatına dönüştürülür.
5- İstek yapılan endpoint'in "hash" parametresinde bu değer gönderilir.