Ödeme Servisleri

iPara ödeme, cüzdan ve diğer servisler, dünya standartlarına uygun yapıda ve tüm yazılımlarla entegre olarak çalışabilecek şekilde oturum bilgisi tutmayan (stateless) Restful servis odaklı bir mimaride geliştirilmiştir.

Bin Sorgulama

JSON tabanlı olarak çalışan bir restful servisidir. Türkiye genelinde tanımlı olan tüm yerli kartlara ait BIN numaraları için sorgulama yapılmasına izin verir. Bu servise sorgulanmak istenen kredi veya debit kart numarasının ilk 6 hanesi (Bin Numarası), karttan tahsil edilecek tutar ve threeD/nonSecure bilgisi iletilerek, bu bin numarası için üye işyeri bazlı iPara'daki konfigürasyona istinaden taksit desteği olup olmadığı, taksit olması durumunda tahsil edilecek tutar üzerine eklenecek komisyon bilgisi gibi bilgiler elde edilir.

Bin sorgulama V2 servisinin genel kullanımı, kart numarası girilmeye başladığı anda karta yönelik taksit imkanlarının sorgulanmasıdır.
Bin numarası sorgulaması için kredi/debit kart numarasının ilk 6 hanesi, karttan tahsil edilecek tutar bilgisi ve ödemenin threeD/nonSecure bilgisi JSON formatında hazırlanarak, https://api.ipara.com/rest/payment/bin/lookup/v2 adresine gerekli güvenlik bilgileri http header bilgisine eklenerek post edilir. iPara işlem sonucunu yine JSON formatında mağazaya döner.

İstek Güvenlik Bilgileri

HttpHeader Güvenlik Bilgileri

iPara, güvenlik kontrolleri için, mağazadan bazı bilgileri HTTP Header alanında istemektedir. Aşağıda bu bilgilerin tanımları bulunmaktadır:

Parametre Adı Açıklama Opsiyonel/Zorunlu
transactionDate

İstek zamanı “yyyy-MM-dd HH:mm:ss“ formatındadır. İşlem zaman aşımına uğramış ise istek reddedilir.

Zorunlu
version

Entegrasyon versiyon bilgisidir. “1.0” olarak gönderilmelidir.

Zorunlu
token

“publicKey:hash” bilgisidir.
Hash bilgisi; "privateKey + binNumber + transactionDate" alanlarını birbirlerine, verilen sıra ile ekleyerek, SHA1 kriptografik hash fonksiyonun base64 methodu ile encode edilmesi sonucunda oluşur.

Zorunlu

Servis Girdi Parametreleri

Parametre Adı Açıklama Opsiyonel/Zorunlu
binNumber

Kredi veya Debit Kart numarasının ilk 6 hanesi. Örnek: 428220

Zorunlu
amount

Kredi kartından tahsil edilecek tutar.

Zorunlu
threeD

Ödemenin threeD/nonSecure bilgisi.

Zorunlu

Servis Çıktı Parametreleri

Parametre Adı Açıklama
result

İşlem sonucu
1 - İşlem Başarılı
0 - İşlem Başarısız

errorMessage Hata Mesajı
errorCode Hata Kodu
bankId Banka id bilgisi. Tüm Türkiye de geçerli olan banka ID bilgisidir.
bankName Banka adı bilgisi
cardFamilyName Kart aile bilgisi
supportsInstallment

Taksit destekleme durumu
0 – Kart taksitli işlem desteklememektedir.
1 – Kart taksitli işlem desteklemektedir.
Bu alan değeri hem mağazanın taksit aktifliği hem de ilgili bin numarasının taksit desteğine göre hesaplanmaktadır.
Ek olarak eğer kart Ticari kart ise taksit bilgisi mağaza taksit aktifliğine bakılmaksızın hesaplanmaktadır.

supportedInstallments Desteklenen taksit dizisi.
Bu alan değeri hem mağazanın taksit aktifliği hem de ilgili bin numarasının taksit desteğine göre hesaplanmaktadır.
Ek olarak eğer kart Ticari kart ise taksit bilgisi mağaza taksit aktifliğine bakılmaksızın hesaplanmaktadır.
type Kart tipi
0 – Kart tipi bilinmiyor
1 – Kredi Kartı
2 – Debit Kart
serviceProvider Servis sağlayıcısı
0 – Servis sağlayıcı bilinmiyor.
1 – Mastercard
2 – Visa
3 – Amex
4 - Troy
cardThreeDSecureMandatory 3D güvenlik adımı zorunluluğu. Bu alan değeri kart ailesinin 3D Secure zorunluluğuna bağlı olarak zorunlu olabilir.
0 – 3D Secure zorunlu değil.
1 – 3D Secure zorunlu
merchantThreeDSecureMandatory 3D güvenlik adımı zorunluluğu. Bu alan değeri mağazanın 3D Secure zorunluluğuna bağlı olarak zorunlu olabilir.
0 – 3D Secure zorunlu değil.
1 – 3D Secure zorunlu
cvcMandatory CVC/CVV bilgisinin gönderim zorunluluğu.
Bu alan değeri hem mağazanın CVC/CVV zorunluluğuna hem de bin numarasının CVC/CVV zorunluluğuna bağlı olarak zorunlu olabilir.
0 – CVC/CVV’siz ödeme kabulü yapılabilir.
1 – CVC/CVV gönderimi zorunludur.
businessCard Ticari kart bilgisi
1 – Ticari kart
0 – Bireysel kart
Ticari kartlar ile mağaza taksit aktifliği kapalı olsa dahi taksit yapılabilir. Desteklenen taksitler için supportedInstallments alanını kullanabilirsiniz.
installmentDetail Taksit Sayısı. Taksit sayısı en fazla 12 olacak şekilde (1-12) arası değerler gelmektedir.

Örnek Çağrılar


            //Request
            BinNumberInquiryRequest request = new BinNumberInquiryRequest();
            request.binNumber = "492130";
            BinNumberInquiryResponse  response = BinNumberInquiryRequest.Execute(request, settings);
                

    //request
                private static final String PUBLIC_KEY = "publick_key"; 
                private static final String PRIVATE_KEY = "private_key"; 
                private static final String DATE_FORMAT = "yyyy-MM-dd HH:mm:ss";
                private static final String REQUEST_URL = "https://api.ipara.com/rest/payment/bin/lookup/v2";


                public static void main(String[] args) throws Exception {
                getInstallmentAndAmountInfo();
                }

                private static void getInstallmentAndAmountInfo() throws Exception {
                RequestObject requestObject = createRequestObject(); 
                String timeStamp = getTransactionDate(); 
                String hashValues = (PRIVATE_KEY + requestObject.getBinNumber() + timeStamp); 
                String hash = StringUtil.getSHA1Text(hashValues); String token = PUBLIC_KEY + ":" + hash;
                RestTemplate restTemplate = new RestTemplate(); 
                restTemplate.getMessageConverters().add(0, new 
                StringHttpMessageConverter(Charset.forName("UTF-8")));
                MultiValueMap headers = new LinkedMultiValueMap<>(); 
                headers.add(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_UTF8_VALUE); 
                headers.add(DirectPaymentIntegrationFieldNames.TRANSACTION_DATE.getText(), timeStamp); 
                headers.add(DirectPaymentIntegrationFieldNames.LANGUAGE.getText(), "tr-TR"); 
                headers.add(DirectPaymentIntegrationFieldNames.VERSION.getText(), "1.0"); 
                headers.add(DirectPaymentIntegrationFieldNames.TOKEN.getText(), token); 
                RequestEntity requestEntity = new RequestEntity<>(requestObject, headers, 
                     HttpMethod.POST, UriComponentsBuilder.fromHttpUrl(REQUEST_URL).build().toUri()); 
                ResponseEntity
                 responseEntity = restTemplate.exchange(requestEntity, String.class);

                }

                private static RequestObject createRequestObject() {
                RequestObject obj = new RequestObject();
                obj.setBinNumber("450634");
                obj.setAmount("5000"); 
                obj.setThreeD(true);
                return obj; 
                } 
                    
                private static String getTransactionDate() {
                return new SimpleDateFormat(DATE_FORMAT).format(new Date()); 
                }

//request
$request = new BinNumberInquiryRequest();
$request->binNumber="492130";
$response=BinNumberInquiryRequest::execute($request,$settings);
                

//request
ipara.BinNumberInquiryRequest(492130).then(requestResult => {
res.json(requestResult)
}).catch(err => {
throw new Error(err)
})


//request
      req=Binnumberrequest.new
      req.binNumber =  params[:binNumber]
      @returnData= req.execute(req,@settings)


//request
req = BinNumberRequest()
req.binNumber = request.POST.get('binNumber')
response = req.execute(req, config)


    //Request
    {
    "binNumber" : "428220",
    "amount" : "5000",
    "threeD" : true
    }
   //Response
    {
    "bankId": 62,
    "bankName": "Garanti Bankası",
    "cardFamilyName": "BONUS",
    "supportsInstallment": 1,
    "type": 1,
    "serviceProvider": 2,
    "result": 1,
    "cardThreeDSecureMandatory": 0,
    "merchantThreeDSecureMandatory": 0,
    "cvcMandatory": 0,
    "businessCard": 0,
    "installmentDetail": [
    {
    "requiredAmount": "5152",
    "requiredCommissionAmount": "148",
    "installment": 1,
    "merchantCommissionRate": "2.95"
    },
    {
    "requiredAmount": "5265",
    "requiredCommissionAmount": "252",
    "installment": 2,
    "merchantCommissionRate": "5.03"
    },
    {
    "requiredAmount": "5352",
    "requiredCommissionAmount": "329",
    "installment": 3,
    "merchantCommissionRate": "6.58"
    },
    {
    "requiredAmount": "5445",
    "requiredCommissionAmount": "409",
    "installment": 4,
    "merchantCommissionRate": "8.17"
    },
    {
    "requiredAmount": "5537",
    "requiredCommissionAmount": "485",
    "installment": 5,
    "merchantCommissionRate": "9.7"
    },
    {
    "requiredAmount": "5630",
    "requiredCommissionAmount": "560",
    "installment": 6,
    "merchantCommissionRate": "11.19"
    }
    ]
    }

API İle (3D Secure olmadan) Ödeme

Mağaza, müşteri üyelik bilgilerini ve kart bilgilerini aldıktan sonra, ödeme verilerini XML formatında hazırlayarak https://api.ipara.com/rest/payment/auth web servis adresine gerekli güvenlik bilgilerini http header bilgisine ekleyerek post eder. iPara işlem sonucunu yine XML formatında mağazaya döner.

İstek Güvenlik Bilgileri

iPara, güvenlik kontrolleri için, mağazadan bazı bilgileri HTTP Header alanında istemektedir. Aşağıda bu bilgilerin tanımları bulunmaktadır:

HttpHeader Güvenlik Parametreleri
Parametre Adı Açıklama Opsiyonel/Zorunlu
transactionDate

İstek zamanı. “yyyy-MM-dd HH:mm:ss“ formatındadır. İşlem zaman aşımına uğramış ise istek reddedilir. Örnek: “2014-08-12 23:59:59” İlgili kütüphane içindeki GetTransactionDate() fonksiyonundan elde edilebilir.

Zorunlu
version

Entegrasyon versiyon bilgisidir. “1.0” olarak gönderilmelidir.

Zorunlu
token

“publicKey:hash” bilgisidir. Hash bilgisi; "privateKey + orderId + amount + mode + (*)cardOwnerName + (*)cardNumber + (*)cardExpireMonth + (*)cardExpireYear + (*)cardCvc + (*)userId + (*)cardId + purchaser.name + purchaser.surname + purchaser.email + transactionDate" alanlarını birbirlerine, verilen sıra ile ekleyerek, SHA1 kriptografik hash fonksiyonun base64 methodu ile encode edilmesi sonucunda oluşur. Hash oluşturma fonksiyonu örnekleri burada anlatılmıştır.
token = public key + ‘:’ + base64[ sha1[("privateKey + orderId + amount + mode + (*)cardOwnerName + (*)cardNumber + (*)cardExpireMonth + (*)cardExpireYear + (*)cardCvc + (*)userId + (*)cardId + purchaser.name + purchaser.surname + purchaser.email + transactionDate")]]
token = “ASKJH98675ASDASDPO:jhsa/gd+89dfg0df6SA/dfg8967==”

Zorunlu

Servis Girdi Parametreleri

Servis içinde ileticek Girdi (Input) Parametreleri
Parametre Adı Açıklama Opsiyonel/Zorunlu
mode

İstek modu. “P” veya “T” gönderilmelidir.
“P” - Gerçek Ödeme
“T” – Test Ödemesi
Entegrasyon işlemlerinizde mode alanını “T” olarak göndererek test işlemlerinizi gerçekleştirebilirsiniz.
ÖNEMLİ NOT: Test modunda iken ödemeler banka poslarından tahsil edilmez. Test işlemleriniz sonunda gerçek ödeme tahsilatı için mode alanını “P” olarak göndermeyi unutmayınız.

Zorunlu
threeD

3D Secure olmadan gerçekleştirilen ödeme işlemlerinde “false” olarak gönderilmelidir.

Zorunlu
orderId

Mağazanın ilgili sipariş ile ilişkilendirdiği her bir istek için benzersiz olan tekil sipariş kodu. Maksimum Uzunluk: 100 karakter.

Zorunlu
cardOwnerName

Kart üzerindeki ad. Minimum Uzunluk: 4 - Maksimum Uzunluk: 100 karakter.

*
cardNumber

Kart numarası. Minimum Uzunluk: 12 - Maksimum Uzunluk: 19 karakter.

*
cardExpireMonth

Kart son kullanma tarihi ay parametresi Uzunluk: 2 karakter. Örnek; 05,11, vb.

*
cardExpireYear

Kart son kullanma tarihi yıl parametresi. Uzunluk: 2 karakter. Örnek; 14,19, vb.

*
cardCvc

Kartın arkasındaki güvenlik kodu: Uzunluk: MasterCard ve Visa kartları için 3 karakter, Amex kartlar için 3 veya 4 karakter.

*
userId

Mağaza kullanıcısını referans eden bilgi. Maksimum uzunluk 255 karakter.
Cüzdan servisleri ile daha önceden kaydedilmiş olan kayıtlı kart ile tek tıkla ödeme işlemi gerçekleştirilmek istendiğinde gönderilmelidir.

*
cardId

Mağaza kullanıcısının kartını referans eden kart kaydetme işlemi sonucunda oluşan id bilgisi.
Cüzdan servisleri ile daha önceden kaydedilmiş olan kayıtlı kart ile tek tıkla ödeme işlemi gerçekleştirilmek istendiğinde gönderilmelidir.

*
installment

Taksit Sayısı. Minimum Uzunluk: 1 - Maksimum Uzunluk: 2 karakter.Desteklenen taksit sayıları: 1,2,3,4,5,6,7,8,9,10,11,12

Zorunlu
amount

Karttan çekilecek olan toplam sipariş tutarı. Sipariş tutarı kuruş ayracı olmadan gönderilmelidir. Örneğin; 1 TL 100, 12 1200, 130 13000, 1.05 105, 1.2 120 olarak gönderilmelidir.

Zorunlu
echo

Mağazaya istek sonucunda geri gönderilecek bilgi alanıdır. Maksimum Uzunluk: 255.

Opsiyonel
vendorId

iPara tarafından sağlanan altyapı sağlayıcı id bilgisi. Mağaza kendi yazılımını kullanıyor ise bu alan gönderilmemelidir.

Opsiyonel
purchaser

Müşteri Bilgileri. Aşağıdaki tabloda iç parametreleri anlatılmıştır.

Opsiyonel
products

Ürün Bilgileri. Aşağıdaki tabloda iç parametreleri anlatılmıştır.

Zorunlu
Müşteri Bilgileri (Purchaser)
Parametre Adı Açıklama Opsiyonel/Zorunlu
name

Müşteri isim bilgisi. Minimum Uzunluk: 3 - Maksimum Uzunluk: 50. Zorunlu

