Saklı Kart ile Ödeme Yap

Saklı kart ile doğrudan NoneSecure otorizasyon almak için kullanılan servistir. Bu serviste istek yapabilmesi için token bilgisinin Header'da gönderilmesi gerekmektedir. Bu linkten Üye İşyeri Doğrulama token bilgilerine ulaşabilirsiniz.

Ödeme isteği öncesinde CommissionInquiry servisi ile komisyon tanımı ve bu tanıma ait oran ile hesaplanmış komisyon tutarı bilgisi öğrenilebilir. Ayrıca CampaignInquiry servisi ile kampanya tanımı ve bu tanıma ait oran ile hesaplanmış indirim tutarı bilgisi öğrenilebilir.

Servise gönderilmesi gereken parametreler şu şekildedir:
Parametre ismi Tip Uzunluk Zorunluluk Örnek Değer Açıklama
memberId long 16 Evet 1 Her zaman 1
merchantId long 16 Evet ? Sizin için oluşturulan Üye işyeri ID'si. Kullanıcı bilgileri mailinde size iletilecektir. Prod ortam bilgisi farklıdır.
customerId String 100 Hayır 1234 Üye işyeri tarafında kayıtlı olan kullanıcının tekil bilgisidir. İster bir id ister bir email olabilir. Kayıtlı kart ile işlem yapılacaksa bu alanın doldurulması zorunludur.
cvv string 3 Hayır 000 Kart güvenlik kodu . Kayıtlı kart ile işlem yapılacaksa bu alan boş bırakılabilir.
userCode string 40 Evet test Kullanıcı kodu. Kullanıcı bilgileri mailinde size iletilecektir. Prod ortam bilgisi farklıdır.
txnType string 20 Evet Auth İşlem Tipi. Gönderilebilecek parametreler aşağıdadır: Auth --> Satış, PreAuth --> Ön Provizyon, PostAuth --> Provizyon kapama, Inquiry --> Ödeme sorgulama, QrAuth --> QR kod ile ödeme, PointAuth --> Puanlı Ödeme , Void --> İptal, Refund --> İade
installmentCount string 2 Evet 1 Taksit sayısını ifade eder. Taksit bilgisini provizyon işlemini göndermeden önce Taksit Tanımı Sorgula servisinden kontrol edip dönüş bilgisine göre doldurmalısınız
currency string 3 Evet 949 Kur bilgisi. (TL:949)
orderId string 36 Evet order1:/... Üye işyeri tarafından üretilen işleme özgü bir numaradır.
totalAmount string 19 Evet 9950 İşlem tutarı 9950 99 TL 50 kuruş demektir, virgül veya noktalama içermez küsürat için 2 hanedir. 1 TL için 100 gönderilmelidir.
pointAmount string 19 Hayır 9950 Puanlı satış yapılacaksa txnType: "PointAuth" gönderilmelidir ve pointAmount ile totalAmount değerlerinin aynı olması gerekir. Kartın puanını sorgulamak için Puan Sorgula servisini kullanabilirsiniz.
rnd string 40 Evet abcd Hash hesaplamasında kullanılan random numaradır.
hash string 2048 Evet abcdefgh İşlemin güvenliği için oluşturulan hash bilgisidir.
description string 100 Hayır - İşlem açıklama bilgisi.
requestIp string 15 Hayır 198.00.00.00 İşlem istek IP bilgisi
cardAlias string 16 Hayır VISA Card Kayıtlı karta verilen isim. Kayıtlı kart ile işlem yapılacaksa cardAlias veya secureDataId bilgisinin gönderilmesi gerekir. Kayıtlı kartların listesini ve secureDataId bilgisini GetCustomerCards servisinden temin edebilirsiniz.
secureDataId integer 16 Hayır 0 Saklanan kart ID bilgisi . Kayıtlı kart ile işlem yapılacaksa cardAlias veya secureDataId bilgisinin gönderilmesi gerekir. Kayıtlı kartların listesini ve secureDataId bilgisini GetCustomerCards servisinden temin edebilirsiniz.
orderProductList List Hayır(*) (*)Pazaryeri modeli için bu alanın doldurulması zorunludur.
merchantId long 64 Evet 0001 Satıcı ID bilgisi. (Submerchant)
productId String 64 Evet 000032 Tekil (unique) ürün ID bilgisi. İstek mesajında sepette bulunan her ürün için ayrı ayrı gönderilmesi gerekmektedir.
amount String 64 Evet 9950 Sipariş tutarı 9950, 99 TL 50 kuruş demektir, virgül veya noktalama içermez küsürat için 2 hanedir. 1 TL için 100 gönderilmelidir.
productName String 64 Evet Bilgisayar Sepetteki ürün ismi
commissionRate String 5 hayır 10.00 Ana işyerinin alt işyerinden tahsil edeceği komisyon tutarının hesaplanmasında kullanılan yüzdelik orandır. Örneğin, %10 komisyon alınacaksa, 10.00 olarak gönderilmelidir.
deliveryInfo list Hayır Teslimat bilgileri
taxNo String 15 Hayır Customer Name Vergi numarası
taxOffice String 64 Hayır Customer Name Vergi dairesi
firmName String 64 Hayır Customer Name Firma adı
identityNumber String 11 Hayır Customer Name Kimlik numarası
fullName String 64 Hayır Customer Name Müşteri ad soyad bilgisi
email String 100 Hayır customer-mail@mail.com Müşteri eposta bilgisi
address String 1024 Hayır Mecidiyeköy - İstanbul Müşteri adres bilgisi
phone String 16 Hayır 5320123456 Müşteri telefon bilgisi
city String 48 Hayır İstanbul Müşteri il bilgisi
town String 48 Hayır Mecidiyeköy Müşteri ilçe bilgisi
zipCode String 16 Hayır 34000 Müşteri posta kodu bilgisi
billingInfo list Hayır Fatura bilgileri
taxNo String 15 Hayır Customer Name Vergi numarası
taxOffice String 64 Hayır Customer Name Vergi dairesi
firmName String 64 Hayır Customer Name Firma adı
identityNumber String 11 Hayır Customer Name Kimlik numarası
fullName String 64 Hayır Customer Name Müşteri ad soyad bilgisi
email String 100 Hayır customer-mail@mail.com Müşteri eposta bilgisi
address String 1024 Hayır Mecidiyeköy - İstanbul Müşteri adres bilgisi
phone String 16 Hayır 5320123456 Müşteri telefon bilgisi
city String 48 Hayır İstanbul Müşteri il bilgisi
town String 48 Hayır Mecidiyeköy Müşteri ilçe bilgisi
zipCode String 16 Hayır 34000 Müşteri posta kodu bilgisi
Servisten dönen parametreler şu şekildedir:

Dönen mesajın yapısı şu şekildedir. responseCode": "00" ise işlem başarılı gerçekleşmiştir.

Parametre ismi Tip Uzunluk Açıklama
authCode string 6 Otorizasyon kodu
hostReference string 24 Banka referans numarası
responseCode string 4 Cevap kodu. 00 --> Başarılı , Diğerleri başarısız
responseMessage string 2048 Banka cevap açıklaması
orderId string 16 Sipariş ID değeri
txnType string 20 İstek mesajındaki txnType bilgisi
txnStatus string 1 İşlem durumu. 'Y' --> 'Başarılı', 'E' --> 'Başarısız', 'P' --> 'Beklemede', 'V' --> 'İptal Edildi', 'R' --> 'İade Edildi', 'A' --> 'Satışa Çevrildi', 'K' --> 'Kısmi İade Edildi'
totalAmount string 19 Tahsil edilen tutar bilgisi
vposId string 64 Banka Sanal POS numarası
vposName string 64 Banka Sanal POS adı
Örnek JSON formatında istek ve cevaplar aşağıdadır:

HTTP Method: POST

Content-Type: application/json

TEST URL: https://ppgpayment-test.birlesikodeme.com:20000/api/ppg/Payment/NoneSecurePayment

PROD URL: https://{baseUrl}/api/ppg/Payment/NoneSecurePayment

*Prod için baseUrl adresi, size entegrasyon mailinde "paymentBaseUrl" alanında iletilecektir.

Request
{
      "memberId": 0,
      "merchantId": 0,
      "customerId": "string",
      "cvv": "string",
      "secureDataId": 0,
      "cardAlias": "string",
      "userCode": "string",
      "txnType": "string",
      "installmentCount": "string",
      "currency": "string",
      "orderId": "string",
      "totalAmount": "string",
      "pointAmount": "string",
      "rnd": "string",
      "hash": "string",
      "description": "string",
      "requestIp": "string",
      "billingInfo": {
        "taxNo": "string",
        "taxOffice": "string",
        "firmName": "string",
        "identityNumber": "string",
        "fullName": "string",
        "email": "string",
        "phone": "string",
        "address": "string",
        "city": "string",
        "town": "string",
        "zipCode": "string"
      },
      "deliveryInfo": {
        "taxNo": "string",
        "taxOffice": "string",
        "firmName": "string",
        "identityNumber": "string",
        "fullName": "string",
        "email": "string",
        "phone": "string",
        "address": "string",
        "city": "string",
        "town": "string",
        "zipCode": "string"
      },
      "orderProductList": [
        {
          "merchantId": 0,
          "productId": "string",
          "amount": "string",
          "productName": "string",
          "commissionRate": "string"
        }
      ]
    }
Response
Dönen mesahın yapısı şu şekildedir. responseCode": "00" ise işlem başarılı gerçekleşmiştir.
{
      "fail": false,
      "statusCode": 200,
      "result": {
        "responseCode": "00",
        "responseMessage": "",
        "orderId": "Abc04037b238f4123",
        "txnType": null,
        "txnStatus": "Y",
        "vposId": 8,
        "vposName": "T.C. Ziraat Bankası A.Ş.",
        "authCode": "951073",
        "hostReference": null,
        "totalAmount": "2500"
      }
    }

HASH Hesaplama



public static string CreateHash(VposRequest request)

{

var hashPassword =""; // Bu bilgi size özel olup kayıtlı kullanıcınıza mail olarak gönderilmiştir.

var hashString = $"{hashPassword}{request.UserCode}{request.Rnd}{request.TxnType}{request.TotalAmount}{request.CustomerId}{request.OrderId}";

System.Security.Cryptography.SHA512 s512 = System.Security.Cryptography.SHA512.Create();

System.Text.UnicodeEncoding ByteConverter = new System.Text.UnicodeEncoding();

byte[] bytes = s512.ComputeHash(ByteConverter.GetBytes(hashString));

var hash = System.BitConverter.ToString(bytes).Replace("-","");

return hash;

}

var crypto = require('crypto');

var param = "{hashPassword}+{request.UserCode}+{request.Rnd}+{request.TxnType}+{request.TotalAmount}+{request.CustomerId}+{request.OrderId}";

var hash = crypto.createHash('sha512');

data = hash.update(param, 'utf-16le');

hash = data.digest('hex');

console.log("hash : " + hash);

import java.nio.charset.StandardCharsets;

import java.security.MessageDigest;

import java.security.NoSuchAlgorithmException;



public static String getSecureData(String dataToHash ){

String generatedHash = null;

try {

MessageDigest md = MessageDigest.getInstance("SHA-512");

byte[] bytes = md.digest(dataToHash.getBytes(StandardCharsets.UTF_16LE));

StringBuilder sb = new StringBuilder();

for(int i=0; i< bytes.length ;i++){

sb.append(Integer.toString((bytes & 0xff) + 0x100,16).substring(1));

}

generatedHash = sb.toString().toUpperCase();

} catch (NoSuchAlgorithmException e) {

e.printStackTrace();

}

return generatedHash

}

$hash = $hashkey.$userCode.$rnd.$TxnType.$TotalAmount.$CustomerId.$OrderId;

$hash = mb_convert_encoding($hash, "UTF-16LE");

$hashString = hash("sha512", $hash);