API

Önemli

API’nin sandbox URL’i https://sandbox.akifast.com/api/v1/ dir.

Önemli

API’nin production URL’i https://akifast.com/api/v1/ dir.

Önemli

OAuth2 Sunucusunun sandbox URL’i https://oauth.sandbox.akifast.com/ dir.

Önemli

OAuth2 Sunucusunun production URL’i https://oauth.akifast.com/ dir.

Otorizasyon

Akifast Kullanıcısı Doğrulama

Akifast uygulaması, kullanıcılarının üye iş yeri sitelerine giriş yapması ve sitede özgürce dolaşıp alışveriş yapmaları için gerekli otorizasyonu OAuth2 frameworkü kapsamında yapar. Akifast (Akinon) kullanıcısının üye iş yerinin web sitesine girmesi için üye iş yeri OAuth2 frameworkündeki authorization_code akışını implement etmelidir. Bu akışta aşağıdaki adımlar gerçekleşir.

Kullanıcıyı Login Sayfasına Yönlendirme

Üye iş yeri, giriş sayfasına koyacağı Akifast ile Giriş butonuyla akışı başlatır. Bu buton kullanıcıyı Akifast OAuth2 Sunucundaki Giriş sayfasına yönlendirir. Buton tıklayınca aşağıdaki adrese, tabloda yer alan parametreleri URI’ya ekleyerek yönlendirmelidir. Bu yönlendirme yeni bir sekmede olabileceği gibi pop-up sayfada da olabilir.

İsteğin gönderileceği URL ve metodu

Metot

URL

Açıklama

GET

/oauth/authorize

Parametrelerle birlikte bu URL’e yönlendirilen kullanıcı buradan da Login ekranına yönlendirilir.

Otorizasyon URL’ine Eklenecek Parametreler

Parametre

Açıklama

grant_type

Bu değerin authorization_code olarak atanması gerekmektedir.

response_type

Bu değerin code olarak atanması gerekmektedir.

client_id

Akifast’i kullanan üye iş yerinin client_id değeri

state

Yapılan isteğe gelen cevabın üye iş yeri tarafında karşılanması için kullanılacak boomerang değer. Zorunlu bir parametre değildir.

Örnek İstek

https://oauth.sandbox.akifast.com/oauth/authorize?grant_type=authorization_code&response_type=code&client_id=9d36ec04-de2f-11ea-87d0-0242ac130003&state=HLa754Dj

Yukardaki URL’e yönlenen kullanıcı Akifast OAuth2 Sunucusunun Giriş sayfasına ulaşır. Kullanıcı bu sayfada doğrulama yapar ve üye iş yerine izin verir.

Kullanıcıyı Login Sayfasına Pop-Up ile Yönlendirme

Üye iş yeri, giriş sayfasına koyacağı Akifast ile Giriş(Pop-Up) butonuyla akışı başlatır. Bu buton kullanıcıyı Akifast OAuth2 Sunucundaki Giriş sayfasına yönlendirir. Butona tıklayınca aşağıdaki adrese, tabloda yer alan parametreleri URI’ya ekleyerek yönlendirmelidir.

İsteğin gönderileceği URL ve metodu

Metot

URL

Açıklama

GET

/oauth/authorize

Parametrelerle birlikte bu URL’e yönlendirilen kullanıcı buradan da Login ekranına yönlendirilir.

Otorizasyon URL’ine Eklenecek Parametreler

Parametre

Açıklama

grant_type

Bu değerin authorization_code olarak atanması gerekmektedir.

response_type

Bu değerin code olarak atanması gerekmektedir.

client_id

Akifast’i kullanan üye iş yerinin client_id değeri

state

Yapılan isteğe gelen cevabın üye iş yeri tarafında karşılanması için kullanılacak boomerang değer. Zorunlu bir parametre değildir.

Önemli

  • Akifast ile Giriş(Pop-Up) butonu için pop-up özelliği eklenmelidir bunun için özelleştirilen buton aşağıdaki gibi olabilir.

<a href="#" class="btn btn-akinon" target="popup" onclick= 'login(); return false;'>
  • login() fonksiyonu ise URI ye eklenen parametreler ile tetiklenir.

function login() {
    window.open('https://oauth.sandbox.akifast.com/oauth/authorize?grant_type=authorization_code&response_type=code&client_id=9d36ec04-de2f-11ea-87d0-0242ac130003&state=HLa754Dj','login-popup','width=600,height=600');
}

Access Token Alma

Doğrulanan ve üye iş yerine izin veren kullanıcı adına access token alınması için kullanıcı üye iş yerinin sağladığı aşağıdaki parametreleri alan bir URL’ye yönlendirilir.

Üye iş yerine iletilecek parametreler.

Parametre

Açıklama

code

Bir sonraki adımda acess token almak için gönderilecek kod değeri

state

Kullanıcının ilk yönlendirilmesi yapılırken gönderilen boomerang değeri.

Üye iş yerinin sağlayacağı URL’e yukardaki parametreler URI Query ile gönderilecektir. URL aşağıdaki örnekteki gibi olacaktır.

https://test-merchant.com/oauth-code-handler?code=yCcm1Z&state=HLa754Dj

Kendisine gelen istekteki code parametresi ile otorizasyon kodunu alan üye iş yeri kullanıcı adına access token almak için aşağıdaki URL’e aşağıdaki parametrelerle istek atmalıdır.

Önemli

Yapılan isteğin Authorization headerında Basic Authenticatin metodu ile merchant id ve şifre gönderilmelidir.

Access Token Almak için İsteğin Atılacağı URL

Metot

URL

Content Type

POST

${oauth_server_url}/oauth/token

application/x-www-form-urlencoded

Gönderilecek Parametreler

Parametre

Örnek Değer

Açıklama

grant_type

authorization_code

OAuth2 Sunucuyua iletilen istekte grant_type değeri authorization_code olarak gönderilmelidir. Bu flowu belli eder.

code

yCcm1Z

Redirect URL’de gelen kod değerinin gönderilmesi gerekmektedir.

Dönüş Değerleri

Dönüş Değeri

Açıklama

Örnek Değer

access_token

Kullanıcı adına istek yapılırken kullanılacak token bilgisi. JWT olarak dönülür

eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6ImQ3OTdmZDA2LTQ2NmQtNGM1MS05N2RmLWZlYzdmZjAwMjlmOCJ9.eyJleHAiOjE2NDkyOTYzOTEsInVzZXIiOnsiYWtpbm9uX3VzZXJfaWQiOiJGNjFDOEJGMDBCRkQ0NEM3QUZFNDU5RjI0QTM1OEYyQiIsInBob25lX251bWJlciI6Iis5MDUzMDkzMTM5MDcifSwidXNlcl9uYW1lIjoiKzkwNTMwOTMxMzkwNyIsImp0aSI6IjJxTVE0ZVpEMkNlX3MxTDc3U19KeWdjcllldyIsImNsaWVudF9pZCI6IjlkMzZlYzA0LWRlMmYtMTFlYS04N2QwLTAyNDJhYzEzMDAwMyIsInNjb3BlIjpbInJlYWQiLCJ3cml0ZSIsInVwZGF0ZSIsImRlbGV0ZSJdfQ.XfnzxFtaxs8DlA3IP_4n9peBKLNCYGSEJc-A_oO4wZ5v5VUTckBwjnYwrpkcl-ExUDO2FqkoTevLcpIstyXvNd1HejhxDq3t3uC5modp9mGdRZgmYH2zWMtAVVkEd-URQv0tgelWDsNG91iJ2Dw-ozIJnjIcPgtwjNqR_OXznyiJ4VSakRXpDv9eANQPrHkZ7GxND4PeUN5Xby-SNWHftAxB5BMGEdVbtCwctQyRSi1eDGH_P_kllNjFw_LOk4W0fcQ9atNUHFVOUZ1_TRXKERX0R7bhOKhs6mDcdDDrMX45qVDSKMd1lmlXfxU0Q5OQQN_NPAsfGhdDxKEmMjnNrA

token_type

Dönen token’ın tipini belirten değerdir.

bearer

refresh_token

Kullanıcının access_token’ının süresi bittiğinde access_token’ı yenilemek için kullanılan token değeridir. Access Token’dan daha uzun süreli olarak üretilir. Access Token süresi bittiğinde refresh token ile yenilenebilir.

eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6ImQ3OTdmZDA2LTQ2NmQtNGM1MS05N2RmLWZlYzdmZjAwMjlmOCJ9.eyJ1c2VyX25hbWUiOiIrOTA1MzA5MzEzOTA3Iiwic2NvcGUiOlsicmVhZCIsIndyaXRlIiwidXBkYXRlIiwiZGVsZXRlIl0sImF0aSI6IjJxTVE0ZVpEMkNlX3MxTDc3U19KeWdjcllldyIsImV4cCI6MTY1Mjg5NjM5MSwidXNlciI6eyJha2lub25fdXNlcl9pZCI6IkY2MUM4QkYwMEJGRDQ0QzdBRkU0NTlGMjRBMzU4RjJCIiwicGhvbmVfbnVtYmVyIjoiKzkwNTMwOTMxMzkwNyJ9LCJqdGkiOiJwUmhncTNEa3YzSm5TcE9lMFlaMHVFcFJUcVEiLCJjbGllbnRfaWQiOiI5ZDM2ZWMwNC1kZTJmLTExZWEtODdkMC0wMjQyYWMxMzAwMDMifQ.WaiUh8XHrwbW7hSFbkttE__uQsQJ2MbsAJRvTDHVqZtpJqc0ZL3X4kHn5qz-oKSLZFeEOjxax7cCzZ3RrYVGdRzUHfhU5koWsRhRnxXYIOI6KXLj__X3BXAav64psg45VlWMBipbjFmgk0o_1knTXCaglg4j3kk3xtwfmEVOkzqkj0dvJ2hYF61AvilSPcQV0lM1oUk-a3goiSQaI8oYzNUYWKBHgEJSDgOmWRwKKNHYk8Iy8ZmvJnRg1MybxymJP0UOYka64m2CHrqm_8mEWe46jjYCvICXdxS-N9jJKcYDX_y2CHSPGgESLxXthVOdZc_iuhop6qIuKYd92Nz-Hg

expires_in

3599999

Access Token’ın saniye cinsinden sonra erme zamanı

scope

read write update delete

Access Token’ın geçerli olduğu scope’lar. Sembolik bir bilgidir.

user.akinon_user_id

F61C8BF00BFD44C7AFE459F24A358F2B

Token sahibi kullanıcının Akinon User Id değeridir.

user.phone_number

+900000000000

Token sahibi kullanıcının telefon numarası

user.email

john.doe@example.com

Token sahibi kullanıcının e-mail adresidir.

jti

