Kart Saklama ve Switch Uygulaması, işletmelerin online ödemelerde güvenli ve etkili bir şekilde yönetimini sağlayan profesyonel bir API seti sunmaktadır. Bu özel API seti, iş yerlerine müşteri kart bilgilerini güvenle saklama imkanı sunarken, aynı zamanda bu saklanan kart verileri veya açık kart bilgileri üzerinden birden fazla banka Sanalpos'una ödeme emri başlatma olanağı sağlamaktadır.
Switch Yönetim ekranları sayesinde işletmeler, kolaylıkla iptal, iade ve ön otorizasyon kapama gibi işlemleri gerçekleştirerek ödeme süreçlerini etkin bir şekilde yönetebilirler. Ayrıca uygulama, işlem ve sipariş durumlarını anlık olarak takip edebilme imkanı sunarak işletmelere güncel verilerle bilgi sağlamaktadır.
Kart Saklama ve Switch Uygulaması, müşteri verilerinin güvenliği ve ödeme süreçlerinin sorunsuz işleyişi üzerinde odaklanarak, işletmelere güvenilir bir ödeme altyapısı sunmayı amaçlamaktadır. Profesyonel ve güvenilir hizmet anlayışıyla, işletmelerin ödeme kabul etme süreçlerini kolaylaştırmak ve müşterilere kesintisiz bir ödeme deneyimi sunmak için tasarlanmıştır.
Kart Saklama ve Switch servislerini test etmek için kullanılacak TEST BASE URL aşağıdaki gibidir:
TEST BASE URL: https://gbtaksimtunel-integration.garanti.com.tr/
Not: Bu TEST BASE URL, Garanti Bankası tarafından sunulan sanal ortamı temsil eder ve gerçek işlemler yerine test amaçlı kullanılması için oluşturulmuştur. Bu ortamda yapılan işlemler, canlı ortamdaki gibi gerçek finansal etkiler doğurmaz ve sadece test senaryoları üzerinden işlemektedir.
Test ortamı, farklı senaryoları ve hata durumlarını simüle ederek uygulamanın performansını ve güvenilirliğini test etmeyi sağlar. Ayrıca, API isteklerinin ve cevaplarının doğru şekilde işlendiğini doğrulamak için kullanılabilir.
Testler sırasında olası hata durumlarına karşı nasıl tepki verileceği, hataların nasıl ele alınacağı ve sistemin doğru şekilde çalıştığından emin olunmalıdır. Testler, güvenlik ve uyumluluk açısından da önem taşır ve canlı ortama geçiş öncesinde başarılı bir test aşaması gerçekleştirilmelidir.
Test ortamındaki hataların geçici olabileceği unutulmamalıdır. Geliştirme ekibi, olası hataların sıklıkla tekrarlanması durumunda ETicaretDestek@garantibbva.com.tr destek birimleriyle iletişime geçmeyi tercih etmelidir. Bu şekilde, sorunlar daha hızlı ve etkili bir şekilde çözülerek test sürecinin verimli bir şekilde ilerlemesi sağlanacaktır. Başarılı testler, uygulamanın ve sistemlerin güvenli ve sorunsuz bir şekilde canlı ortama geçişine büyük katkı sağlar.
Test ortamında API isteklerinde gönderilmesi için aşağıdaki bilgiler kullanılabilir. Bu değerler, tüm istek tiplerinde kullanılacaktır:
Başlık | Değer |
---|---|
Switch ID: | CC82C381E078482AB328943FCCB7100C |
Switch Şifresi: | 123asdASD@ |
Bu bilgiler, Kart Saklama ve Switch API'larını test etmek için kullanılacak olan kimlik doğrulama bilgileridir. Testlerin başarıyla gerçekleştirilmesi ve doğru sonuçlar alınabilmesi için bu bilgilerin doğru bir şekilde kullanılmasına özen gösterilmelidir. API isteklerinin bu kimlik bilgileriyle yapıldığından emin olmak, testlerin güvenilirliği ve başarısı için önemlidir.
Üye iş yerinin üretim ortamında gerçek verilerle istek göndermek için, test ortamında entegrasyon tamamlandıktan sonra üye iş yerinin Garanti Sanalpos terminal numarasını ETicaretDestek@garantibbva.com.tr adresine ileterek Switch ID değerini elde etmesi gerekmektedir.
Elde edilen Switch ID değerine istinaden API isteklerinde güvenlik amaçlı oluşturulan hash verisinin hesaplanması gerekmektedir. Bu hash verisi hesabında üye iş yerinin Switch Şifresi de yer almalıdır. Hash hesabıyla ilgili detaylar ilerleyen kısımlarda açıklanacaktır.
Üye iş yerinin Switch Şifresi, üye iş yerinin yönetim ekranlarında bulunan Parola Güncelleme menüsü altından oluşturulmalıdır. Bu işlem, üye iş yeri admin kullanıcısı tarafından gerçekleştirilir.
Switch Şifresi oluşturulması hakkında detaylı bilgiye "Parola Güncelleme" başlığı altından ulaşılabilir. Bu şekilde, üye iş yerleri güvenli bir şekilde gerçek verilerle API isteklerini gerçekleştirebilir ve GarantiBBVA Switch entegrasyonunu başarıyla tamamlayabilirler.
Kart saklama ve Switch sistemine atılacak bütün JSON API isteklerinde Request Header alanının eksiksiz olarak gönderilmesi gerekmektedir. Bu alanlar ile ilgili işlemin içerisinde yer alan alanların kontrolü yapılır ve gönderilen datanın valid olup olmadığı kontrol edilir. Bahsi geçen isteklerin hepsinin JSON API response bilgisinde response header alanı dönülecektir. Atılan bütün JSON API isteklerinin Content-Type bilgisi application/json tipinde olmalıdır. Yine atılan bütün JSON API isteklerinin encodingi UTF-8 formatında olmalıdır.
Request Header tag’ı ve altında gönderilecek parametreler aşağıdaki gibidir:
Alan | Tip | Zorunlu | Uzunluk | Açıklama |
---|---|---|---|---|
requestId | String | Evet | Max 36 karakter | Her işlem için üretilen unique ID değeridir. |
swtId | String | Evet | Max 36 karakter | İşlemi gerçekleştiren işyeri yada firma adına tanımlanmış switch ID değerinin gönderildiği alandır.Testlerde, üst segmentte iletilen swtId kullanılabilir. Prod ortamı için işyerine tanımlanmış swtId kullanılmalıdır. |
timestamp | String | Evet | - | İşlem zamanı bu alanda gönderilir. |
userId | String | Evet | Max 36 karakter | İşlemi gerçekleştiren kullanıcının ID değerinin gönderildiği alandır. Herhangi bir data gönderilebilir ama işyerine özel bir değer olması önerilir. Bu data ile amaç, gönderilen isteğin hangi kişi ya da sistem tarafından ayrıştırılmasını sağlamaktır. |
hashedData | String | Evet | - | İşyeri tarafından JSON API Request Hash Hesaplama Örneği başlığı altında verilen kriterlere göre hash hesaplaması yapılarak üretilen değer bu alanda yollanılır. |
Response Header tag’ı ve altında dönülecek parametreler aşağıdaki gibidir:
Alan | Tip | Açıklama |
---|---|---|
requestId | String | Her işlem için üretilen unique ID değeridir. Request header’ında gönderilen alan ile aynı değeri tutacaktır. |
swtId | String | İşlemi gerçekleştiren işyeri yada firma adına tanımlanmış switch ID değerinin gönderildiği alandır. Request header’ında gönderilen alan ile aynı değeri tutacaktır. |
timestamp | Timestamp | İşlem zamanı bu alanda gönderilir. Buradaki değer Kart Saklama ve Switch sisteminde işlemin geçtiği timestamp değeridir. |
userId | String | İşlemi gerçekleştiren kullanıcının ID değerinin gönderildiği alandır. Request header’ında gönderilen alan ile aynı değeri tutacaktır. |
hashedData | String | JSON API Response Hash Hesaplama Örneği başlığı altında verilen kriterlere göre bir hash hesaplaması yapılarak üretilen değer bu alanda yollanılır. |
Bütün JSON API response’larında header alanına ek olarak, header alanı dışında errorMap isimli, request’te gönderilen alanların datasal hata içerip içermediğini belirtilen bir Map dönmektedir.
Alan | Tip | Açıklama |
---|---|---|
errorMap | Map<String, String> | İstekte gönderilen alanların datasal hata içerip içermediğini iletir. |
Aşağıda, Garanti Switch API'larına gönderilecek örnek bir istek mesajının header tag'ı ve alanları açıklanmaktadır:
"HashedData" alanı, güvenlik amacıyla API isteğinin bütünlüğünü doğrulamak için kullanılır. Bu alanın hesaplanması için aşağıdaki adımlar izlenir:
İşlem sonuçlarında dönen cevap içerisinde yer alan hashedData parametresini doğrulamak için örnek response header bilgisi ve bu bilgiye ait hash hesaplama yöntemi aşağıdaki gibidir:
Response'da yer alan "timestamp" alanı Unix Timestamp olarak dönmektedir, ancak hash hesabı için bu değerin String formatında kullanılması gerekmektedir. Bu nedenle, Unix Timestamp değeri, String formatına dönüştürülmelidir.
HashedData hesaplama işlemi için aşağıdaki adımlar izlenir:
HashedData değeri, örnek response header'da belirtilen değerle aynıdır. Bu şekilde, API cevaplarında yer alan hashedData değerinin doğruluğu doğrulanabilir ve veri bütünlüğü sağlanmış olur.
İş yerleri işlem sonuçlarını sorgulamak istediklerinde Akıllı Switch’in sipariş sorgu isteğini kullanabilir.
İş yerleri zaman aşımı hatası veya başka bir hata aldığında da başarılı bir işlem için de sipariş sorgusu gönderebilir. Sipariş sorgu cevabında Switch daima siparişteki son işleme dair bilgileri döner.
Sipariş sorgulama isteği geldiğinde siparişteki son işleme dair detaylar sanalpostan alınabilmiş ve Switch veritabanına kaydedilmişse, sipariş sorgu cevabı switch veritabanındaki bilgilerden dönülür ve sanalpostan sorgu yapılmaz. Switch siparişteki son işleme dair detayları sanalpostan alamadıysa sipariş sorgu isteğini sanalposa iletir, gelen cevaba göre ke ndi veritabanını günceller ve siparişteki son işlemin durumunu işyerine döner.
Switch’in sipariş sorgu servisine kendi veritabanından işlem durumu döndüğü durumlarda (Switch veritabanında işlem Reason Code’u 00, 01 veya 02’dir) iş yerine header, transaction ve order alanları iletilirken; switch sorguyu sanalposa iletmiş ve sanalpostan yanıt almışsa işyerine header, transaction, order ve acquirer response alanlarını döner.
Sipariş sorgusu zaman aşımı hatası alırsa iş yerinin işlem cevabını alana kadar sorgu göndermesi gereklidir. İşyeri siparişteki son işlemin durumunu her zaman Transactionalanında dönülen bilgiden parse etmelidir.
Switch tarafından zaman aşımı hatası dönülmüş işlemler için iş yeri yalnızca sipariş sorgusu veya iptal isteği gönderebilir. İptal isteği zaman aşımı hatası aldıysa ilgili sipariş için yalnızca sipariş sorgusu yapılabilir. İptal işlemine iptal atılamaz.
Sipariş sorgulama isteği birincil işlemde gönderilen sipariş numarası ile yapılmalıdır. Birincil istekte sipariş numarası gönderilmediyse sipariş sorgusu birincil işlem cevabında dönülen orderId değeri ile gönderilmelidir.
Sipariş sorgu servisine request header tag’ına ek olarak gönderilmesi gereken parametreler aşağıdaki şekildedir.
Alan | Tip | Zorunluluk | Uzunlu k | Açıklama |
---|---|---|---|---|
orderId | String | Evet | Max 36 Karakter | Birincil işlemde gönderilen orderid bilgisidir. Birincil işlemde orderid iletilmediyse cevap mesajında dönen orderId bilgisidir. |
Sipariş sorgu servisi cevabında Response header alanına ek olarak servisten Order, Transaction ve/veya acquirerResponse alanları dönülecektir. Order ve Transaction alanlarındaki bilgiler işlemin Switch veritabanındaki son bilgilerinden dönerken, acquirerResponse alanındaki bilgiler acquirer bankadan dönen bilgilerdir.
Alan | Tip | Açıklama |
---|---|---|
orderId | String | Birincil işlem mesajında gönderilen sipariş bilgisidir. Birincil işlem mesajında orderId boş gönderildiyse Sw itch tarafından üretilen ilk orderId değeridir. |
orderGroupId | String | İşleme ait sipariş grup numarasıdır. |
statusCode | String | Siparişin son durumudur. |
finalAmount | String | Siparişin son tutarıdır. |
originalAmount | String | Siparişin ilk tutarıdır. |
currencyNum | String | Döviz kuru bilgisi. 3 haneli ISO standart kodu. Örnek : 949 |
orderDate | String | Siparişin tarihidir. |
vposOrderId | String | İstek mesajında generateOrderId Y veya boş olarak gönderildiyse ya da bu alan hiç gönderilmediyse Sw itch tarafından oluşturulan orderid değeridir. |
Alan | Tip | Açıklama |
---|---|---|
requestId | String | Siparişteki son işlemin Sw itch requestid değeridir. |
status | String | Siparişe ait son işlemin son durumudur. |
txnAmount | String | Siparişe ait son işlemin tutarıdır. |
txnType | String | Siparişe ait son işlemin tipidir. |
installmentCount | String | Siparişe ait son işlemin taksit sayısıdır. |
transactionDate | String | Siparişe ait son işlemin tarihidir. |
voidInd | String | Siparişe ait son işlemin iptal durumudur. Y ise işlem iptal edilmiş demektir, N ise işlemde iptal yoktur. |
acquirerId | String | İşlemin yönlendirildiği acquirer bankanın id’sidir. |
acquirerReturnCode | String | Acquirer bankanın döndüğü işlem sonuç kodudur. |
acquirerReasonCode | String | Acquirer bankanın döndüğü işlem sebep kodudur. |
reasonCodeExplText | String | Acquirer bankanın döndüğü işlem sebep kodunun açıklamasıdır. |
Alan | Tip | Açıklama |
---|---|---|
binNumber | String | Kartın BIN numarasıdır. |
maskedNumber | String | Maskeli kart bilgisidir. |
Alan | Tip | Açıklama |
---|---|---|
gsm | String | Kart sahibi telefon numarasıdır. |
String | Kart sahibi e-mail adresidir. | |
ip | String | Kart sahib ip adresidir. |
Alan | Tip | Açıklama |
---|---|---|
orderId | String | Sipariş numarası bilgisidir. (vposOrderId’dir) |
statusCode | String | Siparişin son durumudur. |
preAuthAmount | String | Ön otorizasyon tutarıdır. |
authAmount | String | Satış tutarıdır. |
authCode | String | Sanalpos tarafından dönülen auth kodu bilgisidir. |
txnReturnCode | String | İşlem sonuç kodudur. |
txnReasonCode | String | İşlem sebep kodudur. |
txnRetRefNum | String | İşleme ait referans numarasıdır. |
cardNumberMasked | String | Maskeli kart bilgisidir. |
installmentCount | String | Siparişe ait taksit sayısıdır. |
terminalId | String | İşlemin geçtiği Sanalpos terminal numarasıdır. |
merchantId | String | İşlemin geçtiği Sanalpos merchant numarasıdır. |
API isteklerinde gönderilen alanların Kart Saklama ve Switch sistemine uygun olmadığı durumlarda, API'nin response'unda "header" bölümüne ek olarak "errorMap" isimli bir Map<String, String> dönecektir. Bu "errorMap" içerisinde, hangi datanın bozuk olduğu ve datanın neden bozuk olduğu bilgisi yer alacaktır. Bu sayede, ilgili alanların düzenlenerek tekrar gönderilmesi gerekmektedir.
ErrorMap içeren örnek istek cevabı aşağıdaki gibidir:
Kart Saklama ve Switch sisteminden dönüşü sağlanacak return-reason kodlarıve açıklamaları aşağıdaki tabloda verilmiştir.
Return Code (Dönüş Kodu) | Reason Code (Alt Dönüş Kodu) | Açıklama |
---|---|---|
00 | 00 | İşlem başarı ile gerçekleşmiştir. |
01 | 01 | Acquirer, atılan işlemi onaylamadığ ıdurumlarda bu hata alınır. Örneğin satış isteğinin başarısız olduğu bir durumda veya 3D HTML isteğinde doğrulamanın başarısız olduğu durumda bu hata alınacaktır.Sipariş sorgulama servisi ise sorgucevabında başarısız işlemler için 01 hata kodunu header’da döner. |
01 | 02 | Sipariş sorgulama servisi, sorgu cevabında sanalposta bulunmayan işlemler için döner. Nestpay sanalposuna iletilememiş iptal işlemleri için Reason Code 02 değil, 01 dönecektir. |
02 | 04 | Sipariş sorgulama servisi, sorgu cevabında sanalposta bulunmayan 3D’li işlemler için döner. Bu cevap alındığında, 3D’li işlemin henüz tamamlanmamış olma ihtimalibulunduğundan yeniden sorgugönderilebilir. Reason Code 00 veya 01 olana dek sorgu gönderilebilir. Ancak kart sahibi işlemi yarıda bıraktıysa ve işlem sonuçlanmadıysa Reason Code her zaman 04 kalmaya devam edecektir. |
03 | 03 | İstek atılması istenen Sanalpos’aerişilememektedir |
10 | 1000 | Geçersiz http istek tipi. Sistem gelen http isteğini okuyamadığı durumda bu hata alınır. |
11 | 1100 | İstek doğrulama hatasıdır. Cevapta dönen errorMap’te hatanın detayı bulunur. Buradaki yönergelere göre düzenleme yapılması gerekmektedir. |
12 | 1200 | Yapılan işlemde bulunan orderId değeri ile işlem gerçekleştirilememiştir. Yeni birorderId ile istek atılmalıdır. |
12 | 1201 | İstekte atılan kur bilgisi ile siparişte bulunan kur bilgisi aynı değil. |
12 | 1202 | Geçerli sipariş bulunamadı hatası. Üzerinde işlem yapılmak istenen sipariş bilgisi sistemde mevcut değil. Örneğin satışı olmayan bir işlemin iptali veya iadesi gönderilirse bu hata alınır. |
13 | 1300 | Geçerli işlem bulunamadı hatası. Üzerinde işlem yapılmak istenen işlem bilgisi sistemde mevcut değil. Örneğin atılan istekte sipariş mevcut fakat işlem bulunamadıysa bu hatayı verecektir. |
13 | 1301 | Geçersiz işlem tipi. Yapılmaya çalışılan işleme izin verilmemektedir. Örneğin iadeisteği sadece satışı olan işlemlerdeuygulanabilir. Orjinali satıştan farklı bir işlem tipine iade isteği gönderilirse bu hata alınır. İptal isteği için de bu durum geçerlidir. |
13 | 1302 | Başarısız olan bir satış için iptal ya da iade isteği atılırsa bu hata alınır. |
31 | 3101 | Sanalpos cevabı Sw itch tarafındanişlenemedi. |
67 | 6700 | Şifreleme hatası. Genel olarak geçici bir hatadır. Yeniden birkaç işlem denemek gerekmektedir. Çok sık alınması durumunda ETicaretDestek@garantibbva.com.tr ile ietişime geçebilirsiniz. |
78 | 109 | Token almak için (full kart + skt) veya (ilk 6 - son 4 ve müşteri / kimlik numarası) gönderilmelidir. |
78 | 300 | Token isteği sırasında kart şifrelenirken hata ile karşılaşıldı. Tekrar işlem denenmelidir. |
78 | 401 | Token isteğinde atılan kartın durumu provizyon almaya müsait olmadığı için token üretilemedi. Kartın durumu kontrol edilmelidir. |
78 | 402 | Token isteğinde atılan kartın statüsü token alma işlemi için müsait değil. Kartın durumu kontrol edilmelidir. |
78 | 500 | Token isteği sırasında geçerli parametre tanımı bulunamadı. İstek içerisinde gönderilen sw tId için parametre tanımı yapılması gerekmektedir. Bunun için ETicaretDestek@garantibbva.com.tr ile iletişime geçilmelidir. |
78 | 500 | Token bulunamadı. Gönderilen token bilgisi kontrol edilmelidir. Silinmiş bir token ile işlemyapılmaya çalışılıyor olabilir. |
78 | 99 | Genel hata. Bazı durumlarda geçiciolabilmektedir. Çok sık alınması durumunda ETicaretDestek@garantibbva.com.tr ile iletişime geçilebilir. |
83 | 8300 | Datasal hata. Atılan istekteki datalar kontrol edilmelidir. Sorun tespit edilmezse E-Ticaret Destek ekibiyle iletişime geçilmelidir. |
99 | 99 | Sistem hatası. Bazı durumlarda geçici olabilmektedir. Çok sık alınması durumunda ETicaretDestek@garantibbva.com.tr ile iletişime geçilebilir. |
Aşağıda, çeşitli yazılım dilleri kullanılarak yazılmış özel kod örneklerinin linkleri verilmiştir. Tercih ettiğiniz programlama diline ait link üzerinden, önceden belirlenmiş değerlerle yazılmış olan kodları detaylı bir şekilde inceleyebilirsiniz.
Bu örnekler, ilgili işlem tipini içeren kodları içermektedir ve farklı dillerde yazıldığı için çeşitli yaklaşımları ve pratikleri de gözlemleyebilirsiniz. Bu sayede tercih ettiğiniz programlama diline dair daha iyi anlaşılır ve özgün örneklerle çalışma imkanı bulabilirsiniz.
C# Kod Örnekleri için tıklayınız.
VB.Net Kod Örnekleri için tıklayınız.
Java Kod Örnekleri için tıklayınız.
PHP Kod Örnekleri için tıklayınız.
Unutmayın ki bu örnekler ön tanımlı değerlerle yazılmıştır ve gerçek projelerde kullanımı için gerekli uyarlama ve güvenlik önlemleri almanız gerekebilir.
Test kartları listesine bu sayfadan ulaşabilirsiniz.
Sizden haber almak isteriz. Hizmetlerle ilgili sorunlarınız/sorunuz mu var? Bize bununla ilgili ayrıntılı bir e-posta gönderir misiniz?
Bize Soru Gönderin Bize Soru Gönderin