Ö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ı) iletilerek, bu bin numarası için üye işyeri bazlı iPara'daki konfigürasyona istinaden taksit desteği olup olmadığı, 3D Secure zorunluluğunun olup olmadığı gibi bilgiler elde edilir.

Bin sorgulama servisinin genel kullanımı, kart numarası girilmeye başladığı anda karta yönelik taksit imkanlarının sorgulanmasıdır. Kart numarası girilirken ilk 6 hanesi alındıktan sonra ilgili servise asenkron bir çağrı yapılabilir ve sonuç müşteriye gösterilebilir.

Bin numarası sorgulaması için kredi/debit kart numarasının ilk 6 hanesi JSON formatında hazırlanarak, https://api.ipara.com/rest/payment/bin/lookup 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

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 + binNumber + 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 + binNumber + transactionDate")]]
token = “ASKJH98675ASDASDPO:jhsa/gd+89dfg0df6SA/dfg8967==”

Zorunlu

Servis Girdi Parametreleri

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

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

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

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.

Örnek Çağrılar


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

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

//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": "492130" }
//Response
{
    "bankId": 67,
    "bankName": "Yapı kredi",
    "cardFamilyName": "WORLD",
    "supportsInstallment": 0,
    "supportedInstallments": [
        1
    ],
    "type": 1,
    "serviceProvider": 2,
    "result": 1,
    "cardThreeDSecureMandatory": 0,
    "merchantThreeDSecureMandatory": 0,
    "cvcMandatory": 0,
    "businessCard": 0
}

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ı. 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.

Opsiyonel
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 ile Ödeme

Mağaza, müşteri üyelik bilgilerini ve kart bilgilerini aldıktan sonra, ödeme verilerini http post yöntemi ile https://www.ipara.com/3dgate adresine mağaza tarafından üretilen her bir işlem için benzersiz olan tekil sipariş kodu ile post eder. 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. İşlem sonucu başarılı ise 3D Secure işlem sonucundaki bilgileri 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.

ÖNEMLİ NOT: Ödeme tahsilatı, 2. adımda olan web servis istek sonucunda gerçekleşir.

Banka 3D Secure Sorgulama İsteği (1. Adım)


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
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.

Opsiyonel
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
purchaserName

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

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
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.
Zorunlu
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çılıcaktır. Bu durumda göndermiş olduğunuz url bilgisini control etmenizi rica ederiz.
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 Çı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.
threeDSecureCode Ödeme işlemini tamamlamanız için bu bilgiyi 2. adım web servis isteğinde threeDSecureCode alanına eklemeniz gerekmektedir.

Örnek Çağrılar


            //Request
            Settings settings = new Settings
            {
                PublicKey = "", //"Public Magaza Anahtarı",
                PrivateKey = "", //"Private Magaza Anahtarı",
                BaseUrl = "https://www.ipara.com/3dgate",
                Version = "1.0",
                Mode = "T", // Test -> T / Prod -> P
                HashString = string.Empty
            };
            var request = new ThreeDPaymentInitRequest();
            request.OrderId = Guid.NewGuid().ToString();
            request.Echo = "Echo";
            request.Mode = settings.Mode;
            request.Version = settings.Version;
            request.Amount = "10000"; // 100 tL
            request.CardOwnerName = nameSurname;
            request.CardNumber = cardNumber;
            request.CardExpireMonth = month;
            request.CardExpireYear = year;
            request.Installment = installment;
            request.Cvc = cvc;
            request.CardId = cardId;
            request.UserId = userId;
            request.PurchaserName = "Murat";
            request.PurchaserSurname = "Kaya";
            request.PurchaserEmail = "murat@kaya.com";
            request.SuccessUrl = Request.Url +"Home/ThreeDResultSuccess";
            request.FailUrl = Request.Url+"Home/ThreeDResultFail";
            var form = ThreeDPaymentInitRequest.Execute(request, settings);
            System.Web.HttpContext.Current.Response.Clear();
            System.Web.HttpContext.Current.Response.Write(form);
            System.Web.HttpContext.Current.Response.End();
                

