Entegrasyon
Backend Entegrasyonu
Ek Servisler

Ek Servisler

Taksit Yönetimi (Installment)

İş yeri taksit yönetimini kendi sistemleri üzerinden yapıyor ve bu yöntem ile devam etmek istiyorsa; Hepsipay’in backend’i üzerinden bağlanacağı servisi aşağıdaki standartları koruyarak sunması gerekmektedir.

Not: Taksit süreçlerini Craft gate üzerinden yürüten merchantlar, taksit ile ilgili herhangi bir geliştirme yapmak durumunda değiller. Eğer taksit yönetimini Merchant kendi sistemleri üzerinden yapacak ise merchant tarafından aşağıdaki şekilde bir servis sunulması gerekmektedir

curl --location 'http://demo2356202.mockable.io/Installement1-2-5OptionsExample' \
--header 'Content-Type: application/json' \
--data-raw '{
"binNumber" : "123456",
"orderNumber" : "123456-45698",
"customerEmail" : "test@hepsipay.com",
"customerGsm" : "05000000000"
}'

InputNameTypeRequiredDescription
binNumberstringMKullanıcının seçtiği kartın bin numarasıdır.
orderNumberstringMHepsipayFrameInit servisinde merchantın geçtiği MerchantOrderNumber bilgisidir.
customerEmailstringMMüşterinin Hepsipay’da tanımlı eposta adresidir.
customerGsmstringMMüşterinin Hepsipay’da tanımlı GSM numarasıdır.
RewardAmountintOMüşteriye verilecek ödül tutarıdır.

3 Adet taksit opsiyonlu 1-2-3 taksitli örnek response:
{
"Installments": [
    {
        "Price": 1200,
        "Force3ds": false,
        "InstallmentsPriceDetails": [
            {
                "ActualInstallmentNumber": 1,
                "DisplayInstallmentNumber": 1,
                "InstallmentPrice": 1200,
                "TotalPrice": 1200,
                "PosAlias": "67-ykb-4676"
            },
            {
                "ActualInstallmentNumber": 2,
                "DisplayInstallmentNumber": 2,
                "InstallmentPrice": 612,
                "TotalPrice": 1224,
                "PosAlias": "67-ykb-4676",
                "InterestAmount": 24
            },
            {
                "ActualInstallmentNumber": 3,
                "DisplayInstallmentNumber": 4,
                "InstallmentPrice": 312,
                "TotalPrice": 1248,
                "PosAlias": "67-ykb-4676",
                "InterestAmount": 48
            }
        ]
    }
]
}

OutputName

Type

Required

Description

Price

int

M

Tutar bilgisidir. Örnek değer “1000”. (yani 10 TL)

force3d

boolean

M

İşlemin 3Ds ya da non-3Ds ile mi gerçekleşmesinin beklendiği bilgisini içerir. Örnek değer “true”

InstallmentPriceDetails

List

M

Taksit Listesi içerisindeki detay bilgileri içerir.

OutputName

Type

Required

Description

ActualInstallmentNumber

int

M

İşyerinin belirlediği taksit sayısıdır.

DisplayInstallmentNumber

int

M

İşyerinin belirlediği taksit sayısına ek olarak örneğin bankanın yaptığı/y apacağı ek taksit sayısı bilgisiyle birlikte total olarak müşterini n görmesin in beklendiğ i taksit sayısıdır.

InstallmentPrice

int

M

İlgili taksit sayısına göre taksit tutarıdır.

TotalPrice

int

M

İlgili taksit sayısına göre tüm taksitlerin toplam tutarıdır.

InterestAmount

decimal

M

Uygulanması beklenen vade farkı oranıdır. Örnek: "10.00"

PosAlias

string

O

İşlemin geçmesi istenen POS bilgisidir. (Bu bilginin Provider üzerinde tanımlı olan bilgi ile aynı olacak şekilde iletilmesi gerekmekt edir.)


Webhook url (Push Notification)

Webhook Url bilgisi backend-to-backend işlem sonucunu üye işyerine bildirilmesi için kullanılan bir yöntemdir. Üye işyerine ait webhook url tanımı var ise üye işyerinin servisi çağırılır. Üye işyeri onboard edilirken bu bilgi üye işyerinden iletilmelidir. Non3d ya da 3d başarılı olduğunda webhook url bilgisi call edilir. Sizden istenen contract aşağıdaki gibidir.