İstek için üretilen tekil değer

2qMQ4eZD2Ce_s1L77S_JygcrYew

{
  "access_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6ImQ3OTdmZDA2LTQ2NmQtNGM1MS05N2RmLWZlYzdmZjAwMjlmOCJ9.eyJleHAiOjE2NDkyOTYzOTEsInVzZXIiOnsiYWtpbm9uX3VzZXJfaWQiOiJGNjFDOEJGMDBCRkQ0NEM3QUZFNDU5RjI0QTM1OEYyQiIsInBob25lX251bWJlciI6Iis5MDUzMDkzMTM5MDcifSwidXNlcl9uYW1lIjoiKzkwNTMwOTMxMzkwNyIsImp0aSI6IjJxTVE0ZVpEMkNlX3MxTDc3U19KeWdjcllldyIsImNsaWVudF9pZCI6IjlkMzZlYzA0LWRlMmYtMTFlYS04N2QwLTAyNDJhYzEzMDAwMyIsInNjb3BlIjpbInJlYWQiLCJ3cml0ZSIsInVwZGF0ZSIsImRlbGV0ZSJdfQ.XfnzxFtaxs8DlA3IP_4n9peBKLNCYGSEJc-A_oO4wZ5v5VUTckBwjnYwrpkcl-ExUDO2FqkoTevLcpIstyXvNd1HejhxDq3t3uC5modp9mGdRZgmYH2zWMtAVVkEd-URQv0tgelWDsNG91iJ2Dw-ozIJnjIcPgtwjNqR_OXznyiJ4VSakRXpDv9eANQPrHkZ7GxND4PeUN5Xby-SNWHftAxB5BMGEdVbtCwctQyRSi1eDGH_P_kllNjFw_LOk4W0fcQ9atNUHFVOUZ1_TRXKERX0R7bhOKhs6mDcdDDrMX45qVDSKMd1lmlXfxU0Q5OQQN_NPAsfGhdDxKEmMjnNrA",
  "token_type": "bearer",
  "refresh_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6ImQ3OTdmZDA2LTQ2NmQtNGM1MS05N2RmLWZlYzdmZjAwMjlmOCJ9.eyJ1c2VyX25hbWUiOiIrOTA1MzA5MzEzOTA3Iiwic2NvcGUiOlsicmVhZCIsIndyaXRlIiwidXBkYXRlIiwiZGVsZXRlIl0sImF0aSI6IjJxTVE0ZVpEMkNlX3MxTDc3U19KeWdjcllldyIsImV4cCI6MTY1Mjg5NjM5MSwidXNlciI6eyJha2lub25fdXNlcl9pZCI6IkY2MUM4QkYwMEJGRDQ0QzdBRkU0NTlGMjRBMzU4RjJCIiwicGhvbmVfbnVtYmVyIjoiKzkwNTMwOTMxMzkwNyJ9LCJqdGkiOiJwUmhncTNEa3YzSm5TcE9lMFlaMHVFcFJUcVEiLCJjbGllbnRfaWQiOiI5ZDM2ZWMwNC1kZTJmLTExZWEtODdkMC0wMjQyYWMxMzAwMDMifQ.WaiUh8XHrwbW7hSFbkttE__uQsQJ2MbsAJRvTDHVqZtpJqc0ZL3X4kHn5qz-oKSLZFeEOjxax7cCzZ3RrYVGdRzUHfhU5koWsRhRnxXYIOI6KXLj__X3BXAav64psg45VlWMBipbjFmgk0o_1knTXCaglg4j3kk3xtwfmEVOkzqkj0dvJ2hYF61AvilSPcQV0lM1oUk-a3goiSQaI8oYzNUYWKBHgEJSDgOmWRwKKNHYk8Iy8ZmvJnRg1MybxymJP0UOYka64m2CHrqm_8mEWe46jjYCvICXdxS-N9jJKcYDX_y2CHSPGgESLxXthVOdZc_iuhop6qIuKYd92Nz-Hg",
  "expires_in": 3599999,
  "scope": "read write update delete",
  "user": {
      "akinon_user_id": "F61C8BF00BFD44C7AFE459F24A358F2B",
      "phone_number": "+900000000000",
      "email": "john.doe@example.com"
  },
  "jti": "2qMQ4eZD2Ce_s1L77S_JygcrYew"
}

Bu cevapla birlikte alınan access_token değeri Akinon kullanıcısı adına yapılacak olan tüm istekler için Akinon-User-Access-Token headerıyla Akifast API’ye gönderilecektir. access_token üye iş yeri tarafında kullanıcının oturumu boyunca saklanabilir, access_token süresi dolduğunda refresh_token ile 1 defa yenilenebilir.

Pop-Up İle Access Token Alma

Pop-up ile access token alma işlemi Access Token Alma işlemi ile aynıdır.

Önemli

  • Burada dikkat edilmesi gereken husus login esnasında açılan pop-up ın kapatılması ve ana ekrandan işlemlerin devam etmesi kısmıdır. Redirect https://test-merchant.com/oauth-code-handler end-pointinde yazacağınız view da aşağıda eklenen JavaScript code bloğu ile body onload sırasında pop-up ı rahatça kapatabilir ve herhangi bir sayfadan işlemlerinize devam edebilirsiniz.

if (window.parent.name === "login-popup") {
  window.opener.location.href = "/dashboard";
  window.close();
}

Ödeme Oturumu Oluşturma

Sistemde Akinon User ya da Akinon User olmadan da bir ödeme oturumu oluşturulabilir. Eğer üye iş yeri, bir Akinon kullanıcısı için oturum oluşturur ise, ödeme oturumu sadece ilgili Akinon kullanıcısı tarafından kullanılabilir.

Önemli

Giriş yapmış Akinon User ile işlem yapılacaksa Akinon User’ın access token’ı Akinon-User-Access-Token headerına setlenmelidir.

Ödeme Oturumu Oluşturma Öncesi Bilinmesi Gereken Maddeler

1) Kullanıcı Tahsisi

Ödeme oturumu oluştururken, kullanıcı tahsisi konusunda bilinmesi gereken maddeler aşağıda belirtilmiştir.

Önemli

  • İstekte kullanıcıyı temsil eden parametrelerden hiçbiri geçilmezse ödeme oturumu ziyaretçi modunda oluşturulur. Böyle bir oturum ortak ödeme sayfasında giriş yapacak ilk kullanıcıya tahsis edilecektir. İlgili parametreler öncelik sırasına göre aşağıda belirtilmiştir.

    1. Akinon-User-Access-Token: Kullanıcıyı temsil eden tüm parametrelerin geçilmesi durumunda sadece bu parametre baz alınır.

    2. session_owner_id: Parametrenin kullanılması için Akinon-User-Access-Token parametresinin geçilmemesi gerekir.

    3. merchant_customer_id: Parametrenin kullanılması için Akinon-User-Access-Token ve session_owner_id parametrelerinin geçilmemesi gerekir.

    4. merchant_customer_email: Yardımcı parametredir. merchant_customer_id ile sistemde bir kullanıcı bulunamaması durumunda e-mail adresi kullanılır.
  • İstekte kullanıcıyı temsil eden sadece Akinon-User-Access-Token parametresi geçilirse, oluşturulan ödeme oturumu Akinon-User-Access-Token’ın bağlı bulunduğu kullanıcıya tahsis edilir.

    • Böyle bir oturumu, kullanıcı ortak ödeme sayfasında tekrar giriş yapmadan kullanabilir.

    • Akinon-User-Access-Token ile session_owner_id parametresinin birlikte geçilmesine gerek yoktur. Geçilmesi durumunda, Akinon-User-Access-Token’a ait kullanıcının idsi ve session_owner_id’da geçilen değer aynı değilse sistem hata cevabı döner.
  • İstekte kullanıcıyı temsilen sadece session_owner_id parametresi geçilirse ve sistemde bu id’li kullanıcının bulunması durumunda, oluşturulan ödeme oturumu o kullanıcıya tahsis edilir.

    • Böyle bir oturum ile ortak ödeme sayfasında, sadece ilgili kullanıcının e-posta adresi ile giriş işlemi yapılabilir.

    • Kullanıcı, direkt olarak OTP kodunu girebildiği sayfaya yönlendirilir.

    • İlk başarılı giriş işleminden sonra, tekrar giriş işlemi gerektirmez.

    • Kullanıcı bulunmazsa sistem hata cevabı döner.
  • İstekte kullanıcıyı temsilen sadece merchant_customer_id parametresi geçilirse; ödeme oturumu, ilgili kullanıcının sistemde bulunması durumunda o kullanıcıya tahsis edilir.

    • Böyle bir oturum ile ortak ödeme sayfasında, sadece ilgili kullanıcının e-posta adresi ile giriş işlemi yapılabilir.

    • Kullanıcı, direkt olarak OTP kodunu girebildiği sayfaya yönlendirilir.

    • İlk başarılı giriş işleminden sonra, tekrar giriş işlemi gerektirmez.

    • Kullanıcı bulunmazsa merchant_customer_email parametresi ödeme oturumuna kullanıcı olarak tahsis edilir. Ortak ödeme sayfasında, eğer e-posta adresine ait sistemde kullanıcı varsa OTP giriş ekranı, yoksa üye olma ekranı açılır. Eğer merchant_customer_email gönderilmemişse ödeme oturumu ziyaretçi modunda oluşturulur.

2) Sepet Özelliği ve Amount Parametresi

Sepet özelliği ve amount parametresi hakkında bilinmesi gereken maddeler aşağıda belirtilmiştir.

Önemli

  • Bu özelliği kullanmak için istekte yer alan basket parametresi, istek parametreleri tablosunda belirtilen formatta oluşturulmalıdır.

  • amount ve basket parametrelerinin birlikte geçilmesi durumunda, sepette hesaplanan toplam tutar, amount parametresinde gönderilen tutara eşit olmak zorundadır. Aksi durumda ödeme oturumu oluşturma sırasında hata alınacaktır.

  • basket parametresi içinde yer alan discounts parametresinde gönderilen objeler, indirimi temsil ettiğinden dolayı toplam tutara negatif yönlü etki yapar.

3) Üye İş Yerine Ait Sözleşmelerin Sağlanması

Ortak ödeme sayfasında, sözleşmelerin görüntülenebilmesi için, üye iş yerinin kendi sisteminde 2 farklı servis hazırlaması zorunludur. İlgili servislerin hazırlanması hakkında detaylı bilgi için tıklayınız.

