3D Secure ile Yapılan İşlemi Provizyona Çevirme

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", "capture" },
    { "price", "25,55" },

    { "customer_ip", "192.168.1.0" },
    { "transaction_id", "IP_8gf3t4Y8x545" },
};

// 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();
    }
}

Provizyon işlemi, başlatılan bir 3d secure işlemini sonuçlandırmak için gereklidir. Eğer 3d secure sonucunda başarılı sonuç içeren bir JSON datası aldıysanız orada belirtilen transaction_id değerini provizyon için atılan istekte kullanmalısınız.

Parametreler

Parametre Zorunlu Açıklama
mode Zorunlu string Değer Capture 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
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.
transaction_id Zorunlu string Bu değer 3d secure işlemi sonucunda size iletilir gönderilmesi zorunludur.
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.