Ana içeriğe geç

HPM Ödeme Linki Oluşturma

Açıklama

Bu servis, site sahibinin sisteminden gelen sipariş / işlem bilgileri ile ödeme isteği bazlı tek bir link üretir.

Üretilen link, kullanıcı tarafından tıklandığında Finrota ödeme ekranına yönlendirir ve ödeme orada tamamlanır.

  • Endpoint (Demo): https://pgw.netahsilatdemo.com/hpm

  • Metot: POST

  • Content-Type: application/json

  • Kimlik Doğrulama: Authorization: Bearer {token}

Request Body Yapısı

Alanlar ve Zorunluluk Durumu

Genel Alanlar

AlanTipZorunluAçıklama
currencyCodeStringEvetÖdeme para birimi (örn: TRY, USD).
clientOrderReferenceStringEvetSite sahibinin kendi sipariş referansı. Sisteminizde benzersiz olmanız önerilir.
amountDecimalEvetÖdeme tutarı. Pozitif olmalıdır.
paymentSetIdStringEvetFinrota tarafında tanımlı ödeme seti / senaryosunun benzersiz kimliği (GUID).
descriptionStringHayırÖdeme açıklaması. Portal ve raporlarda görünebilir.

Müşteri Bilgileri (customer)

AlanTipZorunluAçıklama
customer.emailStringEvetMüşterinin e-posta adresi. Bildirimler ve iletişim için kullanılır.
customer.gsmStringHayırMüşterinin GSM numarası. SMS bildirimleri için kullanılabilir.
customer.tcknStringHayırMüşterinin TCKN bilgisi. Kimlik doğrulama / raporlama için.
customer.codeStringHayırSite sahibinin sisteminde müşteriyi temsil eden kod.
customer.nameStringHayırMüşterinin adı.
customer.surnameStringHayırMüşterinin soyadı.
customer.erpCodeStringHayırEntegrasyon tarafında kullanılan ERP kodu.

Yönlendirme & Bildirim URL’leri

AlanTipZorunluAçıklama
successURLStringHayırÖdeme başarılı olduktan sonra müşterinin tarayıcısının yönlendirileceği URL.
failURLStringHayırÖdeme başarısız / iptal olduğunda müşterinin tarayıcısının yönlendirileceği URL.
webhookURLStringHayırÖdeme sonuçlandığında, Finrota tarafından sunucu tarafına yapılacak HTTP POST çağrısı için kullanılacak webhook adresi.

Önemli – webhookURL Alanı

  • HPM isteğinde gönderdiğiniz webhookURL, ödeme tamamlandıktan sonra Finrota’nın sunucu tarafından çağıracağı (callback) URL’dir.

  • Finrota, ödeme işlemi sonuçlandığında bu adrese HTTP POST isteği gönderir.

  • webhookURL adresinizin, bu isteğe 200 OK yanıtı vermesi beklenir. 200 dışında cevaplar hata olarak değerlendirilebilir.

  • Gönderilen gövdede (body) ödeme işlemine ait özet bilgiler yer alır:

AlanAçıklama
Idİşlem ID’si (TransactionId).
TransactionStatusIdİşlem durumu (başarılı, başarısız vb. durum kodu).
OrderReferenceFinrota tarafından üretilen sipariş referansı.
ClientOrderReferenceSizin gönderdiğiniz clientOrderReference değeri.
PureAmountNet tahsilat tutarı.
CurrencyIdİşlem para birimi.
VPosErrorCodeSanal pos hata kodu (varsa).
VPosErrorMessageSanal pos hata mesajı (varsa).

Örnek Webhook Gövdesi

{

"Id": "d6a1f4b2-1c3e-4a21-9b1e-11aa22bb33cc",

"TransactionStatusId": 1,

"OrderReference": "HPM-20251201-00001",

"ClientOrderReference": "0005",

"PureAmount": 150.00,

"CurrencyId": "TRY",

"VPosErrorCode": null,

"VPosErrorMessage": null

}

Back-end tarafınızda bu POST çağrısını karşılayıp, body’i okuyarak kendi sipariş kayıtlarınızı “ödendi / başarısız” olarak güncellemeniz gerekir.

Kullanıcı Doğrulama Alanları

AlanTipZorunluAçıklama
userVerificationByStringEvetMüşteriyi doğrularken kullanılacak alan türü. Geçerli değerler: Id, Email, Tckn, Gsm.
userVerificationFailBehaviorStringEvetDoğrulama başarısız olduğunda izlenecek davranış. Örn. "Create": Kullanıcı bulunamazsa yeni müşteri oluşturma senaryosu. Diğer opsiyonlar portal konfigürasyonuna göre değişebilir (hata verme, varsayılan kullanıcı ile devam etme gibi).

Dinamik Alanlar (additionalData)

AlanTipZorunluAçıklama
additionalDataObjectHayırDinamik alanların gönderileceği sözlük yapısı. Anahtarlar, Finrota’da tanımlı dinamik alan kodlarıdır. Örn: "1606_Dinamik_Alan_tr": "4"

userVerificationBy

Kullanıcının Finrota tarafında hangi alan üzerinden doğrulanacağını belirtir.

Olası değerler

  • "Id" – Müşterinin sistem ID’si ile doğrulama

  • "Email" – E-posta adresi ile doğrulama

  • "Tckn" – TCKN ile doğrulama

  • "Gsm" – GSM numarası ile doğrulama

userVerificationFailBehavior

Belirtilen userVerificationBy alanına göre kullanıcı bulunamazsa sistemin davranışını belirler.

  • Hata ver → Örneğin: "Error"

    • Kullanıcı bulunamazsa istek hata ile sonuçlanır.
  • Yeni müşteri oluştur"Create"

    • Kullanıcı bulunamazsa Finrota tarafında yeni müşteri kaydı oluşturulur.
  • Varsayılan kullanıcı ile devam et → (örn. "Default" / "DefaultUser" vb.)

    • Kullanıcı bulunamazsa sistem varsayılan tanımlı kullanıcı ile devam eder.

Not: Enum değerlerinin tam string karşılıkları (Error, DefaultUser vb.) entegrasyon sırasında tarafınıza net olarak iletilmelidir. Örnekte yalnızca "Create" değeri garanti edilmiştir.

additionalData

  • additionalData alanı, Finrota portalında tanımlı dinamik alanları beslemek için kullanılır.

Key’ler genellikle ilgili dinamik alan kodu/adı ile eşleşmelidir.

Örneğin

"additionalData": {   
"1606_Dinamik_Alan_tr": "4",
"1606_dinamik_Alan_tr": "55"
}

Örnek İstek (Request)

Authorization: Bearer {token}  
Content-Type: application/json

Yanıt (Response) Modeli

Başarılı bir istekte HPM, aşağıdaki yapıda bir cevap döner

{  
"message": null,
"statusCode": 200,
"exceptions": null,
"data": {
"link": "https://testportal.netfinans.com/netahsilat/hpm?id=3e1c720e-baa1-4672-955f-07bad7a23133&timestamp=1764601213815&sign=b5c709a40eeeee308cf2f32a40457a2b8a8e88711352c93a4f91d109d7d23fd3",
"expiryUtc": "2025-12-01T15:15:13.8152725"
},
"oldData": null,
"errors": null
}

Alan Açıklamaları

  • statusCode

    • HTTP seviyesinden bağımsız olarak, uygulama içi durum kodunu da yansıtabilir. 200 → başarı.
  • data.link

    • Kullanıcının yönlendirileceği tekil ödeme linki.

    • Not: Her ödeme isteği için tek bir link döner.

    • Bu link tarafında ödeme ekranına yönlenerek, istek aşamasında girilen bilgiler ile birlikte ödeme ekranında görüntülenecektir.

    • Ödeme ekranına yönlendirdikten sonra, ödeme işlemini mevcut yapıda olduğu şekilde gerçekleştirilir.

  • data.expiryUtc

    • Linkin geçerlilik bitiş tarihini/ saatini UTC formatında içerir.

    • Format her zaman ISO-8601’dir (örn. "2025-12-01T15:15:13").

  • sign

    • Güvenlik imzası linkin query string’i içinde yer alır (sign=...).

    • Ayrı bir alan olarak JSON içinde dönmez.