Önemli

  • Üye iş yerinin sağlaması zorunlu olan servis URL’leri aşağıdaki parametreler de geçilmelidir. Bu parametreler geçilirken bir validasyon uygulanmıştır. Bu validasyona göre ya agreements_iframe_url alanı dolu olmalıdır. Ya da query_agreement_types_url ve query_agreements_url alanlarının ikisi birlikte dolu olmalıdır.

    • query_agreement_types_url: Sözleşme tiplerinin sağlanacağı servis URL’idir.

    • query_agreements_url: Sözleşmelerin sağlanacağı servis URL’idir.

    • agreements_iframe_url: Sözleşmelerin sağlanacağı iframe URL’idir.

4) Teslimat Seçeneklerinin Sağlanması

Ortak ödeme sayfasında, kullanıcının seçtiği adrese göre teslimat seçeneklerinin sorgulanıp görüntülenmesi için, üye iş yerinin kendi sisteminde bir servis hazırlaması zorunludur. İlgili servisin hazırlanması hakkında detaylı bilgi için tıklayınız.

Önemli

  • Üye iş yerinin sağlaması zorunlu olan servis URL’i aşağıdaki parametrede geçilmelidir.

    • query_shipping_option_url: Kullanıcının adresine göre teslimat seçeneklerinin sağlanacağı servis URL’idir.

5) Başarılı Ödeme Sonucu Yapılan Bildirim

Ödeme akışının sorunsuz tamamlanabilmesi için, üye iş yerinin kendi sisteminde bildirim isteğini karşılayacak bir servis hazırlaması zorunludur. İlgili servisin hazırlanması hakkında detaylı bilgi için tıklayınız.

Önemli

  • Üye iş yerinin sağlaması zorunlu olan servis URL’i aşağıdaki parametrede geçilmelidir.

    • notification_url: Başarılı ödeme sonucu üye iş yerinin sistemini besleyecek olan servis URL’idir.

6) Ödeme Oturumu Niyet Bildirim

Akifast ile ödeme oturumu oluşturulurken, ödeme işleminin doğruluğunu sağlamak için kullanılır. İlgili servisin hazırlanması hakkında detalı bilgi için tıklayınız.

Önemli

  • Üye iş yerinin sağlaması zorunlu olmayan bu servis URL’i aşağıdaki parametrede geçilmelidir.

    • payment_intent_url: Ödeme işleminin doğruluğunu sağlamak için kullanılacak olan servis URL’idir.

7) Ödeme Oturumunun State Diagramı

Önemli

  • Ödeme Oturumu oluşturulduğunda oturumun statusü ACTIVE olarak işaretlenir eğer 1 saatlik bir süreçte herhangi bir işlem gerçekleştirilmezse statü değeri joblar ile EXPIRED olarak işaretlenir.

  • Eğer Başarılı bir şekilde ödeme işlemi gerçekleştirilir ise statü değeri ACTIVE ‘den COMPLETED değerine çekilir.

  • Başarılı bir ödemeden sonra üye iş yerine bildirim sağlanamadığında statü değeri ACTIVE ‘den QUARANTINE değerine çekilir.

  • Ödeme oturumunun statüsü QUARANTINE ‘da iken, joblar belli aralıklar ile üye iş yerine bildirim sağlamaya çalışır eğer başarılı olamaz ise statü değeri QUARANTINE ‘dan WAITING_FOR_VOID değerine çekilir.

  • Ödeme oturumunun statüsü WAITING_FOR_VOID statüsünde iken başarılı bir void işlemi gerçekleştirildiğinde statü değeri FAILED_AFTER_VOID değerine çekilir.

  • Ödeme oturumunun statüsü WAITING_FOR_VOID statüsünde iken başarısız void işlemleri sonucunda statü değeri MANUAL_REVIEW değerine çekilir.

Payment Session Status States

Ödeme Oturumu Oluşturma İsteği ve Cevabı

İsteğin gönderileceği URL ve metodu

Metot

URL

Açıklama

POST

/processor/payment-sessions

Akinon User Access Token ile yada Token olmadan istek atılır.

İstek Parametreleri ve Açıklamaları

Parametre

Tip

Zorunlu

Açıklama

customer_id

string

opsiyonel

customer’a ait kimlik bilgisi.

amount

bigdecimal

zorunlu

sepetteki ürünlerin tutarı.

currency

currency

opsiyonel

ödeme oturumunun para birimi. Currency değeri eklenmezse default olarak TRY atanır.

description

string

opsiyonel

sepete eklenen ürünlerin detaylı açıklaması.

order_id

string

zorunlu

sepete eklenen ürünlerin siparişi için oluşturulan unique bir id.

conversation_id

string

opsiyonel

Üye iş yeri tarafından gönderilecek iletişim numarası, bumerang değer

cvv_required

boolean

opsiyonel

kartın cvv değernin kullanılması gerektiği bilgisi.

order_date

string

zorunlu

sipariş tarihi

cancel_url

string

zorunlu

sipariş iptal edildiğinde yada başarısız bir ödeme sonrasında yönlendirilen url dir.

success_url

string

zorunlu

başarılı bir ödeme işlemi sonrasında yönlendirilen url.

notification_url

string

zorunlu

ödeme işlemi başarılı bir şekilde bittikten sonra tüccarın bilgilendirileceği url.

payment_intent_url

string

opsiyonel

sipariş bilgilerinin, doğruluğunu sağlamak için kullanılır.

query_shipping_option_url

string

zorunlu

kargo bilgilerinin sorgulanacağı url.

query_agreements_url

string

eğer agreements_iframe_url alanı boş ise bu alan zorunlu

sözleşmelerin sorgulanacağı url.

query_agreement_types_url

string

eğer agreements_iframe_url alanı boş ise bu alan zorunlu

sözleşme tiplerinin sorgulanacağı url.

agreements_iframe_url

string

eğer query_agreements_url ve query_agreement_types_url alanları boş ise bu alan zorunlu

sözleşme tiplerinin sorgulanacağı iframe url’i.

preauth

boolean

opsiyonel

ödeme işleminin ön otorizasyonlu olup olmadığını belirler. Default olarak false değeri atanır.

is_threed

boolean

opsiyonel

ödeme işleminin 3D ile gerçekleştirilmesini belirler. Default olarak false değeri atanır.

enable_installments

boolean

opsiyonel

varsa taksitlerin uygulanması için kullanılır. Default olarak true atanır.

merchant_customer_id

string

opsiyonel

üye iş yerine ait müşteri kimlik numarası. Parametrenin geçilmesi durumunda ödeme oturumunun sahipliği belirlenir.

merchant_customer_phone_number

string

opsiyonel

üye iş yerine ait müşteri telefon numarası.

merchant_customer_email

string

opsiyonel

üye iş yerine ait müşteri e-mail adresi.

basket

object

opsiyonel

ödeme oturumu sırasında seçilen ürünlerin tutulduğu sepettir.

basket.basket_id

string

zorunlu

sepetin kimlik numarası.

basket.total_product_amount

bigdecimal

zorunlu

sepetteki ürünlerin toplam tutarı.

basket.total_discount_amount

bigdecimal

zorunlu

sepetteki ürünlere uygulanan toplam indirim tutarı.

basket.total_amount

bigdecimal

zorunlu

sepetteki ürünlerin hesaplanmış toplam tutarı.

basket.currency

currency

opsiyonel

sepete eklenen ürünün para birimi. Currency değeri eklenmezse default olarak TRY atanır.

basket.basket_items[0].sku

string

zorunlu

ürünün stok kodudur.

basket.basket_items[0].basket_item_id

string

zorunlu

sepetteki her bir ürünün kendine özgü kimlik numarası.

basket.basket_items[0].unit_price

bigdecimal

zorunlu

sepetteki her bir ürünün birim fiyatı.

basket.basket_items[0].quantity

long

zorunlu

sepetteki her bir ürünün miktarı

basket.basket_items[0].price

bigdecimal

zorunlu

sepetteki her bir ürünün hesaplanan tutarı.

basket.basket_items[0].name

string

zorunlu

sepetteki her bir ürünün ismi.

basket.basket_items[0].image_url

string

opsiyonel

sepetteki her bir ürün resminin url.

basket.basket_items[0].base_code

string

opsiyonel

ana ürün kodu, ürüne yorum yapılırken kullanılacak alan.

basket.discounts[0].description

string

opsiyonel

sepetteki ürünlere uygulanacak indirimin açıklaması.

basket.discounts[0].amount

bigdecimal

zorunlu

sepetteki ürünlere uygulanacak indirimin oranı.

session_owner_id

string

opsiyonel

Akinon sisteminde yer alan bir kullanıcı id. Parametrenin geçilmesi durumunda, ödeme oturumu sadece bu kullanıcı için tahsis edilir.

Dönüş Değerleri ve Açıklamaları

Dönüş Değeri

Tip

Açıklama

merchant_id

string

oturum oluşturulurken yönlendirildiği tüccarın kimlik numarası.

customer_id

string

customer’a ait kimlik bilgisi.

amount

bigdecimal

sepetteki ürünlerin tutarı.

currency

currency

ödeme oturumunun para birimi.

description

string

sepete eklenen ürünlerin detaylı açıklaması.

order_id

string

sepete eklenen ürünlerin siparişi için oluşturulan unique bir id.

cvv_required

boolean

kartın cvv değernin kullanılması gerektiği bilgisi.

order_date

string

sipariş tarihi.

cancel_url

string

sipariş iptal edildiğinde yada başarısız bir ödeme sonrasında yönlendirilen url.

success_url

string

başarılı bir ödeme işlemi sonrasında yönlendirilen url.

notification_url

string

ödeme işlemi başarılı bir şekilde bittikten sonra tüccarın bilgilendirileceği url.

payment_intent_url

string

sipariş bilgilerinin, doğruluğunu sağlamak için kullanılır.

query_shipping_option_url

string

kargo bilgilerinin sorgulanacağı url.

query_agreements_url

string

sözleşmelerin sorugulanacağı url.

query_agreement_types_url

string

sözleşme tiplerinin sorugulanacağı url.

agreements_iframe_url

string

sözleşme tiplerinin sorugulanacağı iframe url’i.

shipping_address

string

kargonun gideceği adresi gösteren key.

billing_address

string

faturanın gideceği adresi gösteren key.

shipping_option_key

string

kargolara özel kimlik numarası.

shipping_amount

bigdecimal

kargo tutarı.

total_amount

bigdecimal

sepetteki ürünlerin ve kargonun toplam tutarı.

preauth

boolean

ödeme işleminin ön otorizasyonlu olup olmadığını belirler. Default olarak false değeri atanır.

is_threed

boolean

ödeme işleminin 3D ile gerçekleştirilmesini belirler. Default olarak false değeri atanır.

enable_installments

boolean

varsa taksitlerin uygulanması için kullanılır. Default olarak true atanır.

session_token

string

oturum için oluşturulan benzersiz bir key.

transaction_token

string

oturum için oluşturulan benzersiz bir key.