//request
        Settings settings = new Settings();
            
        settings.PublicKey = ""; //"Public Magaza Anahtarı",
        settings.PrivateKey = ""; //"Private Magaza Anahtarı",
        settings.BaseUrl = "https://www.ipara.com/3dgate";
        settings.Version = "1.0";
        settings.Mode = "T"; // Test -> T / Prod -> P
        settings.HashString = "";
            
        ThreeDPaymentInitRequest initRequest = new ThreeDPaymentInitRequest();
        UUID uuid = UUID.randomUUID();
        initRequest.OrderId = uuid.toString();
        initRequest.echo = "Echo";
        initRequest.mode = settings.Mode;
        initRequest.Version = settings.Version;
        initRequest.Amount = "10000"; // 100 tL
        initRequest.CardOwnerName = "Fatih Coşkun";
        initRequest.CardNumber = "4282209027132016";
        initRequest.CardExpireMonth = "05";
        initRequest.CardExpireYear = "18";
        initRequest.Installment = "1";
        initRequest.Cvc = "000";
        initRequest.CardId = "";
        initRequest.UserId = "";
        initRequest.PurchaserName = "Murat";
        initRequest.PurchaserSurname = "Kaya";
        initRequest.PurchaserEmail = "murat@kaya.com";
        String url = request.getRequestURL().toString();
        String baseURL = url.substring(0, url.length() - request.getRequestURI().length()) + request.getContextPath() + "/";       
        initRequest.SuccessUrl = baseURL +"ThreeDResultSuccess.htm";
        initRequest.FailUrl = baseURL+"ThreeDResultFail.htm";
        String form = ThreeDPaymentInitRequest.Execute(initRequest, settings);
        out.println(form); 

//request                                  
$settings = new Settings();
$settings->PublicKey = ""; //"Public Magaza Anahtarı",
$settings->PrivateKey = ""; //"Private Magaza Anahtarı",
$settings->BaseUrl = "https://www.ipara.com/3dgate";
$settings->Version = "1.0";
$settings->Mode = "T"; // Test -> T / Prod -> P
$settings->HashString = "";
$request = new ThreeDPaymentInitRequest();
$request->OrderId = Helper::Guid();
$request->Echo = "Echo";
$request->Mode = $settings->Mode;
$request->Version = $settings->Version;
$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->CardId = "";
$request->UserId = "";
$request->PurchaserName = "Murat";
$request->PurchaserSurname = "Kaya";
$request->PurchaserEmail = "murat@kaya.com";
$request->SuccessUrl = "http://localhost:5000/success.php";
$request->FailUrl = "http://localhost:5000/fail.php";
 $response=ThreeDPaymentInitRequest::execute($request,$settings);   
 print  $response;

                //Request
const obj = {
    orderId: Guid.raw(),
    cardOwnerName: "Murat Kaya",
    cardNumber: "4282209004348015",
    cardExpireMonth: "06",
    cardExpireYear: "23",
    cardCvc: "000",
    userId: "",
    cardId: "",
    installment: "1",
    amount: "10000",
    echo: "",
    purchaserName: "Murat",
    purchaserSurname: "Kaya",
    purchaserEmail: "murat@kaya.com",
    successUrl: "http://localhost:3000/api/success",
    failureUrl: "http://localhost:3000/api/error"
}
res.render("3d-form", {
form: ipara.ThreeDPaymentInitRequest(obj)   
})


//request
      @settings.BaseUrl="https://www.ipara.com/3dgate"
      req = Threedpaymentrequest.new 
      req.OrderId = SecureRandom.uuid
      req.Echo = "Echo"
      req.Mode = @settings.Mode
      req.Version = @settings.Version
      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 = "true"
      req.UserId=""
      req.CardId=""
      req.PurchaserName = "Murat"
      req.PurchaserSurname = "Kaya"
      req.PurchaserEmail = "murat@kaya.com"
      req.SuccessUrl = "http://localhost:3000/home/threeDResultSuccess"
      req.FailUrl = "http://localhost:3000/home/threeDResultFail"
      @returnData= req.execute(req,@settings)
      render inline: @returnData

      //request
                                       
    config = Configs(
 
    '', #"Public Magaza Anahtarı
    '', #"Private Magaza Anahtarı
    'https://api.ipara.com/', #BaseUrl
    'https://www.ipara.com/3dgate', #ThreeDInquiryUrl
    'T', #Mode Test için T, Prod için P kullanınız.
    '', #Echo
    '1.0',  #Version
    '', #HashString
   
  )
        req = ThreedPaymentRequest()
        req.OrderId = str(randint(1, 10000))
        req.Echo = "Echo"
        req.Mode = config.Mode
        req.Version = config.Version
        req.Amount = "10000"
        req.CardOwnerName = request.POST.get('nameSurname')
        req.CardNumber = request.POST.get('cardNumber')
        req.CardExpireMonth = request.POST.get('month')
        req.CardExpireYear = request.POST.get('year')
        req.Installment = request.POST.get('installment')
        req.Cvc = request.POST.get('cvc')
        req.ThreeD = "true"
        req.UserId = ""
        req.CardId = ""
        req.PurchaserName = "Murat"
        req.PurchaserSurname = "Kaya"
        req.PurchaserEmail = "murat@kaya.com"
        req.SuccessUrl = "http://localhost:8000/threeDResultSuccess/"
        req.FailUrl = "http://localhost:8000/threeDResultFail/"
        message = req.execute(req, config)

 
            
     //Request 
            <FORM action='https://www.ipara.com/3dgate' method='post'>
            <INPUT type='text' name='orderId' value='b3091d88-6320-4446-be6c-7a1f8e6e73c7' />
            <INPUT type='text' name='amount' value='2500' />
            <INPUT type='text' name='cardOwnerName' value='Murat Kaya' />
            <INPUT type='text' name='cardNumber' value='4282209004348015' />
            <INPUT type='text' name='cardExpireMonth' value='06' />
            <INPUT type='text' name='cardExpireYear' value='23' />
            <INPUT type='text' name='installment' value='1' />
            <INPUT type='text' name='cardCvc' value='123' />
            <INPUT type='text' name='mode' value='T' />
            <INPUT type='text' name='purchaserName' value='Murat' />
            <INPUT type='text' name='purchaserSurname' value='Kaya' />
            <INPUT type='text' name='purchaserEmail' value='murat@kaya.com' />
            <INPUT type='text' name='successUrl' value='http://www.magazaniz.com/3dResultSuccess' />
            <INPUT type='text' name='failureUrl' value='http://www.magazaniz.com/3dResultFailure' />
            <INPUT type='text' name='echo' value='Echo Field' />
            <INPUT type='text' name='version' value='1.0' />
            <INPUT type='text' name='transactionDate' value='2014-01-03 14:34:57' />
            <INPUT type='text' name='token' value='ABVQ03C77WPTODQN:aWa+ZTNZFxOOH8mXQC/iuRh8GsA=' />
            <INPUT type='submit' value='Öde' />
        </FORM>
//Response
<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.0 Transitional//EN'>
<HTML>
<BODY>
            <FORM action='http://www.magazaniz.com/3dResultSuccess' method='post' id='iParaMerchantResponseForm'>
            <INPUT type='hidden' name='echo' value='echo' />
            <INPUT type='hidden' name='result' value='1' />
            <INPUT type='hidden' name='amount' value='2500' />
            <INPUT type='hidden' name='publicKey' value='ABVQ03C77WPTODQN' />
            <INPUT type='hidden' name='orderId' value=' b3091d88-6320-4446-be6c-7a1f8e6e73c7'=b3091d88-6320-4446-be6c-7a1f8e6e73c7' />
            <INPUT type='hidden' name='mode' value='T' />
            <INPUT type='hidden' name='errorCode' value='' />
            <INPUT type='hidden' name='errorMessage' value='' />
            <INPUT type='hidden' name='transactionDate' value='2014-01-03 19:09:49' />
            <INPUT type='hidden' name='hash' value='LwN0bfVa+2JBQn4u8IATscueKrw=' />
            <INPUT type='hidden' name='threeDSecureCode' value='tQuJVor5Do7qA5wk47QIUY1ycndbDbgfV3t4UXpdFSe+wcmMBFvG0su47IlJ1WVycaBDjPM6OohLEDi1J6bPu7THuXYxThm7L4+K2CzL4dA=' />
    </FORM>
</BODY>
</HTML>
                              

3D Secure Başarılı Sorgulama Sonucu Onay İsteği (2. Adım)

Eğer 3D Secure sorgulama sonucunda başarılı cevap alınmış ise aşağıda anlatılan servis entegrasyonu gerçekleştirilerek ödeme onayı sağlanarak tahsilat gerçekleştirilir ve ödeme akışı sonlanır. Eğer 3D Secure sorgulama sonucu başarısız ise 1. adımda gelen hata mesajını kullanıcıya göstererek işlem akışını sonlandırmanız gerekmektedir.

İ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 + threeDSecureCode + 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 + threeDSecureCode + 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
ÖNEMLİ NOT: 3D Secure http post isteği sırasında gönderilen mode bilgisi ile aynı olmalıdır.

Zorunlu
threeD

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

Zorunlu
orderId

3D Secure http post isteği sırasında kullanılan orderId bilgisidir.

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
threeDSecureCode 3D Secure http Post işlemi sonucunda elde edilen 3D Secure güvenlik bilgisi.
3D Secure doğrulama sonucunda dönen threeDSecureCode bilgisini buraya eklemeniz gerekmektedir.
Zorunlu
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
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
                
            ThreeDPaymentInitResponse paymentResponse = new ThreeDPaymentInitResponse();
            paymentResponse.OrderId = Request.Form["orderId"];
            paymentResponse.Result = Request.Form["result"];
            paymentResponse.Amount = Request.Form["amount"];
            paymentResponse.Mode = Request.Form["mode"];
            if (Request.Form["errorCode"] != null)
                paymentResponse.ErrorCode = Request.Form["errorCode"];
            if (Request.Form["errorMessage"] != null)
                paymentResponse.ErrorMessage = Request.Form["errorMessage"];
            if (Request.Form["transactionDate"] != null)
                paymentResponse.TransactionDate = Request.Form["transactionDate"];
            if (Request.Form["hash"] != null)
                paymentResponse.Hash = Request.Form["hash"];
            if (Helper.Validate3DReturn(paymentResponse, settings))
            {
                var request = new ThreeDPaymentCompleteRequest();
                #region Request New
                request.OrderId = Request.Form["orderId"];
                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 = "true";
                request.ThreeDSecureCode = Request.Form["threeDSecureCode"];
                #endregion
                #region Sipariş veren bilgileri
                request.Purchaser = new Purchaser();
                request.Purchaser.BirthDate = "1986-07-11";
                request.Purchaser.GsmPhone = "5881231212";
                request.Purchaser.IdentityNumber = "1234567890";
                #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
               
                var response = ThreeDPaymentCompleteRequest.Execute(request, settings);
                return View(response);
            }
            else
            {
                return RedirectToAction("ThreeDResultFail");
            }
          

//request
            Settings  settings = new Settings ();
            settings.PublicKey = ""; //"Public Magaza Anahtarı",
            settings.PrivateKey = ""; //"Private Magaza Anahtarı",
            settings.BaseUrl = "https://api.ipara.com/"; //Test için 
            settings.Version = "1.0";
            settings.Mode = "T"; // Test -> T / Prod -> P
            settings.HashString="";
              
             ThreeDPaymentInitResponse paymentResponse = new ThreeDPaymentInitResponse();
            paymentResponse.orderId = request.getParameter("orderId");
            paymentResponse.result = request.getParameter("result");
            paymentResponse.mode = request.getParameter("mode");
            paymentResponse.amount = request.getParameter("amount");
            
            if (request.getParameter("errorCode") != null)
                paymentResponse.errorCode = request.getParameter("errorCode");
            if (request.getParameter("errorMessage") != null)
                paymentResponse.errorMessage = request.getParameter("errorMessage");
            if (request.getParameter("transactionDate") != null)
                paymentResponse.transactionDate = request.getParameter("transactionDate");
            if (request.getParameter("hash") != null)
                paymentResponse.hash = request.getParameter("hash");
    
            
         if (Helper.Validate3DReturn(paymentResponse, settings))
            {
                ThreeDPaymentCompleteRequest completeRequest = new ThreeDPaymentCompleteRequest();
                completeRequest.OrderId = request.getParameter("orderId");
                completeRequest.echo = "Echo";
                completeRequest.mode = settings.Mode;
                completeRequest.Amount = "10000"; // 100 tL
                completeRequest.CardOwnerName = "Fatih Coşkun";
                completeRequest.CardNumber = "4282209027132016";
                completeRequest.CardExpireMonth = "05";
                completeRequest.CardExpireYear = "18";
                completeRequest.Installment = "1";
                completeRequest.Cvc = "000";
                completeRequest.ThreeD = "true";
                completeRequest.ThreeDSecureCode = request.getParameter("threeDSecureCode");
             
                completeRequest.Purchaser = new Purchaser();
                completeRequest.Purchaser.BirthDate = "1986-07-11";
                completeRequest.Purchaser.GsmPhone = "5881231212";
                completeRequest.Purchaser.IdentityNumber = "1234567890";
             
            
                completeRequest.Purchaser.InvoiceAddress = new PurchaserAddress();
                completeRequest.Purchaser.InvoiceAddress.Name = "Murat";
                completeRequest.Purchaser.InvoiceAddress.SurName = "Kaya";
                completeRequest.Purchaser.InvoiceAddress.Address = "Mevlüt Pehlivan Mah. Multinet Plaza Şişli";
                completeRequest.Purchaser.InvoiceAddress.ZipCode = "34782";
                completeRequest.Purchaser.InvoiceAddress.CityCode = "34";
                completeRequest.Purchaser.InvoiceAddress.IdentityNumber = "1234567890";
                completeRequest.Purchaser.InvoiceAddress.CountryCode = "TR";
                completeRequest.Purchaser.InvoiceAddress.TaxNumber = "123456";
                completeRequest.Purchaser.InvoiceAddress.TaxOffice = "Kozyatağı";
                completeRequest.Purchaser.InvoiceAddress.CompanyName = "iPara";
                completeRequest.Purchaser.InvoiceAddress.PhoneNumber = "2122222222";
        
                completeRequest.Purchaser.ShippingAddress = new PurchaserAddress();
                completeRequest.Purchaser.ShippingAddress.Name = "Murat";
                completeRequest.Purchaser.ShippingAddress.SurName = "Kaya";
                completeRequest.Purchaser.ShippingAddress.Address = "Mevlüt Pehlivan Mah. Multinet Plaza Şişli";
                completeRequest.Purchaser.ShippingAddress.ZipCode = "34782";
                completeRequest.Purchaser.ShippingAddress.CityCode = "34";
                completeRequest.Purchaser.ShippingAddress.IdentityNumber = "1234567890";
                completeRequest.Purchaser.ShippingAddress.CountryCode = "TR";
                completeRequest.Purchaser.ShippingAddress.PhoneNumber = "2122222222";
                completeRequest.product = new ArrayList();
                Product p = new Product();
                p.Title = "Telefon";
                p.Code = "TLF0001";
                p.Price = "5000";
                p.Quantity = "1";
                completeRequest.product.add(p);
                p = new Product();
                p.Title = "Bilgisayar";
                p.Code = "BLG0001";
                p.Price = "5000";
                p.Quantity = "1";
                completeRequest.product.add(p);
               completeResponse= ThreeDPaymentCompleteRequest.Execute(completeRequest, settings);
            }
    

//request
$settings = new Settings();
$paymentResponse=new ThreeDPaymentInitResponse();
$paymentResponse->OrderId =$_POST['orderId'];
$paymentResponse->Result=$_POST['result'];
$paymentResponse->Amount=$_POST['amount'];
$paymentResponse->Mode=$settings->Mode;
$paymentResponse->ErrorCode=$_POST['errorCode'];
$paymentResponse->ErrorMessage=$_POST['errorMessage'];
$paymentResponse->TransactionDate=$_POST['transactionDate'];
$paymentResponse->Hash= $_POST['hash'];
if (Helper::Validate3DReturn($paymentResponse, $settings)) //3D Dönen Cevap Doğrulaması
{
    
        $request = new ThreeDPaymentCompleteRequest();
        $request->OrderId = $_POST['orderId'];
        $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 = "true";
        $request->ThreeDSecureCode = $_POST['threeDSecureCode'];
        #region Sipariş veren bilgileri
        $request->Purchaser = new Purchaser();
        $request->Purchaser->BirthDate = "1986-07-11";
        $request->Purchaser->GsmPhone = "5881231212";
        $request->Purchaser->IdentityNumber = "1234567890";
        #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=ThreeDPaymentCompleteRequest::execute($request,$settings);
}

//Request
const obj = {
    echo : "Echo",
    result : "1",
    amount : "10000",
    publicKey : settings.publicKey,
    orderId : "b3091d88-6320-4446-be6c-7a1f8e6e73c7",
    mode : "T",
    errorCode : "",
    errorMessage : "",
    transactionDate : "2014-01-03 21:08:51",
    hash : "yO5ACnF9FpsiV2/WBRRsDEBDRt8=",
    threeDSecureCode : "tQuJVor5Do7qA5wk47QIUY1ycndbDbgfV3t4UXpdFSe+wcmMBFvG0su47IlJ1WVycaBDjPM6OohLEDi1J6bPu7THuXYxThm7L4+K2CzL4dA=",
    threeD: "true",
    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.ThreeDPaymentCompleteRequest(obj).then(results => {
if (typeof results == "object" && results.error) return console.log(results.error)
parseString(results, function (err, result) {
if (err) throw new Error(err);
res.render("result", {
results: result.authResponse,
status: "İşlem Başarılı"
})
});
}).catch(err=>{
console.log(err)
})


//Request
      paymentresponse = Threedinitresponse.new
      paymentresponse.OrderId =params[:orderId]
      paymentresponse.Result =params[:result]
      paymentresponse.Amount =params[:amount]
      paymentresponse.Mode =params[:mode]
      if (params[:errorCode] != nil)
          paymentresponse.ErrorCode =params[:errorCode]
      end
      if (params[:errorMessage] != nil)
          paymentresponse.ErrorMessage =params[:errorMessage]
      end
      if (params[:transactionDate] != nil)
          paymentresponse.TransactionDate =params[:transactionDate]
      end
      if (params[:hash] != nil)
          paymentresponse.Hash =params[:hash]
          end
      if Core::Helper::Validate3DReturn(paymentresponse,@settings)
    #ApiPaymentResponse çağrılacak
    req=Threedpaymentcompleterequest.new
    
    req.OrderId = params[:orderId]
    req.Echo = "Echo"
    req.Mode =  @settings.Mode
    req.Amount = "10000" # 100 tL
    req.CardOwnerName ="Fatih Coşkun"
    req.CardNumber = "4282209027132016"
    req.CardExpireMonth = "05"
    req.CardExpireYear = "18"
    req.Installment = "1"
    req.Cvc = "000"
    req.ThreeD = "true"
    req.ThreeDSecureCode=params[:threeDSecureCode].force_encoding("UTF-8")
    req.ThreeDSecureCode=req.ThreeDSecureCode
    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
     @settings.BaseUrl= "https://api.ipara.com/"

        //Request
        paymentResponse = ThreedInitResponse()
        paymentResponse.OrderId = request.POST.get('orderId')
        paymentResponse.Result = request.POST.get('result')
        paymentResponse.Amount = request.POST.get('amount')
        paymentResponse.Mode = request.POST.get('mode')
        if request.POST.get('errorCode') != "":
            paymentResponse.ErrorCode = request.POST.get('errorCode')
        if request.POST.get('transactionDate') != "":
            paymentResponse.TransactionDate = request.POST.get('transactionDate')
        if request.POST.get('hash') != "":
            paymentResponse.Hash = request.POST.get('hash')
        helper = Helper()
        if helper.Validate3DReturn(paymentResponse, config):
            req = ThreedPaymentCompleteRequest()
            req.OrderId = request.POST.get('orderId')
            req.Echo = "Echo"
            req.Mode = config.Mode
            req.Amount = "10000"
            req.CardOwnerName = "Fatih Coşkun"
            req.CardNumber = "4282209027132016"
            req.CardExpireMonth = "05"
            req.CardExpireYear = "18"
            req.Installment = "1"
            req.Cvc = "000"
            req.ThreeD = "true"
            req.ThreeDSecureCode = request.POST.get('threeDSecureCode')
            req.UserId = ""
            req.CardId = ""
            # Sipariş veren bilgileri
            req.Purchaser = req.PurchaserClass()
            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.tcCertificate = "1234567890"
            req.Purchaser.clientIp = "127.0.0.1"
            # region Fatura bilgileri
            req.Purchaser.invoiceAddress = req.PurchaserAddress()
            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.tcCertificate = "1234567890"
            req.Purchaser.invoiceAddress.country = "TR"
            req.Purchaser.invoiceAddress.taxNumber = "123456"
            req.Purchaser.invoiceAddress.taxOffice = "Kozyatağı"
            req.Purchaser.invoiceAddress.companyName = "iPara"
            req.Purchaser.invoiceAddress.phoneNumber = "2122222222"
            # region Kargo Adresi bilgileri
            req.Purchaser.shippingAddress = req.PurchaserAddress()
            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.tcCertificate = "1234567890"
            req.Purchaser.shippingAddress.country = "TR"
            req.Purchaser.shippingAddress.phoneNumber = "2122222222"
            # Ürün Bilgileri
            req.Products = []
            product1 = req.Product()
            product1.title = "Telefon"
            product1.code = "TLF0001"
            product1.price = "5000"
            product1.quantity = "1"
            req.Products.append(product1)
            product2 = req.Product()
            product2.title = "Bilgisayar"
            product2.code = "BLG0001"
            product2.price = "5000"
            product2.quantity = "1"
            req.Products.append(product2)
            config.BaseUrl = "https://api.ipara.com/"
            message = req.execute(req, config)
 
            
     //Request 
            <?xml version="1.0" encoding="UTF-8" ?>
<auth>
            <threeD>true</threeD>
            <orderId>b3091d88-6320-4446-be6c-7a1f8e6e73c7</orderId>
            <echo>Echo Bilgisi</echo>
            <amount>2500</amount>
            <mode>T</mode>
            <threeDSecureCode>
        tQuJVor5Do7qA5wk47QIUY1ycndbDbgfV3t4UXpdFSe+wcmMBFvG0su47IlJ1WVycaBDjPM6OohLEDi1J6bPu7THuXYxThm7L4+K2CzL4dA=
    </threeDSecureCode>
            <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>
            <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>
                              
            

Ö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>