Endpoint

{{endpoint bilgisi üye işyerinin tercihidir.}}

Method Type

POST

Request Example and Description

Example Request:

Non3d örnek request example;

{
    "Status": "",
    "CompleteStatus": "",
    "PaymentId": 24112596,
    "ConversationData": null,
    "ConversationId": "a54cb527-718b-4431-8c39-546d38e340c5",
    "CallbackStatus": null,
    "MdStatus": 0,
    "Hash": "",
    "MerchantOrderNumber": "1234-5679",
    "IsPaymentSuccessful": true,
    "PaymentType": "1",
    "PaymentTypeDescription": "Cüzdan"
}

3d örnek request example;

{
    "Status": "SUCCESS",
    "CompleteStatus": "WAITING",
    "PaymentId": 24112596,
    "ConversationData": null,
    "ConversationId": "a54cb527-718b-4431-8c39-546d38e340c5",
    "CallbackStatus": null,
    "MdStatus": 1,
    "Hash":"8fad8547fcf9d5ad0b426eead9f0e94afaa2f08f925d777047e2f9f70eab0117",
    "MerchantOrderNumber": "1234-5678",
    "IsPaymentSuccessful": true,
    "PaymentType": "1",
    "PaymentTypeDescription": "Cüzdan"
}

Description:

InputName

Type

Always Full

Description

Status

string

3d

https://developer.craftgate.io/api/payment/create-3d-secure-payment/#callback-urle-i%CC%87letilen-parametreler (opens in a new tab)

CompleteStatus

string

3d

https://developer.craftgate.io/api/payment/create-3d-secure-payment/#callback-urle-i%CC%87letilen-parametreler (opens in a new tab)

PaymentId

int

3d ve Non3d

https://developer.craftgate.io/api/payment/create-3d-secure-payment/#callback-urle-i%CC%87letilen-parametreler (opens in a new tab)

ConversationData

string

3d

https://developer.craftgate.io/api/payment/create-3d-secure-payment/#callback-urle-i%CC%87letilen-parametreler (opens in a new tab)

ConversationId

string

3d ve Non3d

https://developer.craftgate.io/api/payment/create-3d-secure-payment/#callback-urle-i%CC%87letilen-parametreler (opens in a new tab)

CallbackStatus

string

3d

https://developer.craftgate.io/api/payment/create-3d-secure-payment/#callback-urle-i%CC%87letilen-parametreler (opens in a new tab)

MdStatus

int

3d

https://developer.craftgate.io/api/payment/create-3d-secure-payment/#callback-urle-i%CC%87letilen-parametreler (opens in a new tab)

Hash

string

3d

https://developer.craftgate.io/api/payment/create-3d-secure-payment/#callback-urle-i%CC%87letilen-parametreler (opens in a new tab)

MerchantOrderNumber

string

3d ve Non3d

Üye işyerinin frame init adımında gönderdiği sipariş bilgisidir

IsPaymentSuccessful

boolean

3d ve Non3d

Ödemenin başarılı bir şekilde tamamlanıp tamamlanmadığını belirtir.

PaymentType

int

3d ve Non3d

Ödemenin yapıldığı Hepsipay ödeme yöntemini belirtir

Ödeme Tipleri:

Ödeme TipiÖdeme Tipi Açıklaması
1Cüzdan
2Saklı kart
3Alışveriş kredisi

PaymentTypeDescription

string

3d ve Non3d

Ödeme tipinin açıklamasıdır. PaymentType = 1 için "Cüzdan" değerini içerir.


Ödeme Durumu (Payment Status)

Üye işyerinin HepsipayFrameInit aşamasında response bulunan token bilgisi, bir başka deyimle merchantcallbackurl adresine yapılan post çağrısında ki token değeri ile işlem sonucu sorgulanabilir.

Endpoint

/payment/{token}/status

Method Type

GET

Request Example and Description

Example Request:

/payment/2A51693AAD7847AFA0E91E0A0D1AB94F884FB78C5837FBF525AE0F1021F13C 799778BE79555931057F74352E5A1E4613/status

Description:

InputNameTypeRequiredDescription
TokenstringMHepsipayFrameInit isteğinin response bulunan token bilgisidir.
MerchantCallBackUrl'de gönderilen token bilgisidir.

Response Example and Description

Example Response:

{
    "StatusDescription": "Non3d ödeme başarıyla tamamlandı.",
    "Status": 5,
    "Amount": 1236,
    "InstallmentCount": 3,
    "CreateDate": "2024-05-22T10:10:26.829888",
    "ReferenceNo": "2c3e3fa7-d8af-4a6f-a8ed-f49d45a935c0",
    "CraftgatePaymentId": 632146,
    "PaymentId": "632146",
    "MerchantOrderNumber": "1234",
    "PaymentType": 2,
    "PaymentTypeDescription": "Saklı Kart",
    "PosAlias": null,
    "BinNumber": "37442500",
    "Success": true,
    "MessageCode": "0000",
    "Message": "İşlem Başarıyla Gerçekleştirildi.",
    "UserMessageTitle": null,
    "UserMessage": "İşlem Başarıyla Gerçekleştirildi."
}

Description:

OutputNameTypeDescription
StatusDescriptionstringDurum açıklaması.
StatusintDurum bilgisi. (alabileceği değerler aşağıdaki tabloda paylaşılmıştır.).
AmountintTutar bilgisi.
InstallmentCountintÖdemede seçilen taksit bilgisi.
CreateDatedatetimeİşlem tarih saat bilgisi.
ReferenceNostring(guid)İşlem referans bilgisi.
CraftgatePaymentIdintCraftgate paymentId bilgisidir. Ödeme tamamlanmış ise bu bilgi döner.
MerchantOrderNumberstringÜye iş yerinin sipariş numarasıdır. initte gönderilen
MerchantOrderNumber bilgisidir.
PaymentTypestringÖdemenin yapıldığı Hepsipay ödeme yöntemini belirtir.

Endpoint

/payment/{token}/status

Ödeme Tipleri:

1Cüzdan
2Saklı kart
3Alışveriş kredisi

PaymentTypeDescription

string

Ödeme tipinin açıklamasıdır. PaymentType = 1 için "Cüzdan" değerini içerir.

PosAlias

string

Ödemenin geçtiği PosAlias bilgisidir

BinNumber

int

Ödeme saklı kart yöntemi ile yapılmışsa kartın bin numarasıdır.

PaymentId

string

CraftgatePaymentId yerine kullanılacak yeni property'dir. CraftgatePaymentId bilgisi kaldırıldığında sadece bu property'den okuma yapılacaktır. Ödeme tamamlanmış ise bu bilgi döner.


Olası “Status” değerleri :

StatusNameDescription
1Initializedİşlem başlatıldı.
2ThreeDInitialized3d akış başlatıldı.
3ThreeDInitializeFailed3d akış başlatılamadı!
4ThreeDSuccessfullyCompleted3d ödeme başarıyla tamamlandı.
5NonThreeDSuccessfullyCompletedNon3d ödeme başarıyla tamamlandı.
6NonThreeDFailedNon3d ödeme hata alındı.
7ThreeDFailed3d ödeme hata alındı.
8PartialRefundCompletedParçalı iade tamamlandı.
9PartialRefundFailedParçalı iade hatası.
10RefundCompletedİade tamamlandı.
11RefundFailedİade hatası.
12WalletPaymentCompletedCüzdan ile ödeme başarıyla tamamlandı.
13WalletPaymentFailedCüzdan ile ödeme yapılamadı.
14ShoppingLoanPaymentCompletedAlışveriş kredisi ile ödeme başarıyla tamamlandı.
15ShoppingLoanPaymentFailedAlışveriş kredisi ile ödeme yapılamadı.

Örnek Kodlar

try {
 
    $header = ["Content-Type: application/json"];
    $header = ["merchant-no: XXXXX"]; // Hepsipay tarafından iletilir.
    $header = ["terminal-no: YYYYY"]; // Hepsipay tarafından iletilir.
    $header = ["signature-no: e74ef7c4994cd3f5ff03f89a310cda8bcf29af12a39ebf1e7dbf27c99efe3784eb5eaaf4f535d666eb513620c8b66ec483a2dfa281c85bc2bb8ff18518f5cdf2"];
 
 
    $ch = @curl_init("https://merchantpfpayment-gateway-qa.hepsipay.com/payment/61C820BA10FA367AE37052A13C180B5C328FEB0ED5CE30A6D0FBC45903222230B9888A3E2AD6C16B587675D68F9A28F5/status");
 
    @curl_setopt($ch, CURLOPT_POST, false);
    @curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
    @curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    @curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
    @curl_setopt($ch, CURLOPT_TIMEOUT, 10); //timeout in seconds
 
    $result = curl_exec($ch);
 
    if (@curl_errno($ch)) {
        $error_msg = curl_error($ch);
        @curl_close($ch);
        throw new Exception($error_msg);
    } else {
 
        $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
        $header_size = curl_getinfo($ch, CURLINFO_HEADER_SIZE);
        $header = substr($result, 0, $header_size);
        $body = substr($result, $header_size);
 
        if ($http_code === 401) {
        throw new HepsiPaySDKException("Yetkisiz Erişim. " . $http_code);
        }
 
        $data = json_decode($result);
        @curl_close($ch);
 
        return $data;
 
    }
 
} catch (Exception $e) {
 
    throw new Exception($e->getMessage());
}

İade (Refund)

Endpoint

/payment/refund

Method Type

POST

Request Example and Description

Request Header

merchant-no: {merchant - no}
terminal-no: {terminal - no}
signature: {sha - 512 ile üretilen signature}

Request Body

{
    "refundAmount": 2000,
    "clientIp": "114.177.159.157",
    "paymentId": "49902664"
}

ya da

{
    "refundAmount": 2000,
    "clientIp": "114.177.159.157",
    "referenceNo": "ce7ef08d-9b8d-4f2f-ac14-6516a59c1a87"
}

ya da basketItems ile partial refund

{
    "clientIp": "114.177.159.157",
    "referenceNo": "ce7ef08d-9b8d-4f2f-ac14-6516a59c1a87",
    "basketItemRefundModel":
{
    "id": "630436",
    "amount": 1100
}
}

Description:

InputNameTypeRequiredDescription
refundAmountintMİade edilecek tutar bilgisidir.
clientIpStringOClient'a ait ip bilgisidir.
paymentIdStringOİlk yapılan ödemenin id’sidir.
BasketItemRefundModelobjectOBu özellikle sadece Craftgate provider’ından yapılmış bir
ödemenin Partial olarak iade edebilmesi için kullanılabilmektedir.

Response Example and Description

{
    "Success": true,
    "MessageCode": "0000",
    "Message": "Islem Basariyla Gerceklestirildi.",
    "UserMessageTitle": null,
    "UserMessage": "Islem Basariyla Gerceklestirildi."
}

Örnek Kodlar

try {
 
    $header = ["Content-Type: application/json"];
    $header = ["merchant-no: 10019"]; // Hepsipay tarafından iletilir.
    $header = ["terminal-no: 1019"]; // Hepsipay tarafından iletilir.
    $header = ["signature-no: e74ef7c4994cd3f5ff03f89a310cda8bcf29af12a39ebf1e7dbf27c99efe3784eb5eaaf4f535d666eb513620c8b66ec483a2dfa281c85bc2bb8ff18518f5cdf2"];
 
    $data_string = '{"refundAmount":100,"clientIp":"127.0.0.1","paymentId":"709840"}';
 
    $ch = @curl_init("https://merchantpfpayment-gateway-qa.hepsipay.com/payment/refund");
 
    @curl_setopt($ch, CURLOPT_POST, true);
    @curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);
    @curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
    @curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    @curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
    @curl_setopt($ch, CURLOPT_TIMEOUT, 10); //timeout in seconds
 
    $result = curl_exec($ch);
 
    if (@curl_errno($ch)) {
        $error_msg = curl_error($ch);
        @curl_close($ch);
        throw new Exception($error_msg);
    } else {
 
        $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
        $header_size = curl_getinfo($ch, CURLINFO_HEADER_SIZE);
        $header = substr($result, 0, $header_size);
        $body = substr($result, $header_size);
 
        if ($http_code === 401) {
        throw new Exception("Yetkisiz Erişim. " . $http_code);
    }
 
        $data = json_decode($result);
        @curl_close($ch);
 
        return $data;
 
    }
 
} catch (Exception $e) {
throw new Exception($e->getMessage());
}