akinon_user_id

string

akinon user için oluşturulan kimlik numarası.

created_date

string

oturumun oluşturulduğu tarih.

expiry_date

string

oturumun sonlanacağı tarih.

status

enum

oturumun durumu SessionTokenStatus

merchant_customer_id

string

üye iş yerine ait müşteri kimlik numarası.

merchant_customer_phone_number

string

üye iş yerine ait müşteri telefon numarası.

merchant_customer_email

string

üye iş yerine ait müşteri e-mail adresi.

basket

object

ödeme oturumu sırasında seçilen ürünlerin, indirimlerin tutulduğu sepettir.

basket.basket_id

string

sepetin kimlik numarası.

basket.total_product_amount

bigdecimal

sepetteki ürünlerin toplam tutarı.

basket.total_discount_amount

bigdecimal

sepetteki ürünlere uygulanan toplam indirim tutarı.

basket.total_amount

bigdecimal

sepetteki ürünlerin hesaplanmış toplam tutarı.

basket.currency

currency

sepete eklenen ürünün para birimi. Currency değeri eklenmezse default olarak TRY atanır.

basket.basket_items[0].sku

string

ürünün stok kodudur.

basket.basket_items[0].basket_item_id

string

sepetteki her bir ürünün kendine özgü kimlik numarası.

basket.basket_items[0].unit_price

bigdecimal

sepetteki her bir ürünün birim fiyatı.

basket.basket_items[0].quantity

long

sepetteki her bir ürünün miktarı.

basket.basket_items[0].price

bigdecimal

sepetteki her bir ürünün hesaplanan tutarı.(quantity * unit_price)

basket.basket_items[0].name

string

sepetteki her bir ürünün ismi.

basket.basket_items[0].image_url

string

sepetteki her bir ürün resminin url.

basket.basket_items[0].base_code

string

ana ürün kodu, ürüne yorum yapılırken kullanılacak alan.

basket.discounts[0].description

string

sepetteki ürünlere uygulanacak indirimin açıklaması.

basket.discounts[0].amount

bigdecimal

sepetteki ürünlere uygulanacak indirimin oranı.

session_owner_email

string

Parametrenin dolu gelmesi, ilgili ödeme oturumunun sadece bu kullanıcıya ait olduğunu gösterir.

Örnek İstek:

{
"customer_id" : "CUSTOMER_060916",
"amount" : "80",
"currency" : "TRY",
"description": "test description",
"order_id" : "280220221430",
"conversation_id": "JHsxbsW280220221430",
"order_date" : "2021-12-16T15:01:23.51+03:00",
"cancel_url" : "http://localhost:7005/cancel-order/20220228143627",
"success_url" : "http://localhost:7005/success-order/20220228143627",
"notification_url" : "http://localhost:7005/notify-url/20220228143627",
"payment_intent_url" : "http://localhost:7005/payment-intent-url",
"preauth" : false,
"is_threed": false,
"query_shipping_option_url": "https://61c1c3459dbcca0017c82102.mockapi.io/api/shipping_options",
"query_agreements_url": "https://61dd7bc1f60e8f0017668849.mockapi.io/agreements",
"query_agreement_types_url": "http://localhost:7005/query-agreement-types",
"agreements_iframe_url": "http://localhost:7005/agreements-iframe-url",
"enable_installments" : true,
"merchant_customer_id": null,
"merchant_customer_phone_number": null,
"merchant_customer_email": null,
"session_owner_id": "C2C0CE12F64B4103809BB854D08706F5",
"basket" : {
    "basket_id" : "B-202111191524",
    "total_product_amount": "100",
    "total_discount_amount" : "20",
    "total_amount" : "80",
    "currency" : "TRY",
    "total_quantity" : 1,
    "basket_items" : [
        {
            "sku": "2100123574",
            "base_code": "base_code_1",
            "basket_item_id" : "P-B-202111191524-1",
            "unit_price": "100",
            "quantity" : 1,
            "price": "100",
            "brand" : "test brand",
            "name" : "test name",
            "image_url" : "test image url"
        }
    ],
    "discounts" : [
        {
            "description" : "test description",
            "amount" : "20"
        }
    ]
  }
}

Örnek Cevap:

{
"trace_id": "a4dde67e-2ee5-417e-980d-45c7aa0e088f",
"response": {
    "merchant_id": "9d36ec04-de2f-11ea-87d0-0242ac130003",
    "customer_id": "CUSTOMER_060916",
    "amount": 80,
    "currency": "TRY",
    "description": "test description",
    "order_id": "280220221430",
    "cvv_required": true,
    "order_date": "2021-12-16T15:01:23.51+03:00",
    "cancel_url": "http://localhost:7005/cancel-order/20220228143627",
    "success_url": "http://localhost:7005/success-order/20220228143627",
    "query_shipping_option_url": "https://61c1c3459dbcca0017c82102.mockapi.io/api/shipping_options",
    "query_agreements_url": "https://61dd7bc1f60e8f0017668849.mockapi.io/agreements",
    "query_agreement_types_url": "http://localhost:7005/query-agreement-types",
    "agreements_iframe_url": "http://localhost:7005/agreements-iframe-url",
    "payment_intent_url": "http://localhost:7005/payment-intent-url",
    "shipping_address": null,
    "billing_address": null,
    "shipping_option_key": null,
    "shipping_amount": null,
    "total_amount": 100,
    "preauth": false,
    "is_threed": false,
    "enable_installments": true,
    "session_token": "e7d624f0-c842-4826-a344-8c05cc6d6114",
    "transaction_token": "JGmhG9bOro82/84JdjAWNflDH2dynHsckkrpRRO9pc73NLwSSe5+dzHa9JxdpIBKnWtAEfGhaYpFGrEoBQJlyg==",
    "akinon_user_id": "C2C0CE12F64B4103809BB854D08706F5",
    "created_date": "2022-03-01T11:08:29.67+03:00",
    "expiry_date": "2022-03-01T12:08:29.66+03:00",
    "status": "ACTIVE",
    "merchant_customer_id": null,
    "merchant_customer_phone_number": null,
    "merchant_customer_email": null,
    "session_owner_email": "john.doe@example.com",
    "basket": {
        "basket_id": "B-202111191524",
        "total_product_amount": 100,
        "total_discount_amount": 20,
        "total_amount": 80,
        "currency": "TRY",
        "basket_items": [
            {
                "sku": "2100123574",
                "base_code": "base_code_1",
                "basket_item_id": "P-B-202111191524-1",
                "unit_price": 100,
                "quantity": 1,
                "price": 100,
                "name": "test name",
                "image_url": "test image url"
            }
        ],
        "discounts": [
            {
                "description": "test description",
                "amount": 20
            }
        ]
      }
  }
}

Ödeme Oturumu Oluşturma Esnasında Karşılaşılabilecek Hatalar

Bu bölümde ödeme oturumu oluşturma esnasında karşılaşılabilecek belli başlı hatalara yer verilmiştir. Genel olarak tüm API hata kodlarına erişmek için tıklayınız.

1) Kullanıcı Tahsisi Hataları

Kullanıcı tahsisi hakkında aşağıdaki hatalar alınabilir.

Önemli

  • İstekte hem Akinon-User-Access-Token hem de session_owner_id geçilirse ve Akinon-User-Access-Token’ye ait kullanıcı idsi session_owner_id’ye eşit değilse aşağıdaki hata alınır.

    {
        "trace_id": "fc3ffea0-7261-4eb7-b3e1-db4f4079afed",
        "response": {
            "errors": [
                {
                    "error_code": "INVALID_USER_FOR_PAYMENT_SESSION",
                    "message": "Kullanıcı adı ödeme oturumu için geçerli değil.",
                    "argument": null
                }
            ]
        }
    }
    
  • İstekte sadece session_owner_id parametresi geçilirse ve bu idye ait sistemde bir kullanıcı bulunamazsa aşağıdaki hata alınır.

    {
        "trace_id": "35ec0c18-7f7f-404a-8dd0-7921a97b1d42",
        "response": {
            "errors": [
                {
                    "error_code": "USER_NOT_FOUND",
                    "message": "Kullanıcı bulunamadı.",
                    "argument": null
                }
            ]
        }
    }
    

2) Sepet ile Tutar Arasındaki Uyuşmazlık

Önemli

  • İstekte basket parametresi altında gönderilen ürünlerin toplam tutarı ile amount parametresinde gönderilen tutarın aynı olmaması durumunda aşağıdaki hata cevabı döner.
  • discounts parametresi içinde gönderilen indirimler eksi yönde etkiye sahiptir.

{
    "trace_id": "ef7c0a36-c8ae-46ce-adfb-39a3ea40ac2b",
    "response": {
        "errors": [
            {
                "error_code": "AMOUNTS_DONT_MATCH",
                "message": "Sepet ve Sipariş tutarları örtüşmüyor.",
                "argument": null
            }
        ]
    }
}

3) Sepet içindeki Tutarların Arasındaki Uyuşmazlık

Sepet içinde gönderilen tutar parametrelerin uyuşmazlığı sonucu aşağıdaki hatalar alınır.

Önemli

  • total_product_amount parametresinde, basket_items içindeki ürünlerin toplam tutarından farklı değer gönderilirse aşağıdaki hata döner. Bu tutarda discounts içindeki indirimler hesaba katılmaz.

{
    "trace_id": "5b426641-7853-429b-9ffe-08be01bfdf55",
    "response": {
        "errors": [
            {
                "error_code": "INVALID_TOTAL_PRODUCT_AMOUNT",
                "message": "Toplam ürün bedeli (total_product_amount) parametresi hatalı",
                "argument": null
            }
        ]
    }
}
  • total_amount parametresinde, basket_items içindeki ürünlerin toplam tutarından farklı değer gönderilirse aşağıdaki hata döner. Bu tutarda discounts içindeki indirimler hesaba katılır.

{
    "trace_id": "8a4ca0f9-9d28-4d27-a585-1d49475967d0",
    "response": {
        "errors": [
            {
                "error_code": "INVALID_TOTAL_AMOUNT",
                "message": "Sepet toplam tutar (total_amount) parametresi hatalı",
                "argument": null
            }
        ]
    }
}
  • total_discount_amount parametresinde, discounts içindeki indirimlerin toplam tutarından farklı değer gönderilirse aşağıdaki hata döner.

{
    "trace_id": "b001f490-38b7-450c-81a9-b863d63846e5",
    "response": {
        "errors": [
            {
                "error_code": "INVALID_TOTAL_DISCOUNT_AMOUNT",
                "message": "Toplam indirim tutarı (total_discount_amount) parametresi hatalı",
                "argument": null
            }
        ]
    }
}
  • basket.total_discount_amount, basket.basket_items[i].unit_price, basket.basket_items[i].price, basket.discounts[i].amount değerleri 0’a eşit olabilirler.

