iyzico hizmetlerindeki kimlik doğrulama, Base64 ve HmacSHA256 hashleme dahil olmak üzere hassas bir şifreleme teknikleri dizisi aracılığıyla güvenliği artırır.
API'ımıza güvenli bir şekilde erişmek için kimlik doğrulama gereklidir. Kimlik doğrulama, API Anahtarı
ve base64EncodedAuthorization
'ın HTTP isteklerinizin başlığına dahil edilmesiyle gerçekleştirilir.
Copy "Authorization": "IYZWSv2"+" "+"base64EncodedAuthorization"
Örnek İstek Başlığı:
Copy POST /payment/bin/check HTTP / 1.1
Host : sandbox-api.iyzipay.com
Authorization: IYZWSv2 YXBpS2V5OnNhbmRib3gtbDlNZDFHajNJWWNtdTROZGFXeGFTVW9Db1g3REM1UkEmcmFuZG9tS2V5OjEyMzQ1Njc4OSZzaWduYXR1cmU6MDc5ZGY0YjI0MjZmYzdmNDIwOGQ4ZjIyZmJjMDM0OTc5NDAxOWY4Y2UyYjA3MTFkZTc4MDhiNDg3NGY0ZTc5Ng==
Content-Type : application/json
x-iyzi-rnd : 123456789
Genel Bakış
İşte gerekli bileşenlerin ayrıntılı bir açıklaması:
apiKey : Hesabınıza atanmış benzersiz API anahtarı
secretKey : Hesabınızla ilişkili gizli anahtarınız.
x-iyz-rnd: Her API çağrısı için istek başlığına eklenen, müşterilerimiz tarafından rastgele oluşturulmuş bir sayı.
encryptedData: istek verisi içerisinde yer alan parametrelerin HMACSHA256 ile şifrelenmiş versiyonu.
Kimlik doğrulama tek bir adımda basitçe yapılır. Ancak bir Yetkilendirme Dizisi oluşturmak için üç adım vardır.
1. encryptedData
encryptedData
istek yükünün şifrelenmiş bir versiyonunu ifade eder. Sürecin sonunda HMACSHA256 şifrelemesini kullanarak bir hash oluşturulur.
Kimlik doğrulamada kullanılacak imza, nispeten aşağıdaki formül kullanılarak oluşturulur;
Copy HMACSHA256(request.header.randomKey + request.payload, secretKey)
Aşağıdaki örnekte, Bin Sorgulama işlemine ait bir istek yapısı bulunmaktadır;
Copy curl
--location --request POST 'https://api.iyzipay.com/payment/bin/check' \
--header 'Authorization: IYZWSv2 ***' \
--header 'x-iyzi-rnd: 123456789' \
--header 'Content-Type: application/json' \
--data-raw '{
"locale":"tr",
"binNumber":"535805",
"conversationId": "docsTest-v1"
}'
Yukarıdaki istek için encryptedData
aşağıdaki gibidir;
Copy 079df4b2426fc7f4208d8f22fbc0349794019f8ce2b0711de7808b4874f4e796
2. base64Encoded
encryptedData
'nın doğru bir şekilde oluşturulduğunu varsayarsak, şimdi Base64 şifrelemesine geçebiliriz.
Kimlik doğrulamada kullanılacak imza, nispeten aşağıdaki formül kullanılarak oluşturulur;
Copy base64("apiKey:"+apiKey+"&randomKey:"+randomKey+"&signature:"+encryptedData)
Sonuç olarak istek başlığında kullanılacak base64EncodedAuthorization
değişkenini elde ederiz.
3. Authorization
Bütün bu işlemlerden sonra, son ve en kolay adım olarak istek başlığına IYZWSv2
base64EncodedAuthorization
eklemeliyiz.
Copy ...
"Authorization": "IYZWSv2"+" "+"base64EncodedAuthorization"
...
IYZWSv2 ve base64EncodedAuthorization arasında bir adet boşluk bulunmaktadır.
Kimlik Doğrulama İçin Örnek Pre-Request Kodu
Örnek olarak test ortamında gerçekleşen Bin Sorgulama talebini ele alırsak yetkilendirme süreci şu şekilde olacaktır;
Copy
var apiKey = environment .apiKey;
var secretKey = environment .secretKey;
//Generate authorization string
function generateAuthorizationString () {
// Benzersiz bir randomKey ortaya çıkaralım
// Örnek randomKey : 1722246017090123456789
var randomKey = new Date () .getTime () + "123456789" ;
// İstek için uri_path değişkenini yerleştirelim.
// Örnek uri_path : /payment/bin/check
var uri_path = "/payment/bin/check" ;
// payload'u alalım ve uri path ile randomKey'i birleştirelim.
// Örnek payload : payload: 1722246017090123456789/payment/bin/check{"binNumber":"589004"}
var payload = _ .isEmpty ( request .data) ? randomKey + uri_path : randomKey + uri_path + request .data;
// HMACSHA256 kullanarak payload'u şifreleyelim.
// Örnek encryptedData : 91e491486d3aa951b4f387cc93d67fc754c4729af95344b694435f56447819e9
var encryptedData = CryptoJS .HmacSHA256 (payload , secretKey);
// encryptedData değişkenini kullanarak authorizationString oluşturalım.
/* Örnek authorizationString : apiKey:sandbox-3uHv0LccjcWDyFHTvJpiACKPcJwbczmZ&
randomKey:1722246017090123456789&
signature:91e491486d3aa951b4f387cc93d67fc754c4729af95344b694435f56447819e9 */
var authorizationString = "apiKey:" + apiKey
+ "&randomKey:" + randomKey
+ "&signature:" + encryptedData;
// base64 kullanarak authorizationString'i şifreleyelim.
// Örnek base64EncodedAuthorization : YXBpS2V5OnNhbmRib3gtM3VIdjBMY2NqY1dEeUZIVHZKcGlBQ0tQY0p3YmN6bVomcmFuZG9tS2V5OjE3MjIyNDYwMTcwOTAxMjM0NTY3ODkmc2lnbmF0dXJlOjkxZTQ5MTQ4NmQzYWE5NTFiNGYzODdjYzkzZDY3ZmM3NTRjNDcyOWFmOTUzNDRiNjk0NDM1ZjU2NDQ3ODE5ZTk=
var base64EncodedAuthorization = CryptoJS . enc . Base64 .stringify ( CryptoJS . enc . Utf8 .parse (authorizationString));
// authorizationStrin'i 'IYZWSv2 ' string'ine ekleyelim.
// Örnek return value : IYZWSv2 YXBpS2V5OnNhbmRib3gtM3VIdjBMY2NqY1dEeUZIVHZKcGlBQ0tQY0p3YmN6bVomcmFuZG9tS2V5OjE3MjIyNDYwMTcwOTAxMjM0NTY3ODkmc2lnbmF0dXJlOjkxZTQ5MTQ4NmQzYWE5NTFiNGYzODdjYzkzZDY3ZmM3NTRjNDcyOWFmOTUzNDRiNjk0NDM1ZjU2NDQ3ODE5ZTk=
return "IYZWSv2 " + base64EncodedAuthorization;
}
var authorization = generateAuthorizationString ();
postman .setEnvironmentVariable ( "authorization" , authorization);
Last updated 2 months ago