Zorunlu
surname Müşteri soyisim bilgisi. Minimum Uzunluk: 3 - Maksimum Uzunluk: 50. Zorunlu
email Müşteri e-posta bilgisi. E-posta adresi geçerli bir e-posta adresi olmalıdır. Minimum Uzunluk: 3 - Maksimum Uzunluk: 100. Zorunlu
clientIp Müşteri istemci IP adresi Zorunlu
birthDate Müşteri doğum tarihi bilgisi. “yyyy-MM-dd” formatında olmalıdır. Opsiyonel
gsmNumber Müşteri cep telefonu bilgisi. Opsiyonel
tcCertificate Müşteri T.C. Kimlik Numarası bilgisi. 11 haneli olmalıdır. Opsiyonel
invoiceAddress Fatura adresi bilgileri. Aşağıdaki tabloda iç parametreleri anlatılmıştır. Opsiyonel
shippingAddress Kargo adresi bilgileri.Aşağıdaki tabloda iç parametreleri anlatılmıştır. Opsiyonel
Müşteri Fatura Adresi Bilgileri (invoiceAddress)
Parametre Adı Açıklama Opsiyonel/Zorunlu
name İsim bilgisi. Opsiyonel
surname Soyisim bilgisi. Opsiyonel
address Adres bilgisi. Opsiyonel
zipcode Posta kodu bilgisi. Opsiyonel
city Şehir bilgisi. Opsiyonel
country Ülke bilgisi. ISO 3166-1 alpha-2 standardındaki ülke kodu. Türkiye için “TR”. Opsiyonel
tcCertificate T.C. Kimlik numarası bilgisi. Opsiyonel
taxNumber Vergi numarası bilgisi Opsiyonel
taxOffice Vergi dairesi bilgisi Opsiyonel
companyName Şirket ismi bilgisi Opsiyonel
phoneNumber Telefon bilgisi Opsiyonel
Müşteri Kargo Adresi Bilgileri (shippingAddress)
Parametre Adı Açıklama Opsiyonel/Zorunlu
name İsim bilgisi. Opsiyonel
surname Soyisim bilgisi. Opsiyonel
address Adres bilgisi. Opsiyonel
zipcode Posta kodu bilgisi. Opsiyonel
city Şehir bilgisi. Opsiyonel
country Ülke bilgisi. ISO 3166-1 alpha-2 standardındaki ülke kodu. Türkiye için “TR”. Opsiyonel
phoneNumber Telefon bilgisi Opsiyonel
Ürün Bilgileri (products)
Parametre Adı Açıklama Opsiyonel/Zorunlu
productCode Ürün kodu bilgisi. Opsiyonel
productName Ürün isim bilgisi. Opsiyonel
quantity Ürün adet bilgisi. Opsiyonel
price Ürün birim fiyat bilgisi. Opsiyonel
Önemli NOT: En az bir adet ürün (product) bilgisi gönderimi zorunludur.


Servis Çıktı Parametreleri

Servis Çıktı (Output) Parametreleri
Parametre Adı Açıklama
result

İşlem sonucu
1 - İşlem Başarılı
0 - İşlem Başarısız

errorMessage Hata Mesajı
errorCode Hata Kodu
publicKey Mağaza açık anahtar bilgisi.
echo Mağazanın istek bilgisinde iletmiş olduğu echo verisi.
transactionDate Hash hesaplamasında kullanılacak zaman bilgisi. “yyyy-MM-dd HH:mm:ss“ formatındadır.
mode

İstek modu.
“P” - Gerçek Ödeme
“T” – Test Ödemesi

orderId Mağaza sipariş Id
amount Sipariş toplam tutar bilgisi.
hash “orderId + result + amount + mode + errorCode + errorMessage + transactionDate + publicKey + privateKey” alanlarını birbirlerine, verilen sıra ile ekleyerek, SHA1 kriptografik hash fonksiyonun base64 methodu ile encode edilmesi sonucunda bu değer oluşur.
Not 1: İşlem sonucunda sizlere gönderilen hash bilgisini tarafınıza gelen parametreler ile tekrar hesaplayıp bu alandaki bilgi ile karşılaştırılması gerekmektedir. Eğer aynı hash değeri oluşmuyor ise işlemi reddetmelisiniz. Aksi durumda cevap bilgisi iletiminde üçüncü kişilerin araya girerek sahtekarlık yapabilme olasılığı ortaya çıkacaktır.
Not 2: Hash bilgisi hesaplamasında null olan veriler, String “” olarak hesaplanmıştır.
Not 3: İstek bilgileri içerisinde mağazanın tanımamasından kaynaklı olarak mağaza bilgileri yoksa cevap bilgisinde hash ve transactionDate alanları gönderilmeyecektir.

Örnek Çağrılar


            //Request
            var request = new ApiPaymentRequest();
            request.OrderId = Guid.NewGuid().ToString();
            request.Echo = "Echo";
            request.Mode = settings.Mode;
            request.Amount = "10000"; // 100 tL
            request.CardOwnerName = "Fatih Coşkun";
            request.CardNumber = "4282209004348015";
            request.CardExpireMonth = "05";
            request.CardExpireYear = "18";
            request.Installment = "1";
            request.Cvc = "000";
            request.ThreeD = "false";
            #region Sipariş veren bilgileri
            request.Purchaser = new Purchaser();
            request.Purchaser.Name = "Murat";
            request.Purchaser.SurName = "Kaya";
            request.Purchaser.BirthDate = "1986-07-11";
            request.Purchaser.Email = "murat@kaya.com";
            request.Purchaser.GsmPhone = "5881231212";
            request.Purchaser.IdentityNumber = "1234567890";
            request.Purchaser.ClientIp = "127.0.0.1";
            #endregion
            #region Fatura bilgileri
            request.Purchaser.InvoiceAddress = new PurchaserAddress();
            request.Purchaser.InvoiceAddress.Name = "Murat";
            request.Purchaser.InvoiceAddress.SurName = "Kaya";
            request.Purchaser.InvoiceAddress.Address = "Mevlüt Pehlivan Mah. Multinet Plaza Şişli";
            request.Purchaser.InvoiceAddress.ZipCode = "34782";
            request.Purchaser.InvoiceAddress.CityCode = "34";
            request.Purchaser.InvoiceAddress.IdentityNumber = "1234567890";
            request.Purchaser.InvoiceAddress.CountryCode = "TR";
            request.Purchaser.InvoiceAddress.TaxNumber = "123456";
            request.Purchaser.InvoiceAddress.TaxOffice = "Kozyatağı";
            request.Purchaser.InvoiceAddress.CompanyName = "iPara";
            request.Purchaser.InvoiceAddress.PhoneNumber = "2122222222";
            #endregion
            #region Kargo Adresi bilgileri
            request.Purchaser.ShippingAddress = new PurchaserAddress();
            request.Purchaser.ShippingAddress.Name = "Murat";
            request.Purchaser.ShippingAddress.SurName = "Kaya";
            request.Purchaser.ShippingAddress.Address = "Mevlüt Pehlivan Mah. Multinet Plaza Şişli";
            request.Purchaser.ShippingAddress.ZipCode = "34782";
            request.Purchaser.ShippingAddress.CityCode = "34";
            request.Purchaser.ShippingAddress.IdentityNumber = "1234567890";
            request.Purchaser.ShippingAddress.CountryCode = "TR";
            request.Purchaser.ShippingAddress.PhoneNumber = "2122222222";
            #endregion
            #region Ürün bilgileri
            request.Products = new List();
            Product p = new Product();
            p.Title = "Telefon";
            p.Code = "TLF0001";
            p.Price = "5000";
            p.Quantity = 1;
            request.Products.Add(p);
            p = new Product();
            p.Title = "Bilgisayar";
            p.Code = "BLG0001";
            p.Price = "5000";
            p.Quantity = 1;
            request.Products.Add(p);
            #endregion
            ApiPaymentResponse response = ApiPaymentRequest.Execute(request, settings);
                

//request
            ApiPaymentRequest request = new ApiPaymentRequest();
            UUID uuid = UUID.randomUUID();
            request.OrderId = uuid.toString();
            request.echo = "Echo";
            request.mode = settings.Mode;
            request.Amount = "10000"; // 100 tL
            request.CardOwnerName = "Fatih Coşkun";
            request.CardNumber = "4282209027132016";
            request.CardExpireMonth = "05";
            request.CardExpireYear = "18";
            request.Installment = "1";
            request.Cvc = "000";
            request.ThreeD = "false";
            request.UserId="";
            request.CardId="";
            request.Purchaser = new Purchaser();
            request.Purchaser.Name = "Murat";
            request.Purchaser.SurName = "Kaya";
            request.Purchaser.BirthDate = "1986-07-11";
            request.Purchaser.Email = "murat@kaya.com";
            request.Purchaser.GsmPhone = "5881231212";
            request.Purchaser.IdentityNumber = "1234567890";
            request.Purchaser.ClientIp = "127.0.0.1";
          
            request.Purchaser.InvoiceAddress = new PurchaserAddress();
            request.Purchaser.InvoiceAddress.Name = "Murat";
            request.Purchaser.InvoiceAddress.SurName = "Kaya";
            request.Purchaser.InvoiceAddress.Address = "Mevlüt Pehlivan Mah. Multinet Plaza Şişli";
            request.Purchaser.InvoiceAddress.ZipCode = "34782";
            request.Purchaser.InvoiceAddress.CityCode = "34";
            request.Purchaser.InvoiceAddress.IdentityNumber = "1234567890";
            request.Purchaser.InvoiceAddress.CountryCode = "TR";
            request.Purchaser.InvoiceAddress.TaxNumber = "123456";
            request.Purchaser.InvoiceAddress.TaxOffice = "Kozyatağı";
            request.Purchaser.InvoiceAddress.CompanyName = "iPara";
            request.Purchaser.InvoiceAddress.PhoneNumber = "2122222222";
         
            request.Purchaser.ShippingAddress = new PurchaserAddress();
            request.Purchaser.ShippingAddress.Name = "Murat";
            request.Purchaser.ShippingAddress.SurName = "Kaya";
            request.Purchaser.ShippingAddress.Address = "Mevlüt Pehlivan Mah. Multinet Plaza Şişli";
            request.Purchaser.ShippingAddress.ZipCode = "34782";
            request.Purchaser.ShippingAddress.CityCode = "34";
            request.Purchaser.ShippingAddress.IdentityNumber = "1234567890";
            request.Purchaser.ShippingAddress.CountryCode = "TR";
            request.Purchaser.ShippingAddress.PhoneNumber = "2122222222";
         
            request.product = new ArrayList();
            Product p = new Product();
            p.Title = "Telefon";
            p.Code = "TLF0001";
            p.Price = "5000";
            p.Quantity = "1";
            request.product.add(p);
            p = new Product();
            p.Title = "Bilgisayar";
            p.Code = "BLG0001";
            p.Price = "5000";
            p.Quantity = "1";
            request.product.add(p);
            ApiPaymentResponse response = ApiPaymentRequest.Execute(request, settings);

                //request
$request = new ApiPaymentRequest();
$request->OrderId = Helper::Guid();
$request->Echo = "Echo";
$request->Mode = $settings->Mode;
$request->Amount = "10000"; // 100 tL
$request->CardOwnerName = "Fatih Coşkun";
$request->CardNumber = "4282209004348015";
$request->CardExpireMonth = "05";
$request->CardExpireYear = "18";
$request->Installment = "1";
$request->Cvc = "000";
$request->ThreeD = "false";
#region Sipariş veren bilgileri
$request->Purchaser = new Purchaser();
$request->Purchaser->Name = "Murat";
$request->Purchaser->SurName = "Kaya";
$request->Purchaser->BirthDate = "1986-07-11";
$request->Purchaser->Email = "murat@kaya.com";
$request->Purchaser->GsmPhone = "5881231212";
$request->Purchaser->IdentityNumber = "1234567890";
$request->Purchaser->ClientIp = Helper::get_client_ip();
#endregion
#region Fatura bilgileri
$request->Purchaser->InvoiceAddress = new PurchaserAddress();
$request->Purchaser->InvoiceAddress->Name = "Murat";
$request->Purchaser->InvoiceAddress->SurName = "Kaya";
$request->Purchaser->InvoiceAddress->Address = "Mevlüt Pehlivan Mah-> Multinet Plaza Şişli";
$request->Purchaser->InvoiceAddress->ZipCode = "34782";
$request->Purchaser->InvoiceAddress->CityCode = "34";
$request->Purchaser->InvoiceAddress->IdentityNumber = "1234567890";
$request->Purchaser->InvoiceAddress->CountryCode = "TR";
$request->Purchaser->InvoiceAddress->TaxNumber = "123456";
$request->Purchaser->InvoiceAddress->TaxOffice = "Kozyatağı";
$request->Purchaser->InvoiceAddress->CompanyName = "iPara";
$request->Purchaser->InvoiceAddress->PhoneNumber = "2122222222";
#endregion
#region Kargo Adresi bilgileri
$request->Purchaser->ShippingAddress = new PurchaserAddress();
$request->Purchaser->ShippingAddress->Name = "Murat";
$request->Purchaser->ShippingAddress->SurName = "Kaya";
$request->Purchaser->ShippingAddress->Address = "Mevlüt Pehlivan Mah-> Multinet Plaza Şişli";
$request->Purchaser->ShippingAddress->ZipCode = "34782";
$request->Purchaser->ShippingAddress->CityCode = "34";
$request->Purchaser->ShippingAddress->IdentityNumber = "1234567890";
$request->Purchaser->ShippingAddress->CountryCode = "TR";
$request->Purchaser->ShippingAddress->PhoneNumber = "2122222222";
#endregion
#region Ürün bilgileri
$request->Products =  array();
$p = new Product();
$p->Title = "Telefon";
$p->Code = "TLF0001";
$p->Price = "5000";
$p->Quantity = 1;
$request->Products[0]=$p;
$p = new Product();
$p->Title = "Bilgisayar";
$p->Code = "BLG0001";
$p->Price = "5000";
$p->Quantity = 1;
$request->Products[1]=$p;
#endregion
$response=ApiPaymentRequest::execute($request,$settings);   
                
                

//Request
                                                  const obj = {
echo: "",
amount: "10000",
publicKey: settings.publicKey,
orderId: Guid.raw(),
mode: settings.mode,
threeD: "false",
cardId: "",
userId: "",
cardOwnerName : "Fatih Coşkun",
cardNumber : "4282209004348015",
cardExpireMonth : "05",
cardExpireYear : "18",
cardCvc : "000",
installment : "1",
products: [{
productName: "Telefon",
productCode: "TLF0001",
quantity: "1",
price: "5000"
},
{
productName: "Bilgisayar",
productCode: "BIL0002",
quantity: "1",
price: "5000"
}
],
purchaser: {
birthDate: "1986-07-11",
gsmNumber: "5881231212",
tcCertificate: "1234567890",
name : "Murat",
surname : "Kaya",
email : "murat@kaya.com",
clientIp : "123.58.7.4",
invoiceAddress: {
name: "Murat",
surname: "Kaya",
address: "Mevlüt Pehlivan Mah. Multinet Plaza Şişli",
zipcode: "34782",
city: "34",
tcCertificate: "12345678901",
country: "tr",
taxNumber: "123456890",
taxOffice: "Şişli",
companyName: "iPara",
phoneNumber: "2123886600"
},
shippingAddress: {
name: "Murat",
surname: "Kaya",
address: "Mevlüt Pehlivan Mah. Multinet Plaza Şişli",
zipcode: "34782",
city: "34",
country: "tr",
phoneNumber: "2123886600"
}
}
}
 
ipara.ApiPaymentRequest(obj).then(results => {
parseString(results, function (err, result) {
if (err) throw new Error(err);
res.json(result)
});
}).catch(err=>{
console.log(err)
})


//request

    req=Apipaymentrequest.new
    
    req.OrderId = SecureRandom.uuid
    req.Echo = "Echo"
    req.Mode =  @settings.Mode
    req.Amount = "10000" # 100 tL
    req.CardOwnerName =params[:nameSurname]
    req.CardNumber = params[:cardNumber]
    req.CardExpireMonth = params[:month]
    req.CardExpireYear = params[:year]
    req.Installment = params[:installment]
    req.Cvc = params[:cvc]
    req.ThreeD = "false"
    req.UserId=""
    req.CardId=""
    
    #region Sipariş veren bilgileri
    req.Purchaser = Purchaser.new 
    req.Purchaser.Name = "Murat"
    req.Purchaser.SurName = "Kaya"
    req.Purchaser.BirthDate = "1986-07-11"
    req.Purchaser.Email = "murat@kaya.com"
    req.Purchaser.GsmPhone = "5881231212"
    req.Purchaser.IdentityNumber = "1234567890"
    req.Purchaser.ClientIp = "127.0.0.1"
    #endregion
    #region Fatura bilgileri
    req.Purchaser.Invoiceaddress = Purchaseraddress.new 
    req.Purchaser.Invoiceaddress.Name = "Murat"
    req.Purchaser.Invoiceaddress.SurName = "Kaya"
    req.Purchaser.Invoiceaddress.Address = "Mevlüt Pehlivan Mah. Multinet Plaza Şişli"
    req.Purchaser.Invoiceaddress.ZipCode = "34782"
    req.Purchaser.Invoiceaddress.CityCode = "34"
    req.Purchaser.Invoiceaddress.IdentityNumber = "1234567890"
    req.Purchaser.Invoiceaddress.CountryCode = "TR"
    req.Purchaser.Invoiceaddress.TaxNumber = "123456"
    req.Purchaser.Invoiceaddress.TaxOffice = "Kozyatağı"
    req.Purchaser.Invoiceaddress.CompanyName = "iPara"
    req.Purchaser.Invoiceaddress.PhoneNumber = "2122222222"
    #endregion
    #region Kargo Adresi bilgileri
    req.Purchaser.Shippingaddress = Purchaseraddress.new 
    req.Purchaser.Shippingaddress.Name = "Murat"
    req.Purchaser.Shippingaddress.SurName = "Kaya"
    req.Purchaser.Shippingaddress.Address = "Mevlüt Pehlivan Mah. Multinet Plaza Şişli"
    req.Purchaser.Shippingaddress.ZipCode = "34782"
    req.Purchaser.Shippingaddress.CityCode = "34"
    req.Purchaser.Shippingaddress.IdentityNumber = "1234567890"
    req.Purchaser.Shippingaddress.CountryCode = "TR"
    req.Purchaser.Shippingaddress.PhoneNumber = "2122222222"
    #endregion
    #region Ürün bilgileri
    req.Products = Array.new()
    p =Product.new 
    p.Title = "Telefon"
    p.Code = "TLF0001"
    p.Price = "5000"
    p.Quantity = 1
    req.Products << p
    p =Product.new 
    p.Title = "Bilgisayar"
    p.Code = "BLG0001"
    p.Price = "5000"
    p.Quantity = 1
    req.Products << p
    #endregion
    @returnData= req.execute(req,@settings)