Bu durumda hata alınmaz. Ama bu değerler sıfıra eşitse ve sepette yalnızca 1 tane ürün varsa, amount değeri de 0 olur ve ancak bu şekilde aşağıdaki hata alınır.

{
    "trace_id": "4f58e075-345e-488f-8855-9453ceef7ee0",
    "response": {
        "errors": [
            {
                "error_code": "INVALID_AMOUNT_VALUE",
                "message": "Invalid amount. Please provide a valid, positive value.",
                "argument": "basket.totalProductAmount"
            },
            {
                "error_code": "INVALID_AMOUNT_VALUE",
                "message": "Invalid amount. Please provide a valid, positive value.",
                "argument": "basket.totalAmount"
            },
            {
                "error_code": "INVALID_AMOUNT_VALUE",
                "message": "Invalid amount. Please provide a valid, positive value.",
                "argument": "amount"
            }
        ]
    }
}

4) Aynı Sipariş Numarasının Kullanılması

Önemli

  • İstekte daha önceden başka bir ödeme oturumunda kullanılmış bir sipariş numarası kullanılması durumunda aşağıdaki hata cevabı döner.

{
    "trace_id": "8bc1d536-a1f6-4e18-835b-73125b28d081",
    "response": {
        "errors": [
            {
                "error_code": "ORDER_ID_EXISTS",
                "message": "Bu Order Id ile daha önceden bir oturum oluşturulmuş.",
                "argument": null
            }
        ]
    }
}

Ödeme Sayfasına Yönlendirme

Ödeme Sayfasına Yönlendirme

Ödeme oturumu oluşturulduktan sonra elde edilen session_token ve transaction_token ile ödeme sayfası için bir url oluşturulur. Elde edilen transaction_token url-encoded hale getirilir ve yeni oluşturulan URL’e eklenir. Bu adımdan sonra artık ödeme sayfasına yönlendirilebilir.

Önemli

Elde edilen transaction_token url-encoded hale getirmek için internette herhangi bir siteden bu işlem için yardım alınabilir.

İsteğin gönderileceği URL ve metodu

Metot

URL

Açıklama

GET

/hpp?session_token=e7d624f0-c842-4826-a344-8c05cc6d6114&transaction_token=JGmhG9bOro82%2F84JdjAWNflDH2dynHsckkrpRRO9pc73NLwSSe5%2BdzHa9JxdpIBKnWtAEfGhaYpFGrEoBQJlyg%3D%3D

Parametrelerle birlikte bu URL’e yönlendirilen kullanıcı buradan da ödeme ekranına yönlendirilir.

Pop-Up İle Ödeme Sayfasına Yönlendirme

Pop-up ile ödeme sayfasına yönlendirme Ödeme Sayfasına Yönlendirme işlemi ile aynıdır.

Önemli

  • Burada dikkat edilmesi gereken husus yönlendirme işlemini bir pop-up içinde gerçekleştirme kısmıdır. Yukarıda anlatılan kısımları yaptıktan sonra oluşturulan URL’i aşağıdaki code bloğundaki gibi kullanarak pop-up ile açabilirsiniz.

<a href="#" class="popup-btn" target="popup" onclick= 'checkOutWithPopup(); return false;'>Hpp Popup</a>
  • checkOutWithPopup() fonksiyonu ile yukarıda oluşturulan urlde pop-up window kolayca açılabilir

function checkOutWithPopup() {
    window.open('/hpp?session_token=e7d624f0-c842-4826-a344-8c05cc6d6114&transaction_token=JGmhG9bOro82%2F84JdjAWNflDH2dynHsckkrpRRO9pc73NLwSSe5%2BdzHa9JxdpIBKnWtAEfGhaYpFGrEoBQJlyg%3D%3D','hpp-popup','width=600,height=600');
}

Başarılı İşlemlerin Sorgulanması

Başarılı İşlemlerin Sorgulaması

Ödeme oturumundaki başarılı işlemleri sorgulamak için, istekte session_token ve transaction_token parametreleri ya da biliniyorsa sadece akipay_transaction_id parametresi geçilmelidir.

Önemli

  • session_token ve transaction_token parametreleri ya da akipay_transaction_id parametresi geçilmediği zaman işlem bulunamadı hatası alınır.

  • Sorgu sonucu liste dönmektedir. Dönen işlemlerin tipleri: TransactionType

İsteğin gönderileceği URL ve metodu

Metot

URL

Açıklama

POST

/payment-sessions/transactions/successful

Üye iş yerine ait kullanıcı adı ve şifre bilgileriyle, Basic Authentication yöntemiyle istek atılmalıdır.

İstek Parametreleri ve Açıklamaları

Parametre

Tip

Zorunlu

Açıklama

session_token

string

opsiyonel

ödeme oturumuna ait oturum tokenı.

transaction_token

string

opsiyonel

ödeme oturumuna ait işlem tokenı.

akipay_transaction_id

string

opsiyonel

sorgulanmak istenen işlemin Akifast tarafındaki benzersiz idsi.

Önemli

Aşağıda belirtilen dönüş değerleri liste içinde dönmektedir.

Dönüş Değerleri ve Açıklamaları

Parametre

Tip

Açıklama

order_id

string

akinon da kayıtlı olan sipariş numarası.

is_successful

boolean

işlemin başarılı olduğunun bilgisini verir.

merchant_id

string

üye iş yerine ait akinon kimlik numarası.

akipay_user_id

string

Akifast kullanıcısının Akinon kimlik numarası.

transaction

obje

ödeme işlemi sırasında oluşturulan ödeme ye ait bilgilerin tutulduğu obje.

transaction.transaction_date

string

başarılı ödeme işleminin tutulduğu kayıtın tarihi.

transaction.is_preauth

boolean

başarılı ödeme işleminin ön otorizasyon bilgisi.

transaction.is_threed

boolean

başarılı ödeme işleminin 3D ödeme bilgisi.

transaction.currency

currency

ödeme para birimi.

transaction.order_amount

bigdecimal

siparişin tutarı.

transaction.total_paid_amount

bigdecimal

toplam ödenen tutar.

transaction.installment_count

long

taksit sayısı.

transaction.installment_amount

bigdecimal

taksit tutarı.

transaction.interest_rate

bigdecimal

faiz oranı.

transaction.interest_amount

bigdecimal

faiz tutarı.

transaction.shipping_amount

bigdecimal

siparişin kargo tutarı.

transaction.shipping_option_key

string

kargo seçeneğinin akinonda ki key karşılığı.

transaction.akipay_transaction_id

string

başarılı ödeme işleminin akinon kimliği.

transaction.payment_system_raw_response

string

ödeme sisteminden dönen ham cevap.

payment_info

object

başarılı ödeme işleminin geçtiği sistem bilgileri.

payment_info.payment_system_name

string

ödeme işleminin geçtiği sistemin ismi.

payment_info.payment_system_code

string

ödeme işleminin geçtiği sistemin kodu.

payment_info.payment_system_bank

string

ödeme işleminin geçtiği banka ismi.

payment_info.payment_system_eftcode

string

ödeme işleminin geçtiği bankanın eft kodu.

payment_info.pg_transaction_id

string

ödeme sistemindeki bilgilerin tutulduğu benzersiz kimlik numarası.

payment_info.pg_reference_id

string

ödeme sisteminin referans numarası.

payment_info.pg_auth_code

string

ödeme sisteminin authentication kodu.

payment_info.pg_settlement_number

string

ödeme sistemi gün sonu numarası.

payment_info.pg_order_id

string

pos sipariş numarası.

payment_info.pg_group_id

string

pos grup numarası.

payment_info.pg_proc_return_code

string

pos işlem dönüş kodu.

payment_info.pg_merchant_id

string

pos üye iş yeri idsi.

payment_info.pg_terminal_id

string

pos terminal idsi.

payment_info.pg_transaction_date

string

pos işlem tarihi.

payment_info.pg_system_error_message

string

pos sistem hata mesajı.

card_info[0].masked_card_number

string

başarılı ödeme işleminin geçildiği kartın maskeli numarası.

card_info[0].masked_card_holder_name

string

başarılı ödeme işleminin geçildiği kartın üzrindeki maskeli isim.

card_info[0].bin

string

başarılı ödeme işleminin geçildiği kartın bin numarası.

card_info[0].card_type

enum

başarılı ödeme işleminin geçildiği kartın tipi CardType .

card_info[0].card_brand

enum

başarılı ödeme işleminin geçildiği kartın markası CardBrand .

card_info[0].card_network

string

başarılı ödeme işleminin geçildiği kartın bağlı olduğu sistem.

card_info[0].issuer

string

ödeme işleminde kullanılan kartın bankası.

card_info[0].is_commercial

boolean

ödeme işleminde kullanılan kartın ticari bilgisi.

card_info[0].saved_card

boolean

ödeme işleminde kullanılan kartıl kaytılı kart bilgisi.

shipping_address

object

kargo adresi (Obje detayları kargo sorgulamadaki ile aynıdır.)

billing_address

object

fatura adresi (Obje detayları kargo sorgulamadaki ile aynıdır.)

akipay_user

object

akinon kullanıcısın’a ait bilgilerin dönüldüğü obje.

akipay_user.name

string

Akifast kullanıcısının ismi.

akipay_user.surname

string

Akifast kullanıcısının soyismi.

akipay_user.gender

string

Akifast kullanıcısının cinsiyeti.

akipay_user.email

string

Akifast kullanıcısının e-posta adresi

akipay_user.birth_date

date

Akifast kullanıcısının doğum tarihi.

akipay_user.identity_number

string

Akifast kullanıcısının kimlik numarası.

akipay_user.phone_number

string

Akifast kullanıcısının telefon numarası(ülke kodu + telefon numarası).

akipay_user.phone.country_phone_code

string

Akifast kullanıcısının telefon numarasının ülke kodu Örn: +90.

akipay_user.phone.national_phone_number

string

Akifast kullanıcısının telefon numarası Örn: 5554447788.

akipay_user.akinon_user_id

string

Akifast kullanıcısının Akinon kimlik numarası.

akipay_user.status

enum

Akifast kullanıcısının statüsü değerlerini içerebilir. UserStatus.

akipay_user.verification_date

date

Akifast kullanıcısının Akinon hesabını doğrulama tarihi.

akipay_user.email_verified

boolean

Akifast kullanıcısının emailinin doğrulandığının bilgisi.

agreements

boolean

sözleşme onay bilgisi.

merchant_customer_id

string

üye iş yerine ait kullanıcı kimlik numarası.

merchant_customer_phone_number

string

üye iş yerine ait kullanıcı telefon numarası.

merchant_customer_email

string

üye iş yerine ait kullanıcı email adresi.

basket_id

string

sepet kimlik numarası.

conversation_id

string

özel iletişim kimlik numarası.

Örnek İstek 1:

{
    "session_token": "7d432237-6886-49c1-b4ed-afbdf7cf8ca5",
    "transaction_token": "PJU6xGn4moOW7MWmiDFrRSbzMefpsgUCvq1yQjirQoi40Wzwlrek0nJnuJnTlwAR2hUp69fpBFmZaFEjtl7f0Q=="
}

Örnek İstek 2:

{
    "akipay_transaction_id": "1a5ca128-e5d6-465e-9d60-f05a82c5ba97"
}

Örnek Cevap:

{
    "trace_id": "c4b294e4-5e7c-4ba3-8fb6-b8eca777ee06",
    "response": [
        {
            "order_id": "myorderid202208107",
            "is_successful": true,
            "merchant_id": "9d36ec04-de2f-11ea-87d0-0242ac130003",
            "akipay_user_id": "BEF5606EC00040B09EAE5A31EE912C2D",
            "transaction": {
                "transaction_date": "2022-06-06T16:15:01.03+03:00",
                "is_preauth": false,
                "is_threed": true,
                "currency": "TRY",
                "order_amount": 80.0,
                "total_paid_amount": 89.9,
                "installment_count": 1,
                "installment_amount": 89.9,
                "interest_rate": 0.0,
                "interest_amount": 0.0,
                "shipping_amount": 9.9,
                "shipping_option_key": "12",
                "akipay_transaction_id": "1a5ca128-e5d6-465e-9d60-f05a82c5ba97",
                "payment_system_raw_response": "<?xml version=\"1.0\" encoding=\"ISO-8859-9\"?>\n<CC5Response>\n  <OrderId>ORDER-22157QPfI14158</OrderId>\n  <GroupId>ORDER-22157QPfI14158</GroupId>\n  <Response>Approved</Response>\n  <AuthCode>025144</AuthCode>\n  <HostRefNum>215716864074</HostRefNum>\n  <ProcReturnCode>00</ProcReturnCode>\n  <TransId>22157QPfI14160</TransId>\n  <ErrMsg></ErrMsg>\n  <Extra>\n    <SETTLEID>2072</SETTLEID>\n    <TRXDATE>20220606 16:15:31</TRXDATE>\n    <ERRORCODE></ERRORCODE>\n    <CEVAPALTKODUACIKLAMA>ACIKLAMA</CEVAPALTKODUACIKLAMA>\n    <CARDISSUER>T. IS BANKASI A.S.</CARDISSUER>\n    <CAVVRESULTCODE>3</CAVVRESULTCODE>\n    <PARAPUAN>000000000831</PARAPUAN>\n    <SEYAHATAVANSPUANVADETARIHI>20151010</SEYAHATAVANSPUANVADETARIHI>\n    <KULLANILABILIRBONUS>000000000831</KULLANILABILIRBONUS>\n    <KULLANILANPARAPUANTRL>-110.1</KULLANILANPARAPUANTRL>\n    <CEVAPALTKODU>0000</CEVAPALTKODU>\n    <CARDBRAND>VISA</CARDBRAND>\n    <KULLANILANSEYAHATAVANSPUANTRL>200.0</KULLANILANSEYAHATAVANSPUANTRL>\n    <SGKKOMISYON>000000001000</SGKKOMISYON>\n    <NUMCODE>00</NUMCODE>\n    <SEYAHATAVANSPUANTRL>000000000908</SEYAHATAVANSPUANTRL>\n  </Extra>\n</CC5Response>\n"
            },
            "payment_info": {
                "payment_system_name": "Finansbank Nestpay",
                "payment_system_code": "FINANSBANK",
                "payment_system_bank": "NESTPAY",
                "payment_system_eftcode": null,
                "pg_transaction_id": "22157QPfI14160",
                "pg_reference_id": "215716864074",
                "pg_auth_code": "025144",
                "pg_settlement_number": "2072",
                "pg_order_id": "ORDER-22157QPfI14158",
                "pg_group_id": "ORDER-22157QPfI14158",
                "pg_proc_return_code": "00",
                "pg_merchant_id": null,
                "pg_terminal_id": null,
                "pg_transaction_date": "20220606 16:15:31",
                "pg_system_error_message": null
            },
            "card_info": [
                {
                    "masked_card_number": "45080345********",
                    "masked_card_holder_name": null,
                    "bin": "45080345",
                    "card_type": "CREDIT",
                    "card_brand": "VISA",
                    "card_network": "MAXIMUM",
                    "issuer": null,
                    "is_commercial": false,
                    "saved_card": false
                }
            ],
            "shipping_address": {
                "name": "John",
                "surname": "Doe",
                "phone_number": "00000000000",
                "postal_code": null,
                "notes": null,
                "company_name": null,
                "address_title": "test address",
                "tax_no": null,
                "tax_office": null,
                "is_default": true,
                "line": "test 123",
                "address_type": "CUSTOMER",
                "country": {
                    "name": "Türkiye",
                    "code": "TR"
                },
                "city": {
                    "name": "İSTANBUL",
                    "code": "ISTANBUL"
                },
                "town": {
                    "name": "BAKIRKÖY",
                    "code": "ISTANBUL_BAKIRKOY"
                },
                "district": {
                    "name": "ATAKÖY 1. KISIM MAH",
                    "code": "89069285"
                },
                "status": "ACTIVE",
                "hash_data": "A8781D1441A184136477A826B30AE3ECA083E6C55731A0E7FA89E8148C7B60C9"
            },
            "billing_address": {
                "name": "John",
                "surname": "Doe",
                "phone_number": "00000000000",
                "postal_code": null,
                "notes": null,
                "company_name": null,
                "address_title": "test address",
                "tax_no": null,
                "tax_office": null,
                "is_default": true,
                "line": "test 123",
                "address_type": "CUSTOMER",
                "country": {
                    "name": "Türkiye",
                    "code": "TR"
                },
                "city": {
                    "name": "İSTANBUL",
                    "code": "ISTANBUL"
                },
                "town": {
                    "name": "BAKIRKÖY",
                    "code": "ISTANBUL_BAKIRKOY"
                },
                "district": {
                    "name": "ATAKÖY 1. KISIM MAH",
                    "code": "89069285"
                },
                "status": "ACTIVE",
                "hash_data": "A8781D1441A184136477A826B30AE3ECA083E6C55731A0E7FA89E8148C7B60C9"
            },
            "akipay_user": {
                "name": "John",
                "surname": "Doe",
                "gender": "M",
                "email": "john.doe@example.com",
                "birth_date": "1990-01-01",
                "identity_number": "11111111111",
                "phone_number": "+900000000000",
                "phone": {
                    "country_phone_code": "+90",
                    "national_phone_number": "0000000000"
                },
                "akinon_user_id": "BEF5606EC00040B09EAE5A31EE912C2D",
                "status": "ACTIVE",
                "verification_date": "2021-12-22T16:07:01.58+03:00",
                "email_verified": false
            },
            "agreements": true,
            "merchant_customer_id": "123",
            "merchant_customer_phone_number": null,
            "merchant_customer_email": null,
            "basket_id": "B-202111191524",
            "conversation_id": null
        }
    ]
}

Ödeme İptal

Ödeme İptal

Başarılı sonuçlanan ödemelerin iptal işlemleri yapılabilir.

Not

  • Bu endpoint kullanılarak yapılan iptal işleminden sonra Payment Integration servisine eklenen outbox_event tablosuna kayıt atılacaktır.

  • Bu kayıt daha sonra bir job ile okunarak Processor servisindeki Transaction tablosuna iptal edilen işlemin transaction kaydı atılacak ve Payment Session statüsü VOID olarak güncellenecektir.

Önemli

İptal edilecek tutarın belirtilmediği durumda tüm tutar iptal edilir, eğer tutar belirtilmişse belirtilen tutar db’de kayıtlı tutar ile karşılaştırılır ve tutar uyuşmazlığı durumda Karşılaşılabilecek Hatalar bölümünde belirtilen hata alınır.

İsteğin gönderileceği URL ve metodu

Metot

URL

Açıklama

POST

/processor/payment-sessions/voids

Üye iş yerine ait kullanıcı adı ve şifre bilgileriyle, Basic Authentication yöntemiyle istek atılmalıdır.

İstek Parametreleri ve Açıklamaları

Parametre

Tip

Zorunlu

Açıklama

amount

bigdecimal

opsiyonel (iptal edilecek tutar gönderilmediği durumda da tüm tutarın iptali yapılır.)

iptal edilecek tutar.

akipay_transaction_id

string

koşullu zorunlu (order_id yoksa)

iptal edilecek satış işleminin Akifast sistemindeki idsi.

order_id

string

koşullu zorunlu (akipay_transaction_id yoksa)

iptal edilecek satış işleminin sipariş numarası.

Dönüş Değerleri ve Açıklamaları

Dönüş Değeri

Tip

Açıklama

status

enum

oturumun durumu PaymentResponseStatus

pos_response

object

pos tarafından dönen cevap.

pos_response.pg_group_id

string

pos grup numarası.

pos_response.pg_auth_code

string

pos güvenlik kodu.

pos_response.pg_reference_id

string

pos referans numarası.

pos_response.pg_transaction_id

string

pos işlem numarası.

pos_response.pg_error_code

string

pos hata kodu.

pos_response.pg_error_message

string

pos hata mesajı.

pos_response.pg_settlement_number

string

pos anlaşma numarası.

pos_response.pg_order_id

string

pos sipariş numarası.

pos_response.pg_proc_return_code

string

pos işlem dönüş kodu.

pos_response.pg_merchant_id

string

pos üye iş yeri idsi.

pos_response.pg_terminal_id

string

pos terminal idsi.

pos_response.pg_transaction_date

string

pos işlem tarihi.

pos_response.pg_system_error_message

string

pos sistem hata mesajı.

pos_response.card_brand

enum

kart markası CardBrand

pos_response.card_issuer

string

kart sahibi banka.

pos_response.is_threed

boolean

3D ödeme aktifliği.

pos_response.installment_count

long

taksit sayısı.

pos_response.installment_amount

bigdecimal

taksit tutarı.

pos_response.total_paid_amount

bigdecimal

toplam ödenen tutar.

pos_response.interest_rate

bigdecimal

işlem vergi oranı.

pos_response.interest_amount

bigdecimal

işlem vergi tutarı.

pos_response.payment_system_name

string

ödeme sistemi.

pos_response.payment_system_type

string

ödeme sistemi tipi.

pos_response.payment_system_eft_code

string

ödeme sistemi eft kodu.

pos_response.payment_system_code

string

ödeme sistemi kodu.

transaction_type

enum

işlem tipi (VOID/REFUND).

akipay_transaction_id

string

iptal işleminin Akifast sistemindeki idsi.

Örnek İstek 1:

{
    "akipay_transaction_id": "b57ad4e9-55e6-49f3-91b5-47e251ce9459"
}

Örnek İstek 2:

{
    "order_id": "20220404114340"
}

Örnek Cevap:

{
    "trace_id": "9406a813-969f-41fc-bc3c-7393e7d6dc1d",
    "response": {
        "status": "SUCCESS",
        "pos_response": {
            "pg_group_id": "20220404114340",
            "pg_auth_code": "342754",
            "pg_reference_id": "209411635676",
            "pg_transaction_id": "22094Lr4C19696",
            "pg_error_code": "",
            "pg_error_message": "",
            "pg_settlement_number": "2009",
            "pg_order_id": "20220404114340",
            "pg_proc_return_code": 00,
            "pg_merchant_id": null,
            "pg_terminal_id": null,
            "pg_transaction_date": "20220602 15:10:14",
            "pg_system_error_message": null,
            "card_brand": "VISA",
            "card_issuer": "FINANSBANK A.S.",
            "is_threed": false,
            "installment_count": 1,
            "installment_amount": 109.9,
            "total_paid_amount": 0.0,
            "interest_rate": 0.0,
            "interest_amount": 0.0,
            "payment_system_name": "Finansbank Nestpay",
            "payment_system_type": "NESTPAY",
            "payment_system_eft_code": null,
            "payment_system_code": "FINANSBANK",
            "transaction_card": null
        },
        "transaction_type": "VOID",
        "akipay_transaction_id": "aa6ca43f-a877-4091-aa95-a1c3d57a2681"
    }
}

İptal Esnasında Karşılaşılabilecek Hatalar

Bu bölümde ödeme iptali esnasında karşılaşılabilecek belli başlı hatalara yer verilmiştir. Genel olarak tüm API hata kodlarına erişmek için tıklayınız.

Önemli

  • İptal edilmek istenen işlemin bulunmaması durumunda aşağıdaki hata cevabı dönmektedir. Gönderilen order_id veya akipay_transaction_id değerlerine ait bir işlem bulunamadığı durumda alınan hatadır.

{
    "trace_id": "58c4ea60-fc1b-410b-b5ff-d327902375de",
    "response": {
        "errors": [
            {
                "error_code": "TRANSACTION_NOT_FOUND",
                "message": "İşlem bulunamadı.",
                "argument": null
            }
        ]
    }
}

Önemli

  • İptal edilmek istenen işlemin daha önceden iptali yapılmış olması durumunda aşağıdaki hata cevabı dönmektedir. Teknik olarak bu işlemin daha önceden iptali yapıldıysa db’de kayıtlı total_paid_amount değeri 0 olacağı için aşağıdaki hata mesajı döner.

{
    "trace_id": "3d15ecdf-8811-4798-80d4-43a16c4e0ffc",
    "response": {
        "errors": [
            {
                "error_code": "TRANSACTION_ALREADY_REFUNDED",
                "message": "Ödeme iadesi zaten gerçekleşmiş.",
                "argument": null
            }
        ]
    }
}

Önemli

  • Gönderilen akipay_transaction_id veya order_id değerlerine ait birden fazla transaction kaydı bulunması durumunda aşağıdaki hata döner.

{
    "trace_id": "1c43af02-98d5-479a-9a74-389a6967ca7d",
    "response": {
        "errors": [
            {
                "error_code": "MULTIPLE_REFUNDABLE_TRANSACTIONS_FOUND",
                "message": "Birden fazla geri iade edilebilir işlem bulunamaz.",
                "argument": null
            }
        ]
    }
}

Önemli

  • Db’de kayıtlı olan total_paid_amount değeri db’de kayıtlı olan original_amount değerine eşit değilse aşağıdaki hata alınır. Çünkü void işlemi partial void işlemini desteklememektedir, sadece ödenen tutarın tamamının iptali yapılabilmektedir.

{
    "trace_id": "1c43af02-98d5-479a-9a74-389a6967ca7d",
    "response": {
        "errors": [
            {
                "error_code": "PARTIAL_VOID_NOT_SUPPORTED",
                "message": "Kısmi iptal işlemi desteklenmemektedir.",
                "argument": null
            }
        ]
    }
}

Önemli

  • Void isteğinde amount parametresi gönderildiyse ve gönderilen amount değeri db’de kayıtlı olan total_paid_amount değerine eşit değilse aşağıdaki hata alınır.

{
    "trace_id": "1c43af02-98d5-479a-9a74-389a6967ca7d",
    "response": {
        "errors": [
            {
                "error_code": "THE_AMOUNT_DOES_NOT_MATCH_TO_TOTAL_PAID_AMOUNT",
                "message": "İptal edilecek tutar toplam ödenen tutara eşit değil.",
                "argument": null
            }
        ]
    }
}

Ödeme İade

Ödeme İade

Başarılı sonuçlanan ödemelerin iade işlemleri yapılabilir.

Not

  • Bu endpoint kullanılarak yapılan iade işleminden sonra Payment Integration servisine eklenen outbox_event tablosuna kayıt atılacaktır.

  • Bu kayıt daha sonra bir job ile okunarak, Processor servisindeki Transaction tablosuna iade edilen işlemin transaction kaydı atılacak ve Payment Session statüsü REFUND olarak güncellenecektir.

  • İade işleminin tipine bağlı olarak da payment_session tablosuna eklenen yeni alan (refund_type) PARTIAL ya da FULL olarak güncellenecektir.

İsteğin gönderileceği URL ve metodu

Metot

URL

Açıklama

POST

/processor/payment-sessions/refunds

Üye iş yerine ait kullanıcı adı ve şifre bilgileriyle, Basic Authentication yöntemiyle istek atılmalıdır.

İstek Parametreleri ve Açıklamaları

Parametre

Tip

Zorunlu

Açıklama

amount

bigdecimal

zorunlu

iade edilecek tutar.

akipay_transaction_id

string

koşullu zorunlu (order_id yoksa)

iade edilecek satış işleminin Akifast sistemindeki idsi.

order_id

string

koşullu zorunlu (akipay_transaction_id yoksa)

iade edilecek satış işleminin sipariş numarası.

Dönüş Değerleri ve Açıklamaları

Dönüş Değeri

Tip

Açıklama

status

enum

oturumun durumu PaymentResponseStatus

pos_response

object

pos tarafından dönen cevap.

pos_response.pg_group_id

string

pos grup numarası.

pos_response.pg_auth_code

string

pos güvenlik kodu.

pos_response.pg_reference_id

string

pos referans numarası.

pos_response.pg_transaction_id

string

pos işlem numarası.

pos_response.pg_error_code

string

pos hata kodu.

pos_response.pg_error_message

string

pos hata mesajı.

pos_response.pg_settlement_number

string

pos anlaşma numarası.

pos_response.pg_order_id

string

pos sipariş numarası.

pos_response.pg_proc_return_code

string

pos işlem dönüş kodu.

pos_response.pg_merchant_id

string

pos üye iş yeri idsi.

pos_response.pg_terminal_id

string

pos terminal idsi.

pos_response.pg_transaction_date

string

pos işlem tarihi.

pos_response.pg_system_error_message

string

pos sistem hata mesajı.

pos_response.card_brand

enum

kart markası CardBrand

pos_response.card_issuer

string

kart sahibi banka.

pos_response.is_threed

boolean

3D ödeme aktifliği.

pos_response.installment_count

long

taksit sayısı.

pos_response.installment_amount

bigdecimal

taksit tutarı.

pos_response.total_paid_amount

bigdecimal

toplam ödenen tutar.

pos_response.interest_rate

bigdecimal

işlem vergi oranı.

pos_response.interest_amount

bigdecimal

işlem vergi tutarı.

pos_response.payment_system_name

string

ödeme sistemi.

pos_response.payment_system_type

string

ödeme sistemi tipi.

pos_response.payment_system_eft_code

string

ödeme sistemi eft kodu.

pos_response.payment_system_code

string

ödeme sistemi kodu.

transaction_type

enum

işlem tipi (VOID/REFUND).

akipay_transaction_id

string

iade işleminin Akifast sistemindeki idsi.

Örnek İstek 1:

{
    "akipay_transaction_id": "b57ad4e9-55e6-49f3-91b5-47e251ce9459",
    "amount": "109.9"
}

Örnek İstek 2:

{
    "order_id": "20220404114340",
    "amount": "109.9"
}

Örnek Cevap:

{
    "trace_id": "9406a813-969f-41fc-bc3c-7393e7d6dc1d",
    "response": {
        "status": "SUCCESS",
        "pos_response": {
            "pg_group_id": "20220404114340",
            "pg_auth_code": "342754",
            "pg_reference_id": "209411635676",
            "pg_transaction_id": "22094Lr4C19696",
            "pg_error_code": "",
            "pg_error_message": "",
            "pg_settlement_number": "2009",
            "pg_order_id": "20220404114340",
            "pg_proc_return_code": 00,
            "pg_merchant_id": null,
            "pg_terminal_id": null,
            "pg_transaction_date": "20220602 15:10:14",
            "pg_system_error_message": null,
            "card_brand": "VISA",
            "card_issuer": "FINANSBANK A.S.",
            "is_threed": false,
            "installment_count": 1,
            "installment_amount": 109.9,
            "total_paid_amount": 0.0,
            "interest_rate": 0.0,
            "interest_amount": 0.0,
            "payment_system_name": "Finansbank Nestpay",
            "payment_system_type": "NESTPAY",
            "payment_system_eft_code": null,
            "payment_system_code": "FINANSBANK",
            "transaction_card": null
        },
        "transaction_type": "REFUND",
        "akipay_transaction_id": "aa6ca43f-a877-4091-aa95-a1c3d57a2681"
    }
}

İade Esnasında Karşılaşılabilecek Hatalar

Bu bölümde ödeme iadesi esnasında karşılaşılabilecek belli başlı hatalara yer verilmiştir. Genel olarak tüm API hata kodlarına erişmek için tıklayınız.

Önemli

  • İade edilmek istenen işlemin bulunmaması durumunda aşağıdaki hata cevabı dönmektedir. Gönderilen order_id veya akipay_transaction_id değerlerine ait bir işlem bulunamadığı durumda alınan hatadır.

{
    "trace_id": "58c4ea60-fc1b-410b-b5ff-d327902375de",
    "response": {
        "errors": [
            {
                "error_code": "TRANSACTION_NOT_FOUND",
                "message": "İşlem bulunamadı.",
                "argument": null
            }
        ]
    }
}

Önemli

  • İade edilmek istenen işlemin daha önceden iadesi yapılmış olması durumunda aşağıdaki hata cevabı dönmektedir. Teknik olarak bu işlemin daha önceden iadesi yapıldıysa db’de kayıtlı total_paid_amount değeri 0 olacağı için aşağıdaki hata mesajı döner.

{
    "trace_id": "3d15ecdf-8811-4798-80d4-43a16c4e0ffc",
    "response": {
        "errors": [
            {
                "error_code": "TRANSACTION_ALREADY_REFUNDED",
                "message": "Ödeme iadesi zaten gerçekleşmiş.",
                "argument": null
            }
        ]
    }
}

Önemli

  • Gönderilen akipay_transaction_id veya order_id değerlerine ait birden fazla transaction kaydı bulunması durumunda aşağıdaki hata döner.

{
    "trace_id": "1c43af02-98d5-479a-9a74-389a6967ca7d",
    "response": {
        "errors": [
            {
                "error_code": "MULTIPLE_REFUNDABLE_TRANSACTIONS_FOUND",
                "message": "Birden fazla geri iade edilebilir işlem bulunamaz.",
                "argument": null
            }
        ]
    }
}

Önemli

  • Gönderilen amount değeri 0 ise aşağıdaki hata alınır.

{
    "trace_id": "1c43af02-98d5-479a-9a74-389a6967ca7d",
    "response": {
        "errors": [
            {
                "error_code": "TRANSACTION_CAN_NOT_BE_REFUNDED",
                "message": "Ödeme iadesi gerçekleştirilemiyor.",
                "argument": null
            }
        ]
    }
}

Önemli

  • Gönderilen amount değeri db’de kayıtlı olan total_paid_amount değerinden büyükse aşağıdaki hata alınır.

{
    "trace_id": "1c43af02-98d5-479a-9a74-389a6967ca7d",
    "response": {
        "errors": [
            {
                "error_code": "REFUND_AMOUNT_CANNOT_EXCEED_TRANSACTION_AMOUNT",
                "message": "İade tutarı, işlem tutarını aşamaz.",
                "argument": null
            }
        ]
    }
}

Önemli

  • Atılan istekte``amount`` değeri yoksa aşağıdaki hata alınır.

{
    "trace_id": "b081670e-bab4-40b3-beb9-96603bf38325",
    "response": {
        "errors": [
            {
                "error_code": "INVALID_REFUND_AMOUNT",
                "message": "Geçersiz iade tutarı.",
                "argument": null
            }
        ]
    }
}

Mobil Uyumluluk İçin Müşteriye Çoklu Yönlendirme Url’i Eklenebilmesi

Mobil Uyumluluk İçin Müşteriye Çoklu Yönlendirme Url’i Eklenebilmesi

Mobil uyumluluk kapsamında, client’a yönlendirilebilecekleri url’in çoklu olarak eklenebilmesi için aşağıdaki endpointler kullanılabilir.

Önemli

Tüm isteklerde header’da Client-Id’nin gönderilmesi gerekmektedir.

Client Redirect Uri Oluşturma

Verilen client’a yönlendirilebilecekleri url’in eklenmesi için kullanılır.

İsteğin gönderileceği URL ve metodu

Metot

URL

Açıklama

POST

/client-redirect-uris

Oauth-server’a redirect_uri ve Header’a eklenen Client-Id ile birlikte, Basic Authentication yöntemiyle istek atılmalıdır.

İstek Parametreleri ve Açıklamaları

Parametre

Tip

Zorunlu

Açıklama

redirect_uri

String

Zorunlu

Yönlendirilecek url.

Dönüş Değerleri ve Açıklamaları

Dönüş Değeri

Tip

Açıklama

client_id

String

Müşteri id’si

redirect_uri_token

String

Eklenen yönlendirme url’i için oluşturulmuş token.

redirect_uri

String

Eklenen yönlendirme url’i.

Örnek İstek:

{
    "redirect_uri": "http://localhost1"
}

Örnek Cevap:

{
    "client_id": "qib4lK31Z1XkAGNEt6pd",
    "redirect_uri_token": "41S9X1GLGK1Q03NWQZFQUC4MEM01KALL",
    "redirect_uri": "http://localhost5"
}

Client Redirect Uri Sorgulama

Verilen redirect_token ile yönlendirilecek url sorgulaması yapmak için kullanılır.

İsteğin gönderileceği URL ve metodu

Metot

URL

Açıklama

GET

/client-redirect-uris/{{redirect_uri_token}}

Oauth-server’a header’a eklenen Client-Id ile birlikte, Basic Authentication yöntemiyle istek atılmalıdır.

Dönüş Değerleri ve Açıklamaları

Dönüş Değeri

Tip

Açıklama

client_id

String

Müşteri id’si

redirect_uri_token

String

Eklenen yönlendirme url’i için oluşturulmuş token.

redirect_uri

String

Eklenen yönlendirme url’i.

Örnek İstek:

GET /client-redirect-uris/EOO4GFGPX9AKFBTSEOTZ4QUHFF346K69

curl --location 'http://localhost:9090/client-redirect-uris/EOO4GFGPX9AKFBTSEOTZ4QUHFF346K69' \
--header 'Client-Id: qib4lK31Z1XkAGNEt6pd' \
--header 'Authorization: Basic cWliNGxLMzFaMVhrQUdORXQ2cGQ6bUR5b0Vlenkyd0N4VG1HbkNFRDB2Ym1hZHZ0bVQzdXJFSWFu' \
--header 'Cookie: SESSION=ZTBkMjNiNjEtM2Y4Yi00OTQyLWJjYmUtOTY1NWNkYTNlOWFh'

Örnek Cevap:

{
    "client_id": "qib4lK31Z1XkAGNEt6pd",
    "redirect_uri_token": "41S9X1GLGK1Q03NWQZFQUC4MEM01KALL",
    "redirect_uri": "http://localhost5"
}

Client Redirect Uri Listeleme

Yönlendirilecek tüm url’lerin listelenmesi için kullanılır.

İsteğin gönderileceği URL ve metodu

Metot

URL

Açıklama

GET

/client-redirect-uris

Oauth-server’a header’a eklenen Client-Id ile birlikte, Basic Authentication yöntemiyle istek atılmalıdır.

Dönüş Değerleri ve Açıklamaları

Dönüş Değeri

Tip

Açıklama

client_id

String

Müşteri id’si

redirect_uri_token

String

Eklenen yönlendirme url’i için oluşturulmuş token.

redirect_uri

String

Eklenen yönlendirme url’i.

Örnek İstek:

GET /client-redirect-uris

curl --location 'http://localhost:9090/client-redirect-uris' \
--header 'Client-Id: qib4lK31Z1XkAGNEt6pd' \
--header 'Authorization: Basic cWliNGxLMzFaMVhrQUdORXQ2cGQ6bUR5b0Vlenkyd0N4VG1HbkNFRDB2Ym1hZHZ0bVQzdXJFSWFu' \
--header 'Cookie: SESSION=ZTBkMjNiNjEtM2Y4Yi00OTQyLWJjYmUtOTY1NWNkYTNlOWFh'

Örnek Cevap:

{
    "count": 7,
    "redirect_uris": [
        {
            "client_id": "qib4lK31Z1XkAGNEt6pd",
            "redirect_uri_token": "33D154C43843B0781E827F51CF8C50F4",
            "redirect_uri": null
        },
        {
            "client_id": "qib4lK31Z1XkAGNEt6pd",
            "redirect_uri_token": "6OVCE5RX50PXIP0UCVHBI8NYLG7ESDLK",
            "redirect_uri": "http://localhost"
        },
        {
            "client_id": "qib4lK31Z1XkAGNEt6pd",
            "redirect_uri_token": "OR5FIP5NHY868XMFWD5UKJB3FNBFTHBM",
            "redirect_uri": "http://localhost2"
        },
        {
            "client_id": "qib4lK31Z1XkAGNEt6pd",
            "redirect_uri_token": "1RBSAJEXPLCZEAXUNTCJSXGIDOVVR9IG",
            "redirect_uri": "http://localhost3"
        },
        {
            "client_id": "qib4lK31Z1XkAGNEt6pd",
            "redirect_uri_token": "AGMZO3ZBXGOOKTQGQGY1C7D5YLPCAMUW",
            "redirect_uri": "http://localhost4"
        },
        {
            "client_id": "qib4lK31Z1XkAGNEt6pd",
            "redirect_uri_token": "41S9X1GLGK1Q03NWQZFQUC4MEM01KALL",
            "redirect_uri": "http://localhost5"
        },
        {
            "client_id": "qib4lK31Z1XkAGNEt6pd",
            "redirect_uri_token": "AFGTGU1KXNWDZGLTP6OJ9CGBDN55X9NY",
            "redirect_uri": "http://localhost6"
        }
    ]
}

Client Redirect Uri Silme

Verilen redirect_token ile silme işleminin yapılması için kullanılır.

İsteğin gönderileceği URL ve metodu

Metot

URL

Açıklama

DELETE

/client-redirect-uris/{{redirect_uri_token}}

Oauth-server’a header’a eklenen Client-Id ile birlikte verilen redirect_uri_token ve Basic Authentication yöntemiyle istek atılmalıdır.

Örnek İstek:

DELETE /client-redirect-uris/EOO4GFGPX9AKFBTSEOTZ4QUHFF346K69

curl --location --request DELETE 'http://localhost:9090/client-redirect-uris/AFGTGU1KXNWDZGLTP6OJ9CGBDN55X9NY' \
--header 'Client-Id: qib4lK31Z1XkAGNEt6pd' \
--header 'Authorization: Basic cWliNGxLMzFaMVhrQUdORXQ2cGQ6bUR5b0Vlenkyd0N4VG1HbkNFRDB2Ym1hZHZ0bVQzdXJFSWFu' \
--header 'Cookie: SESSION=ZTBkMjNiNjEtM2Y4Yi00OTQyLWJjYmUtOTY1NWNkYTNlOWFh'

Örnek Cevap:

HTTP 204 No Content

Önemli

  • redirect_uri verilen Client-Id için zaten mevcutsa durumunda aşağıdaki hata cevabı dönmektedir.

{
    "errors": [
        {
            "error_code": "CLIENT_REDIRECT_URI_ALREADY_EXISTS_WITH_CLIENT",
            "message": "Müşteri yönlendirme url'i verilen client için zaten mevcut.",
            "argument": null
        }
    ]
}

Önemli

  • Client-Id parametresinin yanlış gönderilmesi durumunda aşağıdaki hata cevabı dönmektedir.

{
    "errors": [
        {
            "error_code": "CLIENT_NOT_FOUND",
            "message": "Müşteri bulunamadı.",
            "argument": null
        }
    ]
}