//request
    api = ApiPaymentRequest()
    api.Echo = "Echo"
    api.Mode = config.Mode
    api.ThreeD = "false"
    api.OrderId = str(randint(1, 10000))
    api.Amount = "10000"
    api.CardOwnerName = request.POST.get('nameSurname')
    api.CardNumber = request.POST.get('cardNumber')
    api.CardExpireMonth = request.POST.get('month')
    api.CardExpireYear = request.POST.get('year')
    api.Installment = request.POST.get('installment')
    api.Cvc = request.POST.get('cvc')
    api.VendorId = ""
    api.UserId = ""
    api.CardId = ""
    #Sipariş veren bilgileri
    api.Purchaser = api.PurchaserClass()
    api.Purchaser.name = "Murat"
    api.Purchaser.surname = "Kaya"
    api.Purchaser.birthDate = "1986-07-11"
    api.Purchaser.email = "mura@kaya.com"
    api.Purchaser.gsmPhone = "5881231212"
    api.Purchaser.tcCertificate = "58812312547"
    api.Purchaser.clientIp = "127.0.0.1"
    # Fatura Bilgileri
    api.Purchaser.invoiceAddress = api.PurchaserAddress()
    api.Purchaser.invoiceAddress.name = "Murat"
    api.Purchaser.invoiceAddress.surname = "Kaya"
    api.Purchaser.invoiceAddress.address = "Mevlüt Pehlivan Mah. Multinet Plaza Şişli"
    api.Purchaser.invoiceAddress.zipCode = "34782"
    api.Purchaser.invoiceAddress.cityCode = "34"
    api.Purchaser.invoiceAddress.tcCertificate = "1234567890"
    api.Purchaser.invoiceAddress.country = "TR"
    api.Purchaser.invoiceAddress.taxNumber = "123456"
    api.Purchaser.invoiceAddress.taxOffice = "Kozyatagi"
    api.Purchaser.invoiceAddress.companyName = "iPara"
    api.Purchaser.invoiceAddress.phoneNumber = "2122222222"
    # Kargo Bilgileri
    api.Purchaser.shippingAddress = api.PurchaserAddress()
    api.Purchaser.shippingAddress.name = "Murat"
    api.Purchaser.shippingAddress.surname = "Kaya"
    api.Purchaser.shippingAddress.address = "Mevlüt Pehlivan Mah. Multinet Plaza Şişli"
    api.Purchaser.shippingAddress.zipCode = "34782"
    api.Purchaser.shippingAddress.cityCode = "34"
    api.Purchaser.shippingAddress.tcCertificate = "1234567890"
    api.Purchaser.shippingAddress.country = "TR"
    api.Purchaser.shippingAddress.phoneNumber = "2122222222"
    # Ürün Bilgileri
    api.Products = []
    product1 = api.Product()
    product1.title = "Telefon"
    product1.code = "TLF0001"
    product1.price = "5000"
    product1.quantity = "1"
    api.Products.append(product1)

    product2 = api.Product()
    product2.title = "Bilgisayar"
    product2.code = "BLG0001"
    product2.price = "5000"
    product2.quantity = "1"
    api.Products.append(product2)
            
   message = api.execute(api, config)
 
            
     //Request 
            <?xml version="1.0" encoding="UTF-8" ?>































































































































<auth>
            <cardOwnerName>Murat Kaya</cardOwnerName>
            <cardNumber>4282209004348015</cardNumber>
            <cardExpireMonth>02</cardExpireMonth>
            <cardExpireYear>17</cardExpireYear>
            <cardCvc>123</cardCvc>
            <installment>1</installment>
            <threeD>false</threeD>
            <orderId>b3091d88-6320-4446-be6c-7a1f8e6e73c7</orderId>
            <echo>Echo Bilgisi</echo>
            <amount>2500</amount>
            <mode>T</mode>
            <products>
            <product>
            <productCode>Product Code 1</productCode>
            <productName>Product Name 1</productName>
            <quantity>1</quantity>
            <price>1500</price>
                    </product>
            <product>
            <productCode>Product Code 2</productCode>
            <productName>Product Name 2</productName>
            <quantity>1</quantity>
            <price>1000</price>
                     </product>
               </products>
            <purchaser>
            <name>Murat</name>
            <surname>Kaya</surname>
            <email>murat@kaya.com</email>
            <clientIp>123.58.7.4</clientIp>
            <birthDate>1976-07-11</birthDate>
            <gsmNumber>5881231212</gsmNumber>
            <tcCertificate>1234567890</tcCertificate>
            <invoiceAddress>
            <name>Murat</name>
            <surname>Kaya</surname>
            <address>Mevlüt Pehlivan Mah. Multinet Plaza Şişli</address>
            <zipcode>34782</zipcode>
            <city>34</city>
            <tcCertificate>12345678901</tcCertificate>
            <country>tr</country>
            <taxNumber>123456890</taxNumber>
            <taxOffice>Şişli</taxOffice>
            <companyName>iPara</companyName>
            <phoneNumber>2123886600</phoneNumber>
                    </invoiceAddress>
            <shippingAddress>
            <name>Murat</name>
            <surname>Kaya</surname>
            <address>Mevlüt Pehlivan Mah. Multinet Plaza Şişli</address>
            <zipcode>34782</zipcode>
            <city>34</city>
            <country>tr</country>
            <phoneNumber>2123886600</phoneNumber>
                    </shippingAddress>
                </purchaser>
</auth>
//Response
            <?xml version="1.0" encoding="UTF-8" standalone="yes" ?>































































































































<authResponse>
            <amount>2500</amount>
            <echo>Echo Bilgisi</echo>
            <hash>yO5ACnF9FpsiV2/WBRRsDEBDRt8=</hash>
            <mode>T</mode>
            <orderId>b3091d88-6320-4446-be6c-7a1f8e6e73c7</orderId>
            <publicKey>ABVQ03C77WPTODQN</publicKey>
            <result>1</result>
            <transactionDate>2014-01-03 21:08:51</transactionDate>
</authResponse>
                              

3D Secure Ödeme

Mağaza, müşteri üyelik bilgilerini ve kart bilgilerini aldıktan sonra, ödeme verilerini JSON formatında hazırlayıp http form post yöntemi ile https://api.ipara.com/rest/payment/threed adresine mağaza tarafından üretilen her bir işlem için benzersiz olan tekil sipariş kodu ile post eder.

Json verisi “ parameters ” ismi ile post edilmelidir. iPara işlem sonucunu kullanıcının istek bilgisinde gönderdiği başarılı veya hatalı sonuç adresine http post yöntemi ile geri döner.


Servis Girdi Parametreleri

Servis içinde ileticek Girdi (Input) Parametreleri
Parametre Adı Açıklama Zorunluluk
mode

İstek modu. “P” veya “T” gönderilmelidir.
“P” - Gerçek Ödeme
“T” – Test Ödemesi

Evet
orderId

Mağazanın ilgili sipariş ile ilişkilendirdiği her bir istek için benzersiz olan tekil sipariş kodu. Maksimum Uzunluk: 100 karakter.

Evet
cardOwnerName

Kart üzerindeki ad. Minimum Uzunluk: 4 - Maksimum Uzunluk: 100 karakter.

*
cardNumber

Kart numarası. Minimum Uzunluk: 12 - Maksimum Uzunluk: 19 karakter.

*
cardExpireMonth

Kart son kullanma tarihi ay parametresi Uzunluk: 2 karakter. Örnek; 05,11, vb.

*
cardExpireYear

Kart son kullanma tarihi yıl parametresi. Uzunluk: 2 karakter. Örnek; 14,19, vb.

*
cardCvc

Kartın arkasındaki güvenlik kodu: Uzunluk: MasterCard ve Visa kartları için 3 karakter, Amex kartlar için 3 veya 4 karakter.

*
userId

Mağaza kullanıcısını referans eden bilgi.
Maksimum uzunluk 255 karakter. Cüzdan servisleri ile daha önceden kaydedilmiş olan kayıtlı kart ile tek tıkla ödeme işlemi gerçekleştirilmek istendiğinde gönderilmelidir.

*
cardId

Mağaza kullanıcısının kartını referans eden kart kaydetme işlemi sonucunda oluşan id bilgisi.
Cüzdan servisleri ile daha önceden kaydedilmiş olan kayıtlı kart ile tek tıkla ödeme işlemi gerçekleştirilmek istendiğinde gönderilmelidir

*
installment

Taksit Sayısı.
Taksit sayısı en fazla 12 olacak şekilde (1-12) arası değerler girilmelidir. Bu alan boş bırakıldığı durumda ödemeler tek çekim olacak şekilde geçecektir.

Hayır
amount

Karttan çekilecek olan toplam sipariş tutarı.
Sipariş tutarı kuruş ayracı olmadan gönderilmelidir. Örneğin; 1 TL 100, 12 1200, 130 13000, 1.05 105, 1.2 120 olarak gönderilmelidir.

Evet
echo

Mağazaya istek sonucunda geri gönderilecek bilgi alanıdır.
Maksimum Uzunluk: 255.

Hayır
successUrl

İşlemin başarılı olarak sonuçlanması durumunda alıcının yönlendirileceği adres.
Maksimum Uzunluk: 500. Önemli Not: Url bilgisi http:// veya https:// ile başlamalıdır.

Evet
failureUrl İşlemin hatalı olarak sonuçlanması durumunda alıcının yönlendirileceği adres.
Maksimum Uzunluk: 500. Önemli Not 1: Url bilgisi http:// veya https:// ile başlamalıdır.
Önemli Not 2: Failure url bilgisi hatalı ise dönülecek adres belirlenemediğinden mağazaya dönüş gerçekleşemeyecek ve boş sayfa açılacaktır.
Bu durumda göndermiş olduğunuz url bilgisini kontrol etmenizi rica ederiz.
Evet
transactionDate İstek zamanı bilgisi. “yyyy-MM-dd HH:mm:ss“ formatındadır.
İşlem zaman aşımına uğramış ise istek reddedilir. Örnek: “2014-08-12 23:59:59”
Evet
version Entegrasyon versiyon bilgisidir. “1.0” olarak gönderilmelidir. Evet
deviceUUID Hayır
token

“publicKey:hash” bilgisidir.
Hash bilgisi; "privateKey + orderId + amount + mode + (*)cardOwnerName + (*)cardNumber + (*)cardExpireMonth +
(*)cardExpireYear + (*)cardCvc + (*)userId + (*)cardId + purchaser.name + purchaser.surname + purchaser.email +
transactionDate" alanlarını birbirlerine, verilen sıra ile ekleyerek, SHA1 kriptografik hash fonksiyonun base64 methodu ile encode edilmesi sonucunda oluşur.
token = public key + ‘:’ + base64[ sha1[("privateKey + orderId + amount + mode + (*)cardOwnerName + (*)cardNumber + (*)cardExpireMonth + (*)cardExpireYear +
(*)cardCvc + (*)userId + (*)cardId + purchaser.name + purchaser.surname + purchaser.email + transactionDate")]] token = “ASKJH98675ASDASDPO:jhsa/gd+89dfg0df6SA/dfg8967==”

Evet
language

‘’tr-TR” veya “en-US” olarak gönderilmelidir.

Evet
vendorId

iPara tarafından sağlanan altyapı sağlayıcı id bilgisi.
Mağaza kendi yazılımını kullanıyor ise bu alan gönderilmemelidir.

Hayır
purchaser

Müşteri Bilgileri. Aşağıdaki tabloda iç parametreleri anlatılmıştır.

Evet
products

Ürün Bilgileri. Aşağıdaki tabloda iç parametreleri anlatılmıştır.

Evet

Purchaser Parametreleri

Servis içinde ileticek Girdi (Input) Parametreleri
Parametre Adı Açıklama Zorunluluk
name

Müşteri isim bilgisi.
Minimum Uzunluk: 3 -
Maksimum Uzunluk: 50.

Evet
surname

Müşteri soyisim bilgisi.
Minimum Uzunluk: 3 -
Maksimum Uzunluk: 50.

Evet
email

Müşteri e-posta bilgisi.
E-posta adresi geçerli bir e-posta adresi olmalıdır.
Minimum Uzunluk: 3 - Maksimum Uzunluk: 100.

Evet
clientIp

Müşteri istemci IP adresi

Evet
birthDate

Müşteri doğum tarihi bilgisi. “yyyy-MM-dd” formatında olmalıdır.

Hayır
gsmNumber

Müşteri cep telefonu bilgisi.

Hayır
tcCertificate

Müşteri T.C. Kimlik Numarası bilgisi. 11 haneli olmalıdır.

Hayır
invoiceAddress

Fatura adresi bilgileri. Aşağıdaki tabloda iç parametreleri anlatılmıştır

Hayır
shippingAddress

Kargo adresi bilgileri.
Aşağıdaki tabloda iç parametreleri anlatılmıştır.

Hayır

Products Parametreleri

Servis içinde ileticek Girdi (Input) Parametreleri
Parametre Adı Açıklama Zorunluluk
productCode

Ürün kodu bilgisi. Maksimum Uzunluk: 20.

Evet
productName

Ürün isim bilgisi. Maksimum Uzunluk: 100.

Evet
quantity

Ürün adet bilgisi.

Evet
price

Ürün birim fiyat bilgisi.

Evet

Invoice Address Parametreleri

Servis içinde ileticek Girdi (Input) Parametreleri
Parametre Adı Açıklama Zorunluluk
name

İsim bilgisi.
Maksimum Uzunluk: 100.

Hayır
surname

Soyisim bilgisi.
Maksimum Uzunluk: 100.

Hayır
address

Adres bilgisi.
Maksimum Uzunluk: 255.

Hayır
zipcode

Posta kodu bilgisi.
Maksimum Uzunluk: 10.

Hayır
city

Şehir bilgisi.
Maksimum Uzunluk: 50.

Hayır
country

Ülke bilgisi.
ISO 3166-1 alpha-2 standardındaki ülke kodu. Türkiye için “TR”.

Hayır
tcCertificate

T.C. Kimlik numarası bilgisi

Hayır
taxNumber

Vergi numarası bilgisi

Hayır
taxOffice

Vergi dairesi bilgisi Maksimum Uzunluk: 100

Hayır
companyName

Şirket ismi bilgisi Maksimum Uzunluk: 100.

Hayır
phoneNumber

Telefon bilgisi

Hayır

Shipping Address Parametreleri

Servis içinde ileticek Girdi (Input) Parametreleri
Parametre Adı Açıklama Zorunluluk
name

İsim bilgisi.
Maksimum Uzunluk: 100.

Hayır
surname

Soyisim bilgisi.
Maksimum Uzunluk: 100.

Hayır
address

Adres bilgisi.
Maksimum Uzunluk: 255.

Hayır
zipcode

Posta kodu bilgisi.
Maksimum Uzunluk: 10.

Hayır
city

Şehir bilgisi.
Maksimum Uzunluk: 50.

Hayır
country

Ülke bilgisi.
ISO 3166-1 alpha-2 standardındaki ülke kodu. Türkiye için “TR”.

Hayır
phoneNumber

Telefon bilgisi

Hayır

Servis Çıktı Parametreleri

Parametre Adı Açıklama
result

İşlem sonucu
1 - İşlem Başarılı
0 - İşlem Başarısız

errorMessage Hata Mesajı
errorCode Hata kodu.
publicKey Mağaza açık anahtar bilgisi.
echo Mağazanın istek bilgisinde iletmiş olduğu echo verisi.
transactionDate Hash hesaplamasında kullanılacak zaman bilgisi. “yyyy-MM-dd HH:mm:ss“ formatındadır.
mode

İstek modu.
“P” - Gerçek Ödeme “T” – Test Ödemesi

orderId

Mağaza sipariş Id

amount

Sipariş toplam tutar bilgisi.

Örnek Çağrılar


                    private static final String PUBLIC_KEY_20 = "publick_key"; 
                    private static final String PRIVATE_KEY_20 = "private_key";
                    private static final String DATE_FORMAT = "yyyy-MM-dd HH:mm:ss";
                    private static final String SIMPLE_DATE_FORMAT = "yyyy-MM-dd";
                    private static final String REQUEST_URL = "https://api.ipara.com/rest/payment/threed"; 
                    private ThreeDPaymentDTO paymentDTO;
                    
                    public void threeDPaymentTest(HttpServletResponse response) throws Exception { 
                    paymentDTO = createThreeDPaymentModel(); String htmlForm = createForm();
                    response.getWriter().println(htmlForm); 
                    }
                    
                    private ThreeDPaymentDTO createThreeDPaymentModel() throws Exception { 
                    ThreeDPaymentDTO dto = new ThreeDPaymentDTO();
                    dto.setOrderId(UUID.randomUUID().toString()); 
                    dto.setAmount("100");
                    dto.setCardOwnerName("Jack connor"); 
                    dto.setCardNumber("4282209004348015");
                    dto.setCardExpireMonth("07");
                    dto.setCardExpireYear("20");
                    dto.setCardCvc("123");
                    dto.setInstallment("1");
                    dto.setLanguage("tr-TR"); 
                    dto.setMode("P");
                    dto.setPurchaser(createPurchaser()); 
                    dto.setSuccessUrl("http://localhost:8082/rest/payment/threed/test/result");
                    dto.setFailureUrl("http://localhost:8082/rest/payment/threed/test/result"); 
                    dto.setEcho("Payment Test"); dto.setVersion("1.0"); 
                    dto.setTransactionDate(getTransactionDate()); 
                    dto.setUserId(""); dto.setCardId(""); 
                    dto.setVendorId("10100"); 
                    dto.setToken(createToken(dto));
                    dto.setProducts(createProduct());
                    return dto; 
                    } 

                    private PurchaserDTO createPurchaser() {
                    PurchaserDTO purchaser = new PurchaserDTO();
                    purchaser.setName("Jack"); 
                    purchaser.setSurname("Connor"); 
                    purchaser.setEmail("jack.connor@gmail.com");
                    purchaser.setBirthDate(getBirthDate()); 
                    purchaser.setGsmNumber("05320343434"); 
                    purchaser.setClientIp("192.168.0.54");
                    purchaser.setTcCertificate("99999999999");
                    purchaser.setInvoiceAddress(createInvoiceAddress()); 
                    purchaser.setShippingAddress(createShippingAddress()); 
                    return purchaser; 
                    } 
                    
                    private InvoiceAddressDTO createInvoiceAddress() { 
                    InvoiceAddressDTO dto = new InvoiceAddressDTO(); 
                    dto.setName("Jack"); dto.setSurname("Connor"); 
                    dto.setAddress("Kaliforniya"); 
                    dto.setZipcode("00001"); 
                    dto.setCity("Los Angeles"); 
                    dto.setCountry("ADB");
                    dto.setTcCertificate("99999999999"); 
                    dto.setTaxNumber("9999999999"); 
                    dto.setTaxOffice("Los Angeles");
                    dto.setCompanyName("Multinet UP");
                    dto.setPhoneNumber("05340343434"); 
                    return dto;
                    }

                    private ShippingAddressDTO createShippingAddress() { 
                    ShippingAddressDTO dto = new ShippingAddressDTO();
                    dto.setName("Jack"); 
                    dto.setSurname("Connor"); 
                    dto.setAddress("Kaliforniya"); 
                    dto.setZipcode("00001"); 
                    dto.setCity("Los Angeles");
                    dto.setCountry("ABD"); 
                    dto.setPhoneNumber("05340343434");
                    return dto; 
                    } 
                    private List createProduct() {
                    List products = new ArrayList<>();
                    ProductDTO p = new ProductDTO(); 
                    p.setPrice("100");
                    p.setProductCode("1");
                    p.setProductName("test");
                    p.setQuantity("1"); 
                    products.add(p); 
                    return products; 
                    }

                    private String getTransactionDate() {
                    return new SimpleDateFormat(DATE_FORMAT).format(new Date());
                    } 

                    private String createToken(ThreeDPaymentDTO threeDPayment) throws Exception { 
                    String hash = PRIVATE_KEY_20 +
                    threeDPayment.getOrderId() + 
                    threeDPayment.getAmount() + 
                    threeDPayment.getMode() + 
                    threeDPayment.getCardOwnerName() +
                    threeDPayment.getCardNumber() +
                    threeDPayment.getCardExpireMonth() +
                    threeDPayment.getCardExpireYear() +
                    threeDPayment.getCardCvc() +
                    threeDPayment.getUserId() + 
                    threeDPayment.getCardId() + 
                    threeDPayment.getPurchaser().getName() + 
                    threeDPayment.getPurchaser().getSurname() + 
                    threeDPayment.getPurchaser().getEmail() +
                    threeDPayment.getTransactionDate();
                    hash = getSHA1Text(hash); 
                    return PUBLIC_KEY_20 + ":" + hash; 
                    } 
                    
                    private String getSHA1Text(String hash) throws Exception {
                    MessageDigest sha1 = MessageDigest.getInstance("SHA-1");
                    return (new BASE64Encoder()).encode(sha1.digest(hash.getBytes("UTF-8")));
                    }
                    
                    private String createForm() {
                    Gson gson = new Gson(); 
                    String jsonString = gson.toJson(paymentDTO);
                    
                    String form = " 
            
                    return form; 
                    }
                    
 
                { 
                    "mode":"T",
                    "orderId":"10129653-7c46-44a1-911b-9e8bc5d937a4",
                    "cardOwnerName":"Ferhat Bedir",
                    "cardNumber":"4282209004348015",
                    "cardExpireMonth":"07", 
                    "cardExpireYear":"20",
                    "cardCvc":"664", 
                    "userId":"",
                    "cardId":"",
                    "installment":"1",
                    "amount":"100",
                    "echo":"Payment Test", 
                    "successUrl":"http://localhost:8082/rest/payment/threed/test/result",
                    "failureUrl":"http://localhost:8082/rest/payment/threed/test/result", 
                    "transactionDate":"2020-04-29 15:48:09",
                    "version":"1.0",
                    "deviceUUID":"android-20013fea6bcc820c", 
                    "token":"EILSMVQZJY2XY7R:w4m7j5h1XWEEwdatbtZDMFJVYBw\u003d",
                    "language":"tr-TR",
                    "vendorId":"10100",
                    "purchaser":{
                    "name":"Jack",
                    "surname":"Connor",
                    "email":"jack.connor@gmail.com",
                    "clientIp":"192.168.0.54",
                    "birthDate":"2020-04-29",
                    "gsmNumber":"05320343434",
                    "tcCertificate":"99999999999",
                    "invoiceAddress":{
                    "name":"Jack",
                    "surname":"Connor",
                    "address":"Kaliforniya",
                    "zipcode":"00001", 
                    "city":"Los Angeles",
                    "country":"ADB",
                    "tcCertificate":"99999999999",
                    "taxNumber":"9999999999",
                    "taxOffice":"Los Angeles",
                    "companyName":"Multinet UP",
                    "phoneNumber":"05340343434" }, 
                    "shippingAddress":{ 
                    "name":"Jack",
                    "surname":"Connor", 
                    "address":"Kaliforniya", 
                    "zipcode":"00001",
                    "city":"Los Angeles",
                    "country":"ABD",
                    "phoneNumber":"05340343434" 
                    } 
                    },
                    "products":[
                    { 
                    "productCode":"1",
                    "productName":"test",
                    "quantity":"1",
                    "price":"100" 
                    }
                    ]
                }
                

Ödeme Sorgulama

Mağaza, daha önceden yapılan ödeme tahsilat denemelerine istinaden sipariş numarası ile verileri XML formatında hazırlayarak https://api.ipara.com/rest/payment/inquiry web servis adresine gerekli güvenlik bilgilerini http header bilgisine ekleyerek post eder. iPara işlem sonucunu yine XML formatında mağazaya döner. Bu servise sorgulanmak istenen ödemenin mağaza sipariş numarası ve mode değeri iletilerek, ödemenin durumu ve ödemenin tutarı öğrenilebilir. Eğer ödeme iade edilmişse veya ödemede kısmı iadeler olmuşsa, iadelerden sonra kalan miktar belirtilir. Mağaza sipariş numarası ve mode değerleri ödeme yapılırken yollanmış değerler olmalıdır. Aksi halde ödeme bulunamadı hatası alınacaktır.

İstek Güvenlik Bilgileri

iPara, güvenlik kontrolleri için, mağazadan bazı bilgileri HTTP Header alanında istemektedir. Aşağıda bu bilgilerin tanımları bulunmaktadır:

HttpHeader Güvenlik Parametreleri
Parametre Adı Açıklama Opsiyonel/Zorunlu
transactionDate

İstek zamanı. “yyyy-MM-dd HH:mm:ss“ formatındadır. İşlem zaman aşımına uğramış ise istek reddedilir. Örnek: “2014-08-12 23:59:59” İlgili kütüphane içindeki GetTransactionDate() fonksiyonundan elde edilebilir.

Zorunlu
version

Entegrasyon versiyon bilgisidir. “1.0” olarak gönderilmelidir.

Zorunlu
token

“publicKey:hash” bilgisidir. Hash bilgisi; "privateKey + orderId + mode + transactionDate" alanlarını birbirlerine, verilen sıra ile ekleyerek, SHA1 kriptografik hash fonksiyonun base64 methodu ile encode edilmesi sonucunda oluşur. Hash oluşturma fonksiyonu örnekleri burada anlatılmıştır.
token = public key + ‘:’ + base64[ sha1[("privateKey + orderId + mode + transactionDate")]]
token = “ASKJH98675ASDASDPO:jhsa/gd+89dfg0df6SA/dfg8967==”

Zorunlu

Servis Girdi Parametreleri

Servis içinde ileticek Girdi (Input) Parametreleri
Parametre Adı Açıklama Opsiyonel/Zorunlu
mode

İstek modu. “P” veya “T” gönderilmelidir.
“P” - Gerçek Ödeme
“T” – Test Ödemesi
Entegrasyon işlemlerinizde mode alanını “T” olarak göndererek test işlemlerinizi gerçekleştirebilirsiniz.
ÖNEMLİ NOT: Test modunda iken ödemeler banka poslarından tahsil edilmez. Test işlemleriniz sonunda gerçek ödeme tahsilatı için mode alanını “P” olarak göndermeyi unutmayınız.

Zorunlu
orderId

Mağazanın ilgili sipariş ile ilişkilendirdiği her bir istek için benzersiz olan tekil sipariş kodu. Maksimum Uzunluk: 100 karakter.

Zorunlu
echo

Mağazaya istek sonucunda geri gönderilecek bilgi alanıdır. Maksimum Uzunluk: 255.

Opsiyonel

Servis Çıktı Parametreleri

Servis Çıktı (Output) Parametreleri
Parametre Adı Açıklama
result

Ödeme durumunu belirten sonuç bilgisi.
0 – Entegrasyon Hatası
1 – Ödeme başarılı
2 – Ödeme iade edilmiş
3 – Ödeme reddedilmiş
4 – Ödeme bulunamadı
6 – Parçalı iade talebinde bulunulmuş ancak iPara tarafından manuel iade yapılması gerekiyor.
7 – İade talebinde bulunulmuş ancak iPara tarafından manuel iade yapılması gerekiyor.
8 – İade talebinde bulunulmuş ancak Mağaza’dan geri para transferi yapılması gerekiyor.
9 – Parçalı iade talebinde bulunulmuş ancak Mağaza’dan geri para transferi yapılması gerekiyor.

responseMessage Ödeme durumunu belirten mesajdır
APPROVED – Ödeme başarılı
REFUNDED – Ödeme iade edilmiş
DECLINED – Ödeme rededilmiş
NOT_FOUND – Ödeme bulunamadı
APPROVED_BUT_WAITING_MANUAL_PARTIAL_REFUND - Parçalı iade talebinde bulunulmuş ancak iPara tarafından manuel iade yapılması gerekiyor.
APPROVED_BUT_WAITING_MANUAL_REFUND – İade talebinde bulunulmuş ancak iPara tarafından manuel iade yapılması gerekiyor.
APPROVED_BUT_WAITING_MONEY_TRANSFER_FOR_REFUND – İade talebinde bulunulmuş ancak Mağaza’dan geri para transferi yapılması gerekiyor.
APPROVED_BUT_WAITING_MONEY_TRANSFER_FOR_PARTIAL_REFUND – Parçalı iade talebinde bulunulmuş ancak Mağaza’dan geri para transferi yapılması gerekiyor.
errorMessage Hata Mesajı
errorCode Hata Kodu
publicKey Mağaza açık anahtar bilgisi.
echo Mağazanın istek bilgisinde iletmiş olduğu echo verisi.
transactionDate Hash hesaplamasında kullanılacak zaman bilgisi. “yyyy-MM-dd HH:mm:ss“ formatındadır.
mode

İstek modu.
“P” - Gerçek Ödeme
“T” – Test Ödemesi

orderId Mağaza sipariş Id
amount Ödemenin kalan miktarı.
Kuruş değerinde yollanacaktır.
Örneğin; 1 TL için 100, 12 TL için 1200, 1.05 TL için 105, 1.2 TL için 120 olarak gönderilecektir.
Eğer ödemenin tamamı iade edilmişse “000” değeri dönecektir.
hash “orderId + result + amount + mode + errorCode + errorMessage + transactionDate + publicKey + privateKey” alanlarını birbirlerine, verilen sıra ile ekleyerek, SHA1 kriptografik hash fonksiyonun base64 methodu ile encode edilmesi sonucunda bu değer oluşur.
Not 1: İşlem sonucunda sizlere gönderilen hash bilgisini tarafınıza gelen parametreler ile tekrar hesaplayıp bu alandaki bilgi ile karşılaştırılması gerekmektedir. Eğer aynı hash değeri oluşmuyor ise işlemi reddetmelisiniz. Aksi durumda cevap bilgisi iletiminde üçüncü kişilerin araya girerek sahtekarlık yapabilme olasılığı ortaya çıkacaktır.
Not 2: Hash bilgisi hesaplamasında null olan veriler, String “” olarak hesaplanmıştır.
Not 3: İstek bilgileri içerisinde mağazanın tanımamasından kaynaklı olarak mağaza bilgileri yoksa cevap bilgisinde hash ve transactionDate alanları gönderilmeyecektir.

Örnek Çağrılar


            //Request
            PaymentInquiryRequest request = new PaymentInquiryRequest();
            request.orderId = orderId;
            request.Echo= "Echo";
            request.Mode = settings.Mode;
            PaymentInquiryResponse response = PaymentInquiryRequest.Execute(request, settings);
             

//Request
            PaymentInquiryRequest request = new PaymentInquiryRequest();
            request.orderId = orderId;
            request.echo="Echo";
            request.mode = settings.Mode;          
            PaymentInquiryResponse response = PaymentInquiryRequest.Execute(request, settings);

//request
$request = new PaymentInquiryRequest();
$request->orderId = orderId;
$request->Echo= "Echo";
$request->Mode = settings.Mode;
$response=PaymentInquiryRequest::execute($request,$settings);   

//Request
ipara.PaymentInquiryRequest(orderId).then(requestResult => {
    parseString(requestResult, (err, result) => {
    if (err) throw new Error(err);
    res.json(result)
    })
    }).catch(err => {
    console.log(err)
})


//request
      req=Paymentinquiryrequest.new
      req.orderId =  params[:orderId]
      @returnData= req.execute(req,@settings)


    //Request
    req = PaymentInquiryRequest()
    req.orderId = request.POST.get('orderId')
    message = req.execute(req, config)
 
            
 //Request
            <?xml version="1.0" encoding="UTF-8" ?>































































































































































































































































































































































































































































































































            <inquiry>
            <orderId>b3091d88-6320-4446-be6c-7a1f8e6e73c7</orderId>
            <echo>Echo Bilgisi</echo>
            <mode>T</mode>
            </inquiry>
            
 //Response
            <?xml version="1.0" encoding="UTF-8" standalone="yes" ?>































































































































































































































































































































































































































































































































            <inquiryResponse>
            <responseMessage>REFUNDED</responseMessage>
            <amount>2500</amount>
            <echo>Echo Bilgisi</echo>
            <hash>yO5ACnF9FpsiV2/WBRRsDEBDRt8=</hash>
            <mode>T</mode>
            <orderId>b3091d88-6320-4446-be6c-7a1f8e6e73c7</orderId>
            <publicKey>ABVQ03C77WPTODQN</publicKey>
            <result>2</result>
            <transactionDate>2014-01-03 21:08:51</transactionDate>
                </inquiryResponse>
                

Ödeme Sorgulama (Tarih Aralığı Parametreli)

Mağaza, daha önceden yapılan ödeme tahsilat denemelerine istinaden, sorgulamak istediği ödeme tarih aralığı ile verileri JSON formatında hazırlayarak https://api.ipara.com/rest/payment/search web servis adresine gerekli güvenlik bilgilerini http header bilgisine ekleyerek post eder.

iPara işlem sonucunu yine JSON formatında mağazaya döner. Bu servise sorgulanmak istenen ödemeler için başlangıç ve bitiş tarih aralığı ,mode değeri ve echo bilgisi iletilerek, girilen tarih aralığında bulunan ödemelerin durumu ve ödemenin tutarı öğrenilebilir. Eğer ödeme iade edilmişse veya ödemede kısmı iadeler olmuşsa, iadelerden sonra kalan miktar belirtilir.

Para Tarih Aralığına Göre Ödeme Sorgulama Servisi Rest bir servis olup JSON medya tipinde istekleri kabul etmektedir. Girilen tarih aralığı 30 gün ile sınırlıdır.


İstek Güvenlik Bilgileri

iPara, güvenlik kontrolleri için, mağazadan bazı bilgileri HTTP Header alanında istemektedir. Aşağıda bu bilgilerin tanımları bulunmaktadır:

HttpHeader Güvenlik Parametreleri
Parametre Adı Açıklama Opsiyonel/Zorunlu
transactionDate

İstek zamanı. “yyyy-MM-dd HH:mm:ss“ formatındadır.
İşlem zaman aşımına uğramış ise istek reddedilir.
Örnek: “2014-08-12 23:59:59” İlgili kütüphane içindeki GetTransactionDate() fonksiyonundan elde edilebilir.

Zorunlu
version

Entegrasyon versiyon bilgisidir. “1.0” olarak gönderilmelidir.

Zorunlu
token

“publicKey:hash” bilgisidir.
Hash bilgisi; "privateKey + mode + transactionDate" alanlarını birbirlerine, verilen sıra ile ekleyerek, SHA1 kriptografik hash fonksiyonun base64 methodu ile encode edilmesi sonucunda oluşur.
Hash oluşturma fonksiyonu örnekleri burada anlatılmıştır.
token = public key + ‘:’ + base64[ sha1[("privateKey +mode + transactionDate")]] token = “EILSMVQZJY2XY7R:/44epRm434pkjbDUUmoPnIGwCLk=”

Zorunlu

Servis Girdi Parametreleri

Servis içinde ileticek Girdi (Input) Parametreleri
Parametre Adı Açıklama Opsiyonel/Zorunlu
mode

İstek modu. “P” veya “T” gönderilmelidir.
“P” - Gerçek Ödeme
“T” – Test Ödemesi
Entegrasyon işlemlerinizde mode alanını “T” olarak göndererek test işlemlerinizi gerçekleştirebilirsiniz.
ÖNEMLİ NOT: Test modunda iken ödemeler banka poslarından tahsil edilmez.
Test işlemleriniz sonunda gerçek ödeme tahsilatı için mode alanını “P” olarak göndermeyi unutmayınız.

Zorunlu
startDate

Sorgulanmak istenilen siparişler için tarih aralığının başlangıç değeri Örnek “2020-06-01 23:59:59”

Zorunlu
endDate

Sorgulanmak istenilen siparişler için tarih aralığının bitiş değeri Örnek “2020-06-30 23:59:59”

Zorunlu
echo

Mağazaya istek sonucunda geri gönderilecek bilgi alanıdır. Maksimum Uzunluk: 255.

Opsiyonel

Servis Çıktı Parametreleri

Servis Çıktı (Output) Parametreleri
Parametre Adı Açıklama
result

İşlem sonucu
1 - İşlem Başarılı
0 - İşlem Başarısız

errorMessage Hata Mesajı
errorCode Hata Kodu
payments Tarih aralığında bulunan tüm ödemelerin bilgileri
totalPayments Tarih aralığında bulunan toplam ödeme sayısı
responseMessage İşlem sonucunu bildiren mesajdır.

Örnek Çıktılar



    {
    "payments": [
    {
    "result": "3",
    "responseMessage": "DECLINED",
    "orderId": "ac28cc56-1e23-4676-9c51-77a886673705",
    "amount": "0",
    "finalAmount": "100",
    "transactionDate": "2020-06-08 10:31:38.0"
    },
    {
    "result": "3",
    "responseMessage": "DECLINED",
    "orderId": "3bf23cc5-856b-4ff3-a88d-56647afe31a3",
    "amount": "0",
    "finalAmount": "100",
    "transactionDate": "2020-06-08 10:26:29.0"
    },
    {
    "result": "1",
    "responseMessage": "APPROVED",
    "orderId": "f0eeae53-bd54-4fe4-9c12-c3f6528aa012",
    "amount": "100",
    "finalAmount": "100",
    "transactionDate": "2020-06-08 10:07:52.0"
    },
    {
    "result": "1",
    "responseMessage": "APPROVED",
    "orderId": "6ec36eb0-5115-446f-a3de-25b0748b49b6",
    "amount": "100",
    "finalAmount": "100",
    "transactionDate": "2020-06-08 10:00:59.0"
    },
    {
    "result": "1",
    "responseMessage": "APPROVED",
    "orderId": "7dec7580-0125-41ea-99ab-c8760da856bb",
    "amount": "100",
    "finalAmount": "000",
    "transactionDate": "2020-06-04 16:48:17.0"
    },
    {
    "result": "1",
    "responseMessage": "APPROVED",
    "orderId": "c7fcfec8-15ff-4cd8-af26-3c9e772d149f",
    "amount": "100",
    "finalAmount": "100",
    "transactionDate": "2020-06-03 16:40:42.0"
    }
    ],
    "totalPayments": 6,
    "result": "1",
    "responseMessage": "SUCCESS"
    }

Link Gönderim Servisi

Kurumunuza ait kayıtlı mağazanın link ile ödeme talebini iletmesi doğrultusunda, istek içinde belirtilen mağaza müşterisine ait e-posta adresine ödeme linkinin iletilmesini sağlayan servistir.

Link gönderimi gerçekleştirilmek istendiğinde gerekli istek bilgilerini JSON formatında hazırlayarak, https://api.ipara.com/corporate/merchant/linkpayment/create adresine gerekli güvenlik bilgilerini http header bilgisine ekleyerek post eder. iPara işlem sonucunu yine JSON formatında mağazaya döner.


Servis Girdi Parametreleri

Servis içinde ileticek Girdi (Input) Parametreleri
Parametre Adı Açıklama Opsiyonel/Zorunlu
clientIp

İstekte bulunan kullanıcının IP adresi

Zorunlu
name

Müşteri isim bilgisi 2 ila 50 arasında Türkçe karakterlerden oluşmalıdır. Boşluk karakteri kabul edilir.

Zorunlu
surname

Müşteri soyisim bilgisi 2 ila 50 arasında Türkçe karakterlerden oluşmalıdır. Boşluk karakteri kabul edilir.

Zorunlu
tcCertificate

Müşteri T.C. kimlik numarası bilgisi Müşteriye ait 11 rakamdan oluşan T.C. Kimlik No

Opsiyonel
taxNumber

Müşteri vergi numarası bilgisi Müşteriye ait 10 rakamdan oluşan T.C. Vergi Numarası

Opsiyonel
email

Müşterinin ödeme linkini alacağı e-posta adresi

Zorunlu
gsm

Müşteriye ait cep telefonu numarası bilgisi. 10 hane olarak gönderilmelidir. Örn; 5881231212

Zorunlu
gsm

Müşteriye ait cep telefonu numarası bilgisi. 10 hane olarak gönderilmelidir. Örn; 5881231212

Zorunlu
amount

Müşteriden tahsil edilecek olan tutar bilgisi Tutar kuruş ayracı olmadan gönderilmelidir. Örneğin; 1 TL 100, 12 1200, 130 13000, 1.05 105, 1.2 120 olarak gönderilmelidir.

Zorunlu
threeD

3D Secure ile gerçekleştirilen ödeme işlemlerinde “true” olarak gönderilmelidir.

Zorunlu
expireDate

Link geçerlilik süresidir. “yyyy-MM-dd HH:mm:ss” formatında olmalıdır.

Zorunlu
expireDate

Link geçerlilik süresidir. “yyyy-MM-dd HH:mm:ss” formatında olmalıdır.

Zorunlu
installmentList

Ödemenin geçebileceği taksitlerin listesidir. Örnek: 2,3,4,5,9 şeklinde olmalıdır. Bu listenin boş veya hiç gönderilmediği durumlarda işlem peşin olarak kabul edilir.

Opsiyonel
sendEmail

Kullanıcıya email gönderilmesi isteniyor ise bu alan “true” istenmiyor ise “false” gönderilmelidir.

mode

Oluşturulmak istenen linkin mod bilgisi. “P” veya “T” gönderilmelidir.
“P” - Gerçek Linki
“T” – Test Linki

Zorunlu
commissionType

İpara komisyonunun Alıcıya veya Satıcıya yansıtılması.
“1” veya “2” gönderilmelidir.
Bu parametrenin gönderilmemesi veya boş gönderilmesi durumlarında komisyon satıcıdan tahsil edilir.
“1” – Satıcı
“2” – Alıcı

Opsiyonel

İstek Güvenlik Bilgileri

iPara, güvenlik kontrolleri için, mağazadan bazı bilgileri request header bilgisinde istemektedir. Aşağıda bu bilgilerin tanımları bulunmaktadır.

Parametre Adı Açıklama Opsiyonel/Zorunlu
transactionDate

İstek zamanı. “yyyy-MM-dd HH:mm:ss“ formatındadır. İşlem zaman aşımına uğramış ise istek reddedilir. Örnek: “2014-08-12 23:59:59”

Zorunlu
version

Entegrasyon versiyon bilgisidir. “1.0” olarak gönderilmelidir

Zorunlu
token

“publicKey:hash” bilgisidir. Hash bilgisi;" privateKey + name + surname + email + amount + clientIp + transactionDate " alanlarını birbirlerine, verilen sıra ile ekleyerek, SHA1 kriptografik hash fonksiyonunun base64 methodu ile encode edilmesi sonucunda oluşur. Hash oluşturma fonksiyonu örnekleri 2 no’lu başlıkta anlatılmıştır. Örnek : token =public key + ‘:’ + base64[ sha1[("privateKey + name + surname + email + amount + clientIp + transactionDate ")]] Veri Örneği: token = “ASKJH98675ASDASDPO:jhsa/gd+89dfg0df6SA/dfg8967==”

Zorunlu
sessionToken

Login servisini kullanıp alınan sessiontoken’ı header bilgisinde gönderilmelidir.

Zorunlu

Servis Çıktı Parametreleri

Servis Çıktı (Output) Parametreleri
Parametre Adı Açıklama
result

İşlem sonucu
1 - İşlem Başarılı
0 - İşlem Başarısız

errorCode Hata kodu.
errorMessage Teknik hata mesajı.
responseMessage Kullanıcıya gösterilecek hata veya başarılı sonuç mesajı. Başarılı entegrasyon sonrası hata mesajlarının kullanıcıya direkt gösterilmesini öneririz.
link İşlem başarılı sonuçlandığında oluşan url bilgisi.
linkPaymentId Ödeme Linkinin şifreli ID bilgisi. Bu bilgi link silme servisinde kullanılabilmektedir.
amount

İstek içinde alından tutar bilgisinin biçimlendirilmiş hali.
Tutar kuruş ayracı olmadan gönderilecektir.
Örneğin; 1 TL 100, 12 1200, 130 13000, 1.05 105, 1.2 120 olarak gönderilecektir.


Hata Kodları

Hata Kodu Açıklama
800

İstek boş.

801 Token bilgisi boş.
802 Token bilgisi hatalı.
803 Açık anahtar boş.
804 Hash bilgisi boş.
805 Entegrasyon versiyon bilgisi boş.
806

Versiyon desteklenmiyor.

807

İstek zaman bilgisi boş.

808

İstek zamanı header bilgisi hatalı.

809

İstek zamanı ile server zamanı uyuşmuyor. Lütfen tekrar deneyiniz.

810

Mağaza açık anahtarı yanlış.

811

Mağaza yayında değil.

816

Lütfen tutar belirtiniz

817

Girmiş olduğunuz tutar bilgisi hatalıdır. Lütfen tekrar deneyiniz.

818

ThreeD alanı boş olamaz.

819

ThreeD alanı hatalı.

882

Göndermiş olduğunuz token doğru değil.

845

Lütfen adınızı giriniz.

846

Ad alanı 2 karakterden küçük, 50 karakterden büyük olamaz.

847

Lütfen soyadınızı giriniz.

848

Soyad alanı 2 karakterden küçük, 50 karakterden büyük olamaz.

872

Lütfen T.C kimlik numarasını 11 hane olacak şekilde giriniz.

993

Lütfen e-posta alanı giriniz.

994

Lütfen geçerli bir e-posta giriniz.

995

Lütfen geçerli bir komisyon tipi giriniz.

846

Ad alanı 2 karakterden küçük, 50 karakterden büyük olamaz.

3017

Lütfen vergi numarası giriniz.

3018

Lütfen geçerli bir vergi numarası giriniz.

3055

Bitiş tarihi zorunlu alandır

3056

Geçerli bir bitiş tarihi giriniz

3094

Lütfen cep telefon numarası giriniz.

3095

Lütfen cep telefon numarasını başında sıfır olmadan 10 hane olarak giriniz.

3096

Girilen cep telefonu kara listede olduğu için isteğiniz reddedilmiştir. Daha fazla bilgi için destek@ipara.com üzerinden iletişime geçiniz.

3097

Lütfen e-posta adresini giriniz.

3098

Lütfen geçerli bir e-posta adresi giriniz.

4002

Lütfen açıklama metnini boşluklar dahil 480 karakter ve altında olacak şekilde yazınız.

4011

TC Kimlik numarası ya da vergi numarası zorunlu alandır.

4030

Ödeme miktarı 100.000 TL'yi geçemez.

1000

İşleminiz gerçekleştirilirken beklenmedik bir hata oluştu. Lütfen daha sonra tekrar deneyiniz.

Test İşlemleri

Örnek İstek Verisi
{

"clientIp": "127.0.0.1",

"amount": "15075",

"email": " murat@domain.com",

"gsm": "5881231212",

"name": "Murat",

"surname": "Kaya",

"taxNumber": "12342323411",

"threeD": "true",

"expireDate": "2019-07-30",

"sendEmail": "true"

"installmentList": [2,3,4]

}

                 

Örnek Cevap Verisi
Başarılı İşlem Cevap Verisi
{

"responseMessage": "Ödeme linki başarı ile gönderilmiştir.",

"result": "1",

"amount": "150,75 "

"link": "https://link/Xdfgdf",

"linkPaymentId": "832jdasfsdfdsoıfas==",

}

Başarısız İşlem Cevap Verisi
{

"errorCode":"872",

"errorMessage":"T.C. kimlik numarası 11 haneli sayı olmalıdır.",

"responseMessage":"T.C. kimlik numarası 11 haneli sayı olmalıdır.",

"result":"0"

}
                 

Örnek Hash Fonksiyonu



                 public static String prepareToken (String text) throws Exception {
                 MessageDigest sha1 = MessageDigest.getInstance("SHA-1");
                 String hash = (new BASE64Encoder()).encode(sha1.digest(text.getBytes(“UTF-8”))); return hash;
                 
                 }

                 public static string PrepareToken (string SHA1Data) { SHA1 sha = new SHA1CryptoServiceProvider();
                 byte[] hashbytes = System.Text.Encoding.UTF8.GetBytes(SHA1Data);
                 byte[] inputbytes = sha.ComputeHash(hashbytes);
                 return Convert.ToBase64String(inputbytes);
                  }
                 

                function prepareToken($text) {
                $token = base64_encode(sha1($text,true));
                return $token;
                  }
                

Ödeme Bildirim Servisi

Mağazanız üzerinden bir link oluşturulduğunda ilk olarak “Link Gönderildi,Ödeme Bekleniyor” durumundadır. İlgili link üzerinden ödeme işlemi başarı ile tamamlandığında ilgili linkin durumu ödeme “Link ile Ödeme Başarılı” durumuna getirilir.
iPara olarak ödeme yapıldığı anda tarafınıza bir adet ödeme yapıldı maili göndermekteyiz. Dökümanda anlatılan servis ise mail ile yapılan bildirime ek olarak sunulan, yapılan ödemenin özet bilgilerini tarafınıza Http post ile tarafınıza ileten servistir.
Temel çalışması mantığı, belirli dataların önceden mağazaya tanımlanmış olan http post kabul eden bir url’e content-type’ application/x-www-form-urlencoded olan bir json post etmektir.
İlgili post işlemi yalnızca başarılı olarak yapılmış ödeme işlemi sonrasında yapılacaktır bu yüzden tarafınıza post edilmiş tüm işlemleri başarılı olarak kabul etmeniz gerekmektedir.
İlgili servisi kullanarak link ile ödeme sonrası bildirim almak isteniyor ise iPara operasyon ekibi ile iletişime geçilip yukarıda anlatılan akışı destekleyen url bilginizi paylaşmanız gerekmektedir.


Servis Girdi Parametreleri

Servis içinde ileticek Girdi (Input) Parametreleri
Parametre Adı Açıklama
merchantOrderId

iPara tarafından oluşturulmuş, ödemeye ait mağaza sipariş numarası.

amount

Link ile ödeme işleminde yapılan ödeme tutarı Kuruş değerinde yollanacaktır.
Örneğin; 1 TL için 100, 12 TL için 1200, 1.05 TL için 105, 1.2 TL için 120 olarak gönderilecektir.

paymentDate

Ödeme işleminin gerçekleştiği tarih bilgisidir. “yyyy-MM-dd HH:mm:ss“ formatında yollanacaktır.

linkPaymentId

Ödemenin gerçekleştirildiği işleme ait şifreli ID bilgisi

result

Ödeme durumunu belirten sonuç bilgisi. 1 – Ödeme başarılı

Test İşlemleri

Örnek İstek Verisi
{

"merchantOrderId": 109,

"amount": "100",

"paymentDate": "2019-08-19 16:12:54",

"linkPaymentId": " 00204o9HZ.dt17rie-kesmwtA==",

"result": "1",

}
                 

Link Sorgulama

Kurumunuza ait kayıtlı mağazanın link ile ödeme talebini iletmesi doğrultusunda, başarılı oluşan kayıtların sorgulanmasını sağlayan servistir.

Gönderimi gerçekleştirilmiş link bilgileri sorgulanmak istendiğinde gerekli istek bilgilerini JSON formatında hazırlayarak, https://api.ipara.com/corporate/merchant/linkpayment/list adresine gerekli güvenlik bilgilerini http header bilgisine ekleyerek post eder. iPara işlem sonucunu yine JSON formatında mağazaya döner.

Listeleme işleminde sayfalandırma yapılmaktadır. Bu nedenle aşağıda tanımlanan örneklerde bu değerlerin ilk gönderimde varsayılan değerlerle gönderilmesi ve gelen cevaba göre sonraki sorguların yapılması entegrasyon aşamasını kolaylaştıracaktır.


Servis Girdi Parametreleri

Servis içinde ileticek Girdi (Input) Parametreleri
Parametre Adı Açıklama Opsiyonel/Zorunlu
clientIp

İstekte bulunan kullanıcının IP adresi

Zorunlu
email

Müşterinin ödeme linkini alacağı email adresi

Opsiyonel *
gsm

Müşteriye ait cep telefonu bilgisi

Opsiyonel *
linkState

Link durum bilgisi.
0 - Link İsteği Alındı
1 - Link URL’i yaratıldı
2 - Link Gönderildi, Ödeme Bekleniyor
3 - Link ile Ödeme Başarılı
98 - Link Zaman Aşımına Uğradı
99 - Link Silindi

Opsiyonel *
startDate

Link oluşturma alanına ait arama başlangıç tarihi. “yyyy-MM-dd HH:mm:ss” formatındadır.

Opsiyonel *
endDate

Link oluşturma alanına ait arama bitiş tarihi. “yyyy-MM-dd HH:mm:ss” formatındadır.

Opsiyonel *
pageSize

Toplam gösterilebilecek sayfa adedidir. 5 ile 15 değerlerine eşit ya da arasında olmalıdır.

Zorunlu
pageIndex

Gösterilecek sayfa indeksi/numarasıdır. Cevap olarak dönülecek olan “pageCount” bilgisi kullanılarak mümkün diğer sayfa indekslerine ulaşılabilir.

Zorunlu

İstek Güvenlik Bilgileri

iPara, güvenlik kontrolleri için, mağazadan bazı bilgileri request header bilgisinde istemektedir. Aşağıda bu bilgilerin tanımları bulunmaktadır.

Parametre Adı Açıklama Opsiyonel/Zorunlu
transactionDate

İstek zamanı. “yyyy-MM-dd HH:mm:ss“ formatındadır. İşlem zaman aşımına uğramış ise istek reddedilir. Örnek: “2014-08-12 23:59:59”

Zorunlu
version

Entegrasyon versiyon bilgisidir. “1.0” olarak gönderilmelidir

Zorunlu
token

“publicKey:hash” bilgisidir.
Hash bilgisi; "privateKey + clientIp + transactionDate" alanlarını birbirlerine, verilen sıra ile ekleyerek, SHA1 kriptografik hash fonksiyonunun base64 methodu ile encode edilmesi sonucunda oluşur.
Hash oluşturma fonksiyonu örnekleri 2 no’lu başlıkta anlatılmıştır.
Örnek : token =public key + ‘:’ + base64[ sha1[("privateKey + clientIp + transactionDate")]] Veri Örneği: token = “ASKJH98675ASDASDPO:jhsa/gd+89dfg0df6SA/dfg8967==”

Zorunlu

Servis Çıktı Parametreleri

Servis Çıktı (Output) Parametreleri
Parametre Adı Açıklama
result

İşlem sonucu
1 - İşlem Başarılı
0 - İşlem Başarısız

errorCode Hata kodu.
errorMessage Teknik hata mesajı.
responseMessage Kullanıcıya gösterilecek hata veya başarılı sonuç mesajı. Başarılı entegrasyon sonrası hata mesajlarının kullanıcıya direkt gösterilmesini öneririz.
paymentLinkRecords Link detay bilgileri listesi. Aşağıdaki tabloda iç parametreleri anlatılmıştır.

Link Detay Bilgileri Listesi (paymentLinkRecords)

Parametre Adı Açıklama
amount

Müşteriye iletilen tutar bilgisi Tutar kuruş ayracı olmadan gönderilecektir.
Örneğin; 1 TL 100, 12 1200, 130 13000, 1.05 105, 1.2 120 olarak gönderilecektir.

creationDate Ödeme Linki’nin yaratıldığı tarih “yyyy-MM-dd HH:mm:ss“ formatında.
email Ödeme Linki’nin gönderildiği e-posta adresi.
gsm Ödeme Linki gönderim isteğinde iletilen cep telefonu numarası.
linkState Ödeme Linkinin durumu
0 - Link İsteği Alındı
1 - Link URL’i yaratıldı
2 - Link Gönderildi, Ödeme Bekleniyor
3 - Link ile Ödeme Başarılı
98 - Link Zaman Aşımına Uğradı
99 - Link Silindi
linkId Ödeme Linkinin ID’si. Bu bilgi link silme servisinde kullanılabilmektedir.
name Ödeme Linki gönderim isteğinde belirtilen müşteri adı.
surname Ödeme Linki gönderim isteğinde belirtilen müşteri soyadı.
taxNumber Ödeme Linki gönderim isteğinde belirtilen T.C. vergi numarası.
tcCertificate Ödeme Linki gönderim isteğinde belirtilen T.C. Kimlik Numarası.

Hata Kodları

Hata Kodu Açıklama
800

İstek boş.

801 Token bilgisi boş.
802 Token bilgisi hatalı.
803 Açık anahtar boş.
804 Hash bilgisi boş.
805 Entegrasyon versiyon bilgisi boş.
806

Versiyon desteklenmiyor.

807

İstek zaman bilgisi boş.

808

İstek zamanı header bilgisi hatalı.

809

İstek zamanı ile server zamanı uyuşmuyor. Lütfen tekrar deneyiniz.

810

Mağaza açık anahtarı yanlış.

882

Göndermiş olduğunuz token doğru değil.

3053

Başlangıç tarihi zorunlu alandır.

3055

Bitiş tarihi zorunlu alandır

3078

Başlangıç tarihi bitiş tarihinden büyük olamaz

3046

Tarih aralığı 30 günü geçemez

3054

Lütfen geçerli bir başlangıç tarihi giriniz.

3056

Geçerli bir bitiş tarihi giriniz.

3058

pageIndex zorunlu alandır

3059

pageIndex alanı geçersizd

3060

pageSize zorunlu alandır

3061

pageSize alanı geçersizdir

3094

Lütfen cep telefon numarası giriniz

3095

Lütfen cep telefon numarasını başında sıfır olmadan 10 hane olarak giriniz.

3096

Girilen cep telefonu kara listede olduğu için isteğiniz reddedilmiştir. Daha fazla bilgi için destek@ipara.com üzerinden iletişime geçiniz.

3097

Lütfen e-posta adresini giriniz.

3098

Lütfen geçerli bir e-posta adresi giriniz.

3130

pageSize paramtersi en az 5, en çok 15 olabilir

3159

Başlangıç tarihi boş iken, bitiş tarihi dolu olamaz.

3160

Başlangıç tarihi dolu iken, bitiş tarihi boş olamaz.

3161

Ödeme Linki listeleme isteğinde en azından bir kriter belirtilmesi gerekmektedir.

4012

Ödeme Linki statüsü boş.

4013

Ödeme Linki statüsü geçersiz.

1000

İşleminiz gerçekleştirilirken beklenmedik bir hata oluştu. Lütfen daha sonra tekrar deneyiniz.

Test İşlemleri

Örnek İstek Verisi
{

"clientIp":"127.0.0.1",

"email":"ozan@domain.com.tr",

"gsm":"5881231212",

"linkState":"3",

"endDate":"2016-11-30",

"startDate":"2016-11-08"

"pageSize":"5"

"pageIndex":"1"

}
                 

Örnek Cevap Verisi
Başarılı İşlem Cevap Verisi
{

"responseMessage": "Ödeme Linki listeme işlemi sonuçları başarıyla gönderildi.",

"result": "1",

"pageIndex ": "1",

"pageSize ": "5",

"pageCount ": "1",

"paymentLinkRecords": [

{

"amount": "10,10",

"creationDate": "2016-11-16 13:15:00",

"description": "Ödemenizi buradan yapabilirsiniz",

"email": " Ozan@domain.com,

"gsm": "5884043366",

"linkId": "001zuIpfDR/tk7mz5qRJrjkjg==",

"linkState": "3",

"name": "Ozan ",

"surname": "Aksu",

"taxNumber": "1881777842",

"tcCertificate": "59915578895"

},

{

"amount": "150",

"creationDate": "2016-11-19 16:00:00",

"description": "Ödemenizi buradan yapabilirsiniz",

"email": " Ozan@domain.com,

"gsm": "5884043366",

"linkId": "001MgiU/Dv8sJemWoDzJgBo/Q==",

"linkState": "3",

"name": "Ozan",

"surname": "Nazo",

"taxNumber": "1881777842",

"tcCertificate": "59915578895"

}

]

}

Başarısız İşlem Cevap Verisi
{

"errorCode":"3098",

"errorMessage":"Geçerli bir email adresi giriniz",

"responseMessage":"Geçerli bir email adresi giriniz",

"result":"0"

}
                 

Örnek Hash Fonksiyonu



    public static String prepareToken (String text) throws Exception {
    MessageDigest sha1 = MessageDigest.getInstance("SHA-1");
    String hash = (new BASE64Encoder()).encode(sha1.digest(text.getBytes(“UTF-8”))); return hash;
    }

    public static string PrepareToken (string SHA1Data) { SHA1 sha = new SHA1CryptoServiceProvider();
    byte[] hashbytes = System.Text.Encoding.UTF8.GetBytes(SHA1Data);
    byte[] inputbytes = sha.ComputeHash(hashbytes);
    return Convert.ToBase64String(inputbytes);
    }

    function prepareToken($text) {
    $token = base64_encode(sha1($text,true));
    return $token;
    }

Link Silme

Kurumunuza ait kayıtlı mağazanın link ile ödeme talebini iletmesi doğrultusunda oluşan bağlantıların yetkisinin kaldırılarak etkisizleştirilmesi (silinmesi) işlemini sağlayan servistir.

Link silinmek istendiğinde gerekli istek bilgilerini JSON formatında hazırlayarak, https://api.ipara.com/corporate/merchant/linkpayment/delete adresine gerekli güvenlik bilgilerini http header bilgisine ekleyerek post eder. iPara işlem sonucunu yine JSON formatında mağazaya döner.


Servis Girdi Parametreleri

Servis içinde ileticek Girdi (Input) Parametreleri
Parametre Adı Açıklama Opsiyonel/Zorunlu
linkId

Listeleme Servisi ile iletilmiş olan Ödeme Linki ID’si

Zorunlu
clientIp

İstekte bulunan kullanıcının IP adresi

Zorunlu

İstek Güvenlik Bilgileri

iPara, güvenlik kontrolleri için, mağazadan bazı bilgileri request header bilgisinde istemektedir. Aşağıda bu bilgilerin tanımları bulunmaktadır.


Parametre Adı Açıklama Opsiyonel/Zorunlu
transactionDate

İstek zamanı. “yyyy-MM-dd HH:mm:ss“ formatındadır. İşlem zaman aşımına uğramış ise istek reddedilir. Örnek: “2014-08-12 23:59:59”

Zorunlu
version

Entegrasyon versiyon bilgisidir. “1.0” olarak gönderilmelidir

Zorunlu
token

“publicKey:hash” bilgisidir.
Hash bilgisi; "privateKey + clientIp + transactionDate" alanlarını birbirlerine, verilen sıra ile ekleyerek, SHA1 kriptografik hash fonksiyonunun base64 methodu ile encode edilmesi sonucunda oluşur.
Hash oluşturma fonksiyonu örnekleri 2 no’lu başlıkta anlatılmıştır.
Örnek : token =public key + ‘:’ + base64[ sha1[("privateKey + clientIp + transactionDate")]] Veri Örneği: token = “ASKJH98675ASDASDPO:jhsa/gd+89dfg0df6SA/dfg8967==”

Zorunlu

Servis Çıktı Parametreleri

Servis Çıktı (Output) Parametreleri
Parametre Adı Açıklama
result

İşlem sonucu
1 - İşlem Başarılı
0 - İşlem Başarısız

errorCode Hata kodu.
errorMessage Teknik hata mesajı.
responseMessage Kullanıcıya gösterilecek hata veya başarılı sonuç mesajı. Başarılı entegrasyon sonrası hata mesajlarının kullanıcıya direkt gösterilmesini öneririz.

Hata Kodları

Hata Kodu Açıklama
800

İstek boş.

801 Token bilgisi boş.
802 Token bilgisi hatalı.
803 Açık anahtar boş.
804 Hash bilgisi boş.
805 Entegrasyon versiyon bilgisi boş.
806

Versiyon desteklenmiyor.

807

İstek zaman bilgisi boş.

808

İstek zamanı header bilgisi hatalı.

809

İstek zamanı ile server zamanı uyuşmuyor. Lütfen tekrar deneyiniz.

810

Mağaza açık anahtarı yanlış.

811

Mağaza yayında değil.

882

Göndermiş olduğunuz token doğru değil.

3165

Ödeme Linki kayıtlarının silinmesi işlemi için gelen istekte silinecek kayıt bilgisi bulunamadı.

3166

Ödeme Linki kayıtlarının silinmesi işlemi için gelen istekte silinecek kayıt bilgisi tanımlanamadı.

3167

Ödeme Linki kayıtlarının silinmesi işlemi bilinmeyen bir sebeple başarısız oldu.

3168

Ödeme Linki kayıtlarının silinmesi işlemi silinmek istenen link kaydı ödeme aşamasını geçtiğinden dolayı gerçekleştirilmedi.

3169

Ödeme Linki kayıtlarının silinmesi isteğinde belirtilen kayıt bilgisi bulunamadı.

1000

İşleminiz gerçekleştirilirken beklenmedik bir hata oluştu. Lütfen daha sonra tekrar deneyiniz.

Test İşlemleri

Örnek İstek Verisi
{

"clientIp":"127.0.0.1",

"linkId":"Rq12/RyqdJuNKa08HL=="

}
                 

Örnek Cevap Verisi
Başarılı İşlem Cevap Verisi
{
"responseMessage": "Ödeme Linki kaydı başarı ile silindi.",

"result": "1"
}

Başarısız İşlem Cevap Verisi
{
"errorCode":"3172",

"errorMessage":"Ödeme Linki kaydının silinmesi işlemine izin verilmedi.",

"responseMessage":"Ödeme Linki kaydının silinmesi işlemine izin verilmedi.",

"result":"0"
}
                 

Örnek Hash Fonksiyonu



    public static String prepareToken (String text) throws Exception {
    MessageDigest sha1 = MessageDigest.getInstance("SHA-1");
    String hash = (new BASE64Encoder()).encode(sha1.digest(text.getBytes(“UTF-8”))); return hash;
    }

    public static string PrepareToken (string SHA1Data) { SHA1 sha = new SHA1CryptoServiceProvider();
    byte[] hashbytes = System.Text.Encoding.UTF8.GetBytes(SHA1Data);
    byte[] inputbytes = sha.ComputeHash(hashbytes);
    return Convert.ToBase64String(inputbytes);
    }

    function prepareToken($text) {
    $token = base64_encode(sha1($text,true));
    return $token;
    }

Ön Otorizasyon Servisi

Mağaza, müşteri üyelik bilgilerini ve kart bilgilerini aldıktan sonra, ödeme verilerini JSON formatında hazırlayarak https://api.ipara.com/rest/payment/preauth web servis adresine gerekli güvenlik bilgilerini http header bilgisine ekleyerek post eder. iPara işlem sonucunu yine JSON formatında mağazaya döner.


Servis Girdi Parametreleri

Servis içinde ileticek Girdi (Input) Parametreleri
Parametre Adı Açıklama Opsiyonel/Zorunlu
mode

İstek modu. "P" veya "T" gönderilmelidir.
"P" - Gerçek Ödeme
"T" – Test Ödemesi
Entegrasyon işlemlerinizde mode alanını “T” olarak göndererek test işlemlerinizi gerçekleştirebilirsiniz.
ÖNEMLİ NOT:Test modunda iken ön otorizasyon banka poslarına yönlendirilmez. Test işlemleriniz sonunda gerçek ön otorizasyon için mode alanını “P” olarak göndermeyi unutmayınız.

Zorunlu
orderId

Mağazanın ilgili sipariş ile ilişkilendirdiği her bir istek için benzersiz olan tekil sipariş kodu.
Maksimum Uzunluk: 100 karakter.

Zorunlu
cardOwnerName

Kart üzerindeki ad.
Minimum Uzunluk: 4 - Maksimum Uzunluk: 100 karakter

Zorunlu
cardNumber

Kart numarası.
Minimum Uzunluk: 12 - Maksimum Uzunluk: 19 karakter.

*
cardExpireMonth

Kart son kullanma tarihi ay parametresi
Uzunluk: 2 karakter. Örnek; 05,11, vb.

*
cardExpireYear

Kart son kullanma tarihi yıl parametresi.
Uzunluk: 2 karakter. Örnek; 14,19, vb.

*
cardCvc

Kartın arkasındaki güvenlik kodu:
Uzunluk: MasterCard ve Visa kartları için 3 karakter, Amex kartlar için 3 veya 4 karakter.

*
userId

Mağaza kullanıcısını referans eden bilgi.
Maksimum uzunluk 255 karakter.
Cüzdan servisleri ile daha önceden kaydedilmiş olan kayıtlı kart ile ön otorizasyon işlemi gerçekleştirilmek istendiğinde gönderilmelidir.

*
cardId

Mağaza kullanıcısının kartını referans eden kart kaydetme işlemi sonucunda oluşan id bilgisi.
Cüzdan servisleri ile daha önceden kaydedilmiş olan kayıtlı kart ile ön otorizasyon işlemi gerçekleştirilmek istendiğinde gönderilmelidir.

*
installment

Taksit Sayısı.
Minimum Uzunluk: 1 - Maksimum Uzunluk: 2 karakter.
Desteklenen taksit sayıları: 1,2,3,4,5,6,7,8,9,10,11,12

Zorunlu
amount

Karttan bloke edilecek olan toplam sipariş tutarı.
Sipariş tutarı kuruş ayracı olmadan gönderilmelidir.
Örneğin; 1 TL 100, 12 1200, 130 13000, 1.05 105, 1.2 120 olarak gönderilmelidir.

Zorunlu
echo

Mağazaya istek sonucunda geri gönderilecek bilgi alanıdır.
Maksimum Uzunluk: 255.

Opsiyonel
vendorId

iPara tarafından sağlanan altyapı sağlayıcı id bilgisi. Mağaza kendi yazılımını kullanıyor ise bu alan gönderilmemelidir.

Opsiyonel
purchaser

Müşteri Bilgileri. Aşağıdaki tabloda iç parametreleri anlatılmıştır.

Opsiyonel
products

Ürün Bilgileri. Aşağıdaki tabloda iç parametreleri anlatılmıştır.

Zorunlu
Müşteri Bilgileri (purchaser object )
Parametre Adı Açıklama Opsiyonel/Zorunlu
purchaserName

Müşteri isim bilgisi.
Minimum Uzunluk: 3 - Maksimum Uzunluk: 50.

Zorunlu
purchaserSurname

Müşteri soyisim bilgisi.
Minimum Uzunluk: 3 - Maksimum Uzunluk: 50.

Zorunlu
purchaserEmail

Müşteri e-posta bilgisi.
E-posta adresi geçerli bir e-posta adresi olmalıdır.
Minimum Uzunluk: 3 - Maksimum Uzunluk: 100.

Zorunlu
clientIp

Müşteri istemci IP adresi

Zorunlu
birthDate

Müşteri doğum tarihi bilgisi. “yyyy-MM-dd” formatında olmalıdır.

Opsiyonel
gsmNumber

Müşteri cep telefonu bilgisi.

Opsiyonel
tcCertificate

Müşteri T.C. Kimlik Numarası bilgisi. 11 haneli olmalıdır.

Opsiyonel
invoiceAddress

Fatura adresi bilgileri. Aşağıdaki tabloda iç parametreleri anlatılmıştır.

Opsiyonel
shippingAddress

Kargo adresi bilgileri. Aşağıdaki tabloda iç parametreleri anlatılmıştır.

Opsiyonel

Müşteri Fatura Adresi Bilgileri (invoiceAddress)

Bilgiler ödeme sahterkarlık kontrollerinde kullanılmaktadır.

Parametre Adı Açıklama Opsiyonel/Zorunlu
name

İsim bilgisi.

Opsiyonel
surname

Soyisim bilgisi.

Opsiyonel
address

Adres bilgisi.

Opsiyonel
zipcode

Posta kodu bilgisi.

Opsiyonel
city

Şehir bilgisi.

Opsiyonel
country

Ülke bilgisi. ISO 3166-1 alpha-2 standardındaki ülke kodu. Türkiye için “TR”.

Opsiyonel
tcCertificate

T.C. Kimlik numarası bilgisi.

Opsiyonel
taxNumber

Vergi numarası bilgisi.

Opsiyonel
taxOffice

Vergi dairesi bilgisi.

Opsiyonel
companyName

Şirket ismi bilgisi.

Opsiyonel
phoneNumber

Telefon bilgisi

Opsiyonel

Müşteri Kargo Adresi Bilgileri (shippingAddress)

Bilgiler ödeme sahterkarlık kontrollerinde kullanılmaktadır.

Parametre Adı Açıklama Opsiyonel/Zorunlu
name

İsim bilgisi.

Opsiyonel
surname

Soyisim bilgisi.

Opsiyonel
address

Adres bilgisi.

Opsiyonel
zipcode

Posta kodu bilgisi.

Opsiyonel
city

Şehir bilgisi.

Opsiyonel
country

Ülke bilgisi. ISO 3166-1 alpha-2 standardındaki ülke kodu. Türkiye için “TR”.

Opsiyonel
phoneNumber

Telefon bilgisi

Opsiyonel

Ürün Bilgileri (products)

Bilgiler ödeme sahterkarlık kontrollerinde kullanılmaktadır.

Parametre Adı Açıklama Opsiyonel/Zorunlu
productCode

Ürün kodu bilgisi.

Opsiyonel
productName

Ürün isim bilgisi.

Opsiyonel
quantity

Ürün adet bilgisi.

Opsiyonel
price

Ürün birim fiyat bilgisi.

Opsiyonel
Önemli NOT: En az bir adet ürün (product) bilgisi gönderimi zorunludur.

İstek Güvenlik Bilgileri

iPara, güvenlik kontrolleri için, mağazadan bazı bilgileri request header bilgisinde istemektedir. Aşağıda bu bilgilerin tanımları bulunmaktadır.

Parametre Adı Açıklama Opsiyonel/Zorunlu
transactionDate

İstek zamanı. “yyyy-MM-dd HH:mm:ss“ formatındadır. İşlem zaman aşımına uğramış ise istek reddedilir. Örnek: “2014-08-12 23:59:59”

Zorunlu
version

Entegrasyon versiyon bilgisidir. “1.0” olarak gönderilmelidir

Zorunlu
token

“publicKey:hash” bilgisidir. Hash bilgisi;" privateKey + name + surname + email + amount + clientIp + transactionDate " alanlarını birbirlerine, verilen sıra ile ekleyerek, SHA1 kriptografik hash fonksiyonunun base64 methodu ile encode edilmesi sonucunda oluşur. Hash oluşturma fonksiyonu örnekleri 2 no’lu başlıkta anlatılmıştır. Örnek : token =public key + ‘:’ + base64[ sha1[("privateKey + name + surname + email + amount + clientIp + transactionDate ")]] Veri Örneği: token = “ASKJH98675ASDASDPO:jhsa/gd+89dfg0df6SA/dfg8967==”

Zorunlu
sessionToken

Login servisini kullanıp alınan sessiontoken’ı header bilgisinde gönderilmelidir.

Zorunlu

Login servis’i için gerekli bilgi aşağıdaki link’te yer almaktadır
https://documenter.getpostman.com/view/10639199/SzRw3Bnj


Servis Çıktı Parametreleri

Servis Çıktı (Output) Parametreleri
Parametre Adı Açıklama
result

İşlem sonucu
1 - İşlem Başarılı
0 - İşlem Başarısız

orderId Mağaza sipariş Id
amount Sipariş toplam tutar bilgisi
mode

İstek modu.
"P" - Gerçek Ödeme
"T" – Test Ödemesi

publicKey Mağaza açık anahtar bilgisi.
echo Mağazanın istek bilgisinde iletmiş olduğu echo verisi.
errorCode Hata kodu.
errorMessage

Hata mesajı.
Başarılı entegrasyon sonrası hata mesajlarının kullanıcıya direkt gösterilmesini öneririz.

transactionDate

Hash hesaplamasında kullanılacak zaman bilgisi. “yyyy-MM-dd HH:mm:ss“ formatındadır.

hash

"orderId + result + amount + mode + errorCode + errorMessage + transactionDate + publicKey + privateKey" alanlarını birbirlerine, verilen sıra ile ekleyerek, SHA1 kriptografik hash fonksiyonun base64 methodu ile encode edilmesi sonucunda bu değer oluşur.
Not 1: İşlem sonucunda sizlere gönderilen hash bilgisini tarafınıza gelen parametreler ile tekrar hesaplayıp bu alandaki bilgi ile karşılaştırılması gerekmektedir. Eğer aynı hash değeri oluşmuyor ise işlemi reddetmelisiniz. Aksi durumda cevap bilgisi iletiminde üçüncü kişilerin araya girerek sahtekarlık yapabilme olasılığı ortaya çıkacaktır.
Not 2: Hash bilgisi hesaplamasında null olan veriler, String “” olarak hesaplanmıştır.
Not 3: İstek bilgileri içerisinde mağazanın tanımamasından kaynaklı olarak mağaza bilgileri yoksa cevap bilgisinde hash ve transactionDate alanları gönderilmeyecektir.


Test İşlemleri

Örnek İstek Verisi
{
  "amount": "2000",
  "orderId": "73573622-a67a-46e9-b33a-cbe58e4b550c",
  "mode": "T",
  "cardOwnerName": "Jack Connor",
  "cardNumber": "5571135571135575",
  "cardExpireMonth": "07",
  "cardExpireYear": "22",
  "cardCvc": "123",
  "installment": "1",
  "vendorId": "10100",
  "echo": "Payment Test",
  "products": [
    {
      "productCode": "1",
      "productName": "iphone X",
      "quantity": "1",
      "price": "1000"
    },
    {
      "productCode": "1",
      "productName": "iphone 8",
      "quantity": "1",
      "price": "1000"
    }
  ],
  "purchaser": {
    "name": "Jack",
    "surname": "Connor",
    "email": "jack.connor@gmail.com",
    "birthDate": "29.08.1995",
    "gsmNumber": "5400343434",
    "tcCertificate": "99999999999",
    "clientIp": "192.168.0.54",
    "invoiceAddress": {
      "name": "Jack",
      "surname": "Connor",
      "address": "Kaliforniya",
      "zipcode": "00001",
      "city": "Los Angeles",
      "country": "ADB",
      "tcCertificate": "99999999999",
      "taxNumber": "9999999999",
      "taxOffice": "Los Angeles",
      "companyName": "Multinet UP",
      "phoneNumber": "05340343434"
    },
    "shippingAddress": {
      "name": "Jack",
      "surname": "Connor",
      "address": "Kaliforniya",
      "zipcode": "00001",
      "city": "Los Angeles",
      "country": "ABD",
      "phoneNumber": "05340343434"
    }
  }
}
 
                 

Örnek Cevap Verisi
Başarılı İşlem Cevap Verisi
{
  "result": 1,
  "amount": "2000",
  "errorCode": null,
  "errorMessage": null,
  "echo": "Payment Test",
  "transactionDate": "2021-02-15 11:21:58",
  "hash": "u+eiNNK/qf/YOmLldqP9coL5vuI=",
  "mode": "T",
  "orderId": "cca97e4f-4b73-427a-9fa3-4641b8ea1e86",
  "publicKey": "EILSMVQZJY2XY7R"
}

Başarısız İşlem Cevap Verisi
{
  "result": 0,
  "amount": "2000",
  "errorCode": "221",
  "errorMessage": "Mağaza Ön otorizasyona açık değil.",
  "echo": "Payment Test",
  "transactionDate": "2021-02-15 11:15:57",
  "hash": "hq7yhCXwTX0tV6dBWJ7iFjNn8OA=",
  "mode": "T",
  "orderId": "73573622-a67a-46e9-b33a-cbe58e4b550c",
  "publicKey": "EILSMVQZJY2XY7R"
}
                 

Örnek Hash Fonksiyonu



    public static String prepareToken (String text) throws Exception {
    MessageDigest sha1 = MessageDigest.getInstance("SHA-1");
    String hash = (new BASE64Encoder()).encode(sha1.digest(text.getBytes(“UTF-8”))); return hash;
    }

    public static string PrepareToken (string SHA1Data) { SHA1 sha = new SHA1CryptoServiceProvider();
    byte[] hashbytes = System.Text.Encoding.UTF8.GetBytes(SHA1Data);
    byte[] inputbytes = sha.ComputeHash(hashbytes);
    return Convert.ToBase64String(inputbytes);
    }

    function prepareToken($text) {
    $token = base64_encode(sha1($text,true));
    return $token;
    }

Ön Provizyon Kapama Servisi

Mağaza, müşteri üyelik bilgilerini ve kart bilgileri ile daha önce bir ön otorizasyon işlemi başlatıktan sonra, istenilen verileri Json formatında hazırlayarak https://api.ipara.com/rest/payment/postauth web servis adresine gerekli güvenlik bilgilerini http header bilgisine ekleyerek post eder. iPara işlem sonucunu yine Json formatında mağazaya döner.


Servis Girdi Parametreleri

Servis içinde ileticek Girdi (Input) Parametreleri
Parametre Adı Açıklama Opsiyonel/Zorunlu
mode

İstek modu. “P” veya “T” gönderilmelidir.
"P" - Gerçek Ödeme
“T” – Test Ödemesi
Entegrasyon işlemlerinizde mode alanını “T” olarak göndererek test işlemlerinizi gerçekleştirebilirsiniz.
ÖNEMLİ NOT: Test modunda iken ödemeler banka poslarından tahsil edilmez. Test işlemleriniz sonunda gerçek ödeme tahsilatı için mode alanını “P” olarak göndermeyi unutmayınız.

Zorunlu
orderId

Mağazanın ilgili sipariş ile ilişkilendirdiği her bir istek için benzersiz olan tekil sipariş kodu.
Maksimum Uzunluk: 100 karakter.

Zorunlu
amount

Karttan çekilecek olan toplam sipariş tutarı.
Sipariş tutarı kuruş ayracı olmadan gönderilmelidir.
Örneğin; 1 TL 100, 12 1200, 130 13000, 1.05 105, 1.2 120 olarak gönderilmelidir.

Zorunlu
clientIp

Müşteri istemci IP adresi

Zorunlu

İstek Güvenlik Bilgileri

iPara, güvenlik kontrolleri için, mağazadan bazı bilgileri request header bilgisinde istemektedir. Aşağıda bu bilgilerin tanımları bulunmaktadır.

Parametre Adı Açıklama Opsiyonel/Zorunlu
transactionDate

İstek zamanı. “yyyy-MM-dd HH:mm:ss“ formatındadır. İşlem zaman aşımına uğramış ise istek reddedilir. Örnek: “2014-08-12 23:59:59”

Zorunlu
version

Entegrasyon versiyon bilgisidir. “1.0” olarak gönderilmelidir

Zorunlu
token

“publicKey:hash” bilgisidir. Hash bilgisi;" privateKey + name + surname + email + amount + clientIp + transactionDate " alanlarını birbirlerine, verilen sıra ile ekleyerek, SHA1 kriptografik hash fonksiyonunun base64 methodu ile encode edilmesi sonucunda oluşur. Hash oluşturma fonksiyonu örnekleri 2 no’lu başlıkta anlatılmıştır. Örnek : token =public key + ‘:’ + base64[ sha1[("privateKey + name + surname + email + amount + clientIp + transactionDate ")]] Veri Örneği: token = “ASKJH98675ASDASDPO:jhsa/gd+89dfg0df6SA/dfg8967==”

Zorunlu
sessionToken

Login servisini kullanıp alınan sessiontoken’ı header bilgisinde gönderilmelidir.

Zorunlu

Login servis’i için gerekli bilgi aşağıdaki link’te yer almaktadır
https://documenter.getpostman.com/view/10639199/SzRw3Bnj


Servis Çıktı Parametreleri

Servis Çıktı (Output) Parametreleri
Parametre Adı Açıklama
result

İşlem sonucu
1 - İşlem Başarılı
0 - İşlem Başarısız

orderId Mağaza sipariş Id
amount Sipariş toplam tutar bilgisi
mode

İstek modu.
"P" - Gerçek Ödeme
"T" – Test Ödemesi

publicKey Mağaza açık anahtar bilgisi.
echo Mağazanın istek bilgisinde iletmiş olduğu echo verisi.
errorCode Hata kodu.
errorMessage

Hata mesajı.
Başarılı entegrasyon sonrası hata mesajlarının kullanıcıya direkt gösterilmesini öneririz.

transactionDate

Hash hesaplamasında kullanılacak zaman bilgisi. “yyyy-MM-dd HH:mm:ss“ formatındadır.

hash

"orderId + result + amount + mode + errorCode + errorMessage + transactionDate + publicKey + privateKey" alanlarını birbirlerine, verilen sıra ile ekleyerek, SHA1 kriptografik hash fonksiyonun base64 methodu ile encode edilmesi sonucunda bu değer oluşur.
Not 1: İşlem sonucunda sizlere gönderilen hash bilgisini tarafınıza gelen parametreler ile tekrar hesaplayıp bu alandaki bilgi ile karşılaştırılması gerekmektedir. Eğer aynı hash değeri oluşmuyor ise işlemi reddetmelisiniz. Aksi durumda cevap bilgisi iletiminde üçüncü kişilerin araya girerek sahtekarlık yapabilme olasılığı ortaya çıkacaktır.
Not 2: Hash bilgisi hesaplamasında null olan veriler, String “” olarak hesaplanmıştır.
Not 3: İstek bilgileri içerisinde mağazanın tanımamasından kaynaklı olarak mağaza bilgileri yoksa cevap bilgisinde hash ve transactionDate alanları gönderilmeyecektir.


Test İşlemleri

Örnek İstek Verisi
{
"orderId": "b3091d88-6320-4446-be6c-7a1f8e6e73c7"
" amount ": "100"
"mode": "T",
"clientIp": "123.123.12.1" 
}


                 

Örnek Cevap Verisi
Başarılı İşlem Cevap Verisi
{
    "result": 1,
    "amount": "100",
    "transactionDate": "2021-02-04 11:35:58",
    "hash": "MpZnLO2JJv3WHeZEUJcdQCNJoAI=",
    "mode": "T",
    "orderId": "929f6931-6e23-47ba-912f-7eb2655110a1",
    "publicKey": "EILSMVQZJY2XY7R"
}
Başarısız İşlem Cevap Verisi
{
    "result": 0,
    "amount": "100",
    "errorCode": "882",
    "errorMessage": "Göndermiş olduğunuz token doğru değil.",
    "transactionDate": "2021-02-04 11:19:05",
    "hash": "GUfwYpf1dl30XeTpT5IAvq7qGa0=",
    "mode": "T",
    "orderId": "929f6931-6e23-47ba-912f-7eb2655110a1",
    "publicKey": "EILSMVQZJY2XY7R"
}
Başarısız İşlem Cevap Verisi (Mağaza Bulunamadı)
Mağaza bulunamadığı zaman hash ve transactionDate alanları oluşturulamayacağı için geri dönüş değerlerine eklenmez.
{
    "result": 0,
    "amount": "100",
    "errorCode": "810",
    "errorMessage": "Mağaza açık anahtarı yanlış.",
    "mode": "T",
    "orderId": "929f6931-6e23-47ba-912f-7eb2655110a1"
}


                 

Hata Kodları

Hata Kodu Açıklama
1

Ödeme işleminiz bankanız tarafından onaylanmamıştır. Bankanızı arayarak detaylı bilgi alabilirsiniz.

2

Ödeme işleminiz bankanız tarafından reddedilmiştir. Bankanızı arayarak detaylı bilgi alabilirsiniz.

4

Kart limitiniz yetersiz olduğundan dolayı ödeme işleminiz gerçekleştirilemedi.

5

Kartınızın süresi dolmuş, bu kart ile işlem gerçekleştiremezsiniz. Lütfen başka bir kart ile tekrar deneyiniz.

7

Kart kapalı. Lütfen tekrar denemeyiniz. Bankanızı arayarak detaylı bilgi alabilirsiniz.

8

Kart ile işlem yapılamaz. Lütfen tekrar denemeyiniz. Bankanızı arayarak detaylı bilgi alabilirsiniz.

9

Kartınızın bu işlem için yetkisi yoktur. Lütfen bankanız ile irtibata geçiniz.

10

Ödeme işleminiz gerçekleştirilemedi. Kartınız yenilenmiş. Bankanızı arayarak detaylı bilgi alabilirsiniz.

14

Ödeme işleminiz de kullanmış olduğunuz kart ile 1 TL nin altında ödeme gerçekleştiremezsiniz.

16

Ödeme işleminiz gerçekleştirilemedi. Kart bankasına ulaşılamıyor. Bankanızı arayarak detaylı bilgi alabilirsiniz.

17

Kart banka sistemlerinde bulunamadı. Lütfen bilgilerinizi kontrol edip tekrar deneyiniz.

18

Şu anda ödeme yapmak istediğiniz kartın bankası hizmet verememektedir. Lütfen daha sonra tekrar deneyiniz.

38

Ödeme işleminiz zaman aşımına uğramıştır. Bankanızdan yanıt alınamıyor. Lütfen tekrar deneyiniz.

81

Kart sahibi veya bankası 3D Secure sistemine kayıtlı değil. Lütfen bankanız ile irtibata geçiniz.

82

Kartın bankası sisteme kayıtlı değil.

83

Kart sahibi 3D Secure sistemine daha sonra kayıt olmayı seçmiş. Lütfen bankanız ile irtibata geçiniz.

98

Şu anda ödeme yapmak istediğiniz kartın bankası hizmet verememektedir. Lütfen daha sonra tekrar deneyiniz.

99

Ödeme işleminiz gerçekleştirilemedi. Lütfen bilgilerinizi kontrol edip tekrar deneyiniz.

200

Ödemeniz güvenlik kontrolünü geçemedi.

800

İstek boş.

801 Token bilgisi boş.
802 Token bilgisi hatalı.
803 Açık anahtar boş.
804 Hash bilgisi boş.
805 Entegrasyon versiyon bilgisi boş.
806

Versiyon desteklenmiyor.

807

Ödeme istek zaman bilgisi boş.

808

İstek zamanı header bilgisi hatalı.

809

İstek zamanı ile server zamanı uyuşmuyor. Lütfen tekrar deneyiniz.

810

Mağaza açık anahtarı yanlış.

811

Mağaza yayında değil.

816

Lütfen tutar belirtiniz.

817

Girmiş olduğunuz tutar bilgisi hatalıdır. Lütfen tekrar deneyiniz.

842

Mod alanı boş olamaz.

843

Mod alanı "P" veya "T" olmalıdır.

852

Client IP alanı boş olamaz.

853

Client IP alanı hatalı.

880

Sipariş numarası daha önce kullanılmış. Lütfen tekrardan istekte bulununuz.

881

Devam eden bir işleminiz bulunduğundan dolayı bu istek reddedilmiştir.

882

Göndermiş olduğunuz token doğru değil.

885

Mağaza durumu test modu için uygun değil. Lütfen konu ile ilgili iPara operasyon ekibi ile iletişime geçiniz.

886

Mağaza kayıtlı site adresi ile istekte bulunulan adres aynı değil. Lütfen konu ile ilgili iPara operasyon ekibi ile iletişime geçiniz.

890

Göndermiş olduğunuz ödeme bilgileri ile daha önceden işlem yapılmış.

988

orderId bilgisi geçersizdir.

1000

İşleminiz gerçekleştirilirken beklenmedik bir hata oluştu. Lütfen daha sonra tekrar deneyiniz.

Örnek Hash Fonksiyonu



    public static String prepareToken (String text) throws Exception {
    MessageDigest sha1 = MessageDigest.getInstance("SHA-1");
    String hash = (new BASE64Encoder()).encode(sha1.digest(text.getBytes(“UTF-8”))); return hash;
    }

    public static string PrepareToken (string SHA1Data) { SHA1 sha = new SHA1CryptoServiceProvider();
    byte[] hashbytes = System.Text.Encoding.UTF8.GetBytes(SHA1Data);
    byte[] inputbytes = sha.ComputeHash(hashbytes);
    return Convert.ToBase64String(inputbytes);
    }

    function prepareToken($text) {
    $token = base64_encode(sha1($text,true));
    return $token;
    }

İade Sorgulama

Dokümanda, mağazanıza ait bir ödemenin iade edilebilirlik durumunun sorgulaması sağlayan servis entegrasyonu, örnekler ve tanımlar ile anlatılmıştır. Bu doküman, iPara üye işyeri olan mağazalara yardımcı olması amacı ile oluşturulmuştur. Dokümanda anlatılan servis Restful servis olup JSON medya tipinde istekleri kabul etmektedir.

Kurumunuza ait kayıtlı mağazanın iPara’da yaptığı ödemelerin iade işlemi öncesinde, ödeme durumunun sorgulanarak iade edilmeye uygun durumda olup olmadığının bilgisinin alınması gerekmektedir. Bu servis sonucunda alınan uygunluk değerine göre, bu servisten alınan parametreler ile “Ödeme İade Servisi” çağırılarak ödeme iadesi gerçekleştirilebilir.
İade durumu sorgulanmak istendiğinde gerekli istek bilgilerini JSON formatında hazırlayarak, https://api.ipara.com/corporate/payment/refund/inquiry adresine gerekli güvenlik bilgilerini http header bilgisine ekleyerek post eder. iPara işlem sonucunu yine JSON formatında mağazaya döner. Servisin sorgulma isteğinde ödeme kimlik bilgisinin olması gerekmektedir. Gerekli ödeme bilgisine, “Ödeme Arama Servisi” üzerinden ulaşılabilir.

İstek Güvenlik Bilgileri

HttpHeader Güvenlik Bilgileri

iPara, güvenlik kontrolleri için, mağazadan bazı bilgileri HTTP Header alanında istemektedir. Aşağıda bu bilgilerin tanımları bulunmaktadır:

Parametre Adı Açıklama Opsiyonel/Zorunlu
transactionDate

İstek zamanı “yyyy-MM-dd HH:mm:ss“ formatındadır. İşlem zaman aşımına uğramış ise istek reddedilir.

Zorunlu
version

Entegrasyon versiyon bilgisidir. “1.0” olarak gönderilmelidir.

Zorunlu
token

“publicKey:hash” bilgisidir.
Hash bilgisi; "privateKey + binNumber + transactionDate" alanlarını birbirlerine, verilen sıra ile ekleyerek, SHA1 kriptografik hash fonksiyonun base64 methodu ile encode edilmesi sonucunda oluşur.

Zorunlu

Servis Girdi Parametreleri

Parametre Adı Açıklama Opsiyonel/Zorunlu
clientIp

İstekte bulunan kullanıcının IP adresi.

Zorunlu
orderId

İade edilmek istenen ödemeye ait mağaza sipariş numarası.

Zorunlu
amount

İade yapılası istenen tutar bilgisidir. Tutar kuruş ayracı olmadan gönderilmelidir. Örneğin; 1 TL 100, 12 1200, 130 13000, 1.05 105, 1.2 120 olarak gönderilmelidir.

Zorunlu

Servis Çıktı Parametreleri

Parametre Adı Açıklama
result

İşlem sonucu
1 - İşlem Başarılı
0 - İşlem Başarısız

errorCode Hata Kodu.
errorMessage Hata Mesajı.
responseMessage Kullanıcıya gösterilecek hata veya başarılı sonuç mesajı. Başarılı entegrasyon sonrası hata mesajlarının kullanıcıya direkt gösterilmesini öneririz.
refundHash İşlem sonucu 1 olduğu durumlarda gönderilen iade edilmeye aday ödemenin anahtar kimlik bilgisi. Bu bilgi ile Ödeme İade Servisi çağırılarak iade işlemi gerçekleştirilebilir.

Örnek Çağrılar


    //Request
        public static string PrepareToken (string SHA1Data) { SHA1 sha = new SHA1CryptoServiceProvider();
            byte[] hashbytes = System.Text.Encoding.UTF8.GetBytes(SHA1Data);
            byte[] inputbytes = sha.ComputeHash(hashbytes);
            return Convert.ToBase64String(inputbytes);
        }
    

            //request
            public static String prepareToken (String text) throws Exception {
                MessageDigest sha1 = MessageDigest.getInstance("SHA-1");
                String hash = (new BASE64Encoder()).encode(sha1.digest(text.getBytes(“UTF-8”))); return hash;
            }

    //request
    function prepareToken($text) {
        $token = base64_encode(sha1($text,true));
        return $token;
    }

İade Servisi

Dokümanda, mağazanız üzerinden gerçekleşmiş bir ödemeyi iade edebilmenizi sağlayan servis entegrasyonu, örnekler ve tanımlar ile anlatılmıştır. Bu doküman, iPara üye işyeri olan mağazalara yardımcı olması amacı ile oluşturulmuştur. Dokümanda anlatılan servis Restful servis olup JSON medya tipinde istekleri kabul etmektedir.

Kurumunuza ait kayıtlı mağazanın iPara’da yaptığı ödemelerin iade işlemi öncesinde, ödeme durumunun sorgulanarak iade edilmeye uygun durumda olup olmadığının bilgisinin alınması gerekmektedir. Bu servis sonucunda alınan uygunluk değerine göre, bu servisten alınan parametreler ile “Ödeme İade Servisi” çağırılarak ödeme iadesi gerçekleştirilebilir.
İade durumu sorgulanmak istendiğinde gerekli istek bilgilerini JSON formatında hazırlayarak, https://api.ipara.com/corporate/payment/refund adresine gerekli güvenlik bilgilerini http header bilgisine ekleyerek post eder. iPara işlem sonucunu yine JSON formatında mağazaya döner. Servisin, ilgili direkt ödemenin iade edilebilir sorgusunun yapılmış bir kayıt bilgisine ihtiyacı vardır. Bu bilgiye “Üye Mağaza İade Sorgulama Servisi” üzerinden ulaşılabilir.

İstek Güvenlik Bilgileri

HttpHeader Güvenlik Bilgileri

iPara, güvenlik kontrolleri için, mağazadan bazı bilgileri HTTP Header alanında istemektedir. Aşağıda bu bilgilerin tanımları bulunmaktadır:

Parametre Adı Açıklama Opsiyonel/Zorunlu
transactionDate

İstek zamanı “yyyy-MM-dd HH:mm:ss“ formatındadır. İşlem zaman aşımına uğramış ise istek reddedilir.

Zorunlu
version

Entegrasyon versiyon bilgisidir. “1.0” olarak gönderilmelidir.

Zorunlu
token

“publicKey:hash” bilgisidir.
Hash bilgisi; "privateKey + binNumber + transactionDate" alanlarını birbirlerine, verilen sıra ile ekleyerek, SHA1 kriptografik hash fonksiyonun base64 methodu ile encode edilmesi sonucunda oluşur.

Zorunlu

Servis Girdi Parametreleri

Parametre Adı Açıklama Opsiyonel/Zorunlu
clientIp

İstekte bulunan kullanıcının IP adresi.

Zorunlu
orderId

İade edilmek istenen ödemeye ait mağaza sipariş numarası.

Zorunlu
refundHash

İade edilmeye aday ödemenin anahtar kimlik bilgisi. NOT: Bu bilgi iade sorgulama servisi sonucunda dönen refundHash bilgisidir.

Zorunlu
amount

İade yapılası istenen tutar bilgisidir. Tutar kuruş ayracı olmadan gönderilmelidir. Örneğin; 1 TL 100, 12 1200, 130 13000, 1.05 105, 1.2 120 olarak gönderilmelidir.

Zorunlu

Servis Çıktı Parametreleri

Parametre Adı Açıklama
result

İşlem sonucu
1 - İşlem Başarılı
0 - İşlem Başarısız

errorCode Hata Kodu.
errorMessage Hata Mesajı.
responseMessage Kullanıcıya gösterilecek hata veya başarılı sonuç mesajı. Başarılı entegrasyon sonrası hata mesajlarının kullanıcıya direkt gösterilmesini öneririz.
refundHash İşlem sonucu 1 olduğu durumlarda gönderilen iade edilmeye aday ödemenin anahtar kimlik bilgisi. Bu bilgi ile Ödeme İade Servisi çağırılarak iade işlemi gerçekleştirilebilir.

Örnek Çağrılar


    //Request
        public static string PrepareToken (string SHA1Data) { SHA1 sha = new SHA1CryptoServiceProvider();
            byte[] hashbytes = System.Text.Encoding.UTF8.GetBytes(SHA1Data);
            byte[] inputbytes = sha.ComputeHash(hashbytes);
            return Convert.ToBase64String(inputbytes);
        }


    //request
    public static String prepareToken (String text) throws Exception {
        MessageDigest sha1 = MessageDigest.getInstance("SHA-1");
        String hash = (new BASE64Encoder()).encode(sha1.digest(text.getBytes(“UTF-8”))); return hash;
    }


    //request
    function prepareToken($text) {
        $token = base64_encode(sha1($text,true));
        return $token;
    }