ÖDEME FORMUNDAN BİLGİLERİN ALINARAK AKTARILMASI
1) Müşteri, üye işyeri web sayfasında satın alma isteminde bulunur.
2) Üye işyeri bu istek doğrultusunda, Müşteriye ödeme seçeneklerini sunduğu sayfaya yönlendirir.
3) Müşterinin ödeme için bilgileri girmesi ve onaylaması sonrasında, Üye işyeri sayfası aşağıda belirlenmiş verileri aşağıdaki sırayla, PAYTR bilgisi dahilinde olan üye işyeri parolası ve üye işyeri gizli anahtarı ile önce sha256 algoritması ve HMAC(http://en.wikipedia.org/wiki/Hash-based_message_authentication_code) yöntemi ile şifreleyerek token oluşturur. Sonrasında token'ı base64 hale dönüştürür.
Token üretiminde kullanılacak veriler
Alan adı / tipi | Açıklama | Zorunlu | Kısıtlar |
---|---|---|---|
merchant_id (string) | Mağaza No: PayTR tarafından size verilen Mağaza numarası | ||
user_ip (string) | Müşteri ip: İstek anında aldığınız müşteri ip numarası(Önemli: Lokal makinenizde yapacağınız denemelerde mutlaka dış IP adresini gönderdiğinizden emin olun) | Evet | En fazla 39 karakter (ipv4) |
merchant_oid (string) | Mağaza sipariş no: Satış işlemi için belirlediğiniz benzersiz sipariş numarası.(Not: Sipariş no ödeme sonuç bildirimi esnasında geri dönen değerler arasındadır) | Evet | En fazla 64 karakter,Alfa numerik |
email (string) | Müşteri eposta adresi: Müşterinin sisteminizde kayıtlı olan veya form aracılığıyla aldığınız eposta adresi | Evet | En fazla 100 karakter |
payment_amount(integer) | Ödeme tutarı: Siparişe ait toplam ödeme tutarı | Evet | Ayraç olarak yalnızca nokta(.) gönderilmelidir |
payment_type(string) | Ödeme tipi | Evet | ('card') |
installment_count(int) | Taksit sayısı | Evet | 0, 2, 3, 4, 5, 6, 7, 8, 9, 10,11,12 |
currency(string) | Para birimi | Hayır | TL, EUR, USD, GBP, RUB(Boş ise TL kabul edilir) |
test_mode | Mağaza canlı modda iken test işlem yapmak için 1 olarak gönderilebilir | Hayır | 0 veya 1 |
non_3d | Non 3D işlem yapabilmek için 1 gönderilebilir | Evet | 0 veya 1 |
request_exp_date(int) | Sıfırdan farklı bir değer gönderilmesi durumunda,ödeme işlemi bu süre öncesinde tamamlanmalıdır.(Ödeme sırasında sisteminizde fiyat güncellemesi olması durumuna karşı güvenlik amaçlı kullanabilirsiniz) | Hayır | Timestamp |
4) Üye iş yeri, ürettiği token, token üretmek için kullandığı veriler ve token üretimi için gerekmeyen ancak ödeme işlemi için gerekli veriler ile birlikte https://www.paytr.com/odeme adresine POST metodu ile gönderir. (Önemli Uyarı: Üye iş yeri sayfasındaki form, kart bilgileri içerdiğinden sadece PayTR’a POST edilmelidir. Üye iş yerinin kendi sunucusuna POST kesinlikle yapılmamalıdır.)
POST REQUEST içeriğinde gönderilecek değerler:
Alan adı / tipi | Açıklama | Zorunlu | Kısıtlar |
---|---|---|---|
merchant_id (integer) | Mağaza no: PayTR tarafından size verilen Mağaza numarası | Evet | |
paytr_token (string) | paytr_token: İsteğin sizden geldiğine ve içeriğin değişmediğine emin olmamız için oluşturacağınız değerdir | Evet | Hesaplama ile ilgili olarak örnek kodlara bakmalısınız |
user_ip (string) | Müşteri ip: İstek anında aldığınız müşteri ip numarası (Önemli: Lokal makinenizde yapacağınız denemelerde mutlaka dış IP adresini gönderdiğinizden emin olun) | Evet | En fazla 39 karakter (ipv4) |
merchant_oid (string) | Mağaza sipariş no: Satış işlemi için belirlediğiniz benzersiz sipariş numarası. (Not: Sipariş no ödeme sonuç bildirimi esnasında geri dönen değerler arasındadır) | Evet | En fazla 64 karakter, Alfa numerik |
email (string) | Müşteri eposta adresi: Müşterinin sisteminizde kayıtlı olan veya form aracılığıyla aldığınız eposta adresi | Evet | En fazla 100 karakter |
payment_type(string) | Ödeme tipi | Evet | ('card') |
payment_amount (double), ondalık olarak nokta (.) ve noktadan sonra iki hane | Ödeme tutarı: Siparişe ait toplam ödeme tutarı | Evet | Örn: 100.99 veya 150 veya 1500.35 |
installment_count(int) | Taksit sayısı | Evet | 0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 |
card_type(string) | Kart tipi (Taksitli işlemlerde kullanmak üzere) | Hayır | advantage, axess, combo, bonus, cardfinans, maximum, paraf, world, saglamkart |
currency(string) | Para birimi | Hayır | TL(veya TRY), EUR, USD (Boş ise TL kabul edilir) |
client_lang(string) | Ödeme sürecinde kullanılacak dil | Hayır | Türkçe için tr veya İngilizce için en (Boş gönderilirse tr geçerli olur) |
test_mode | Mağaza canlı modda iken test işlem yapmak için 1 olarak gönderilebilir | Hayır | 0 veya 1 |
non_3d | Non 3D işlem yapabilmek için 1 gönderilebilir | Evet | 0 veya 1 |
non3d_test_failed | Non 3D işlemde, başarısız işlem durumunu test etmek için 1 gönderilir (test_mode ve non_3d değerleri 1 ise dikkate alınır!) | Hayır | 0 veya 1 |
cc_owner(string) | Kart sahibi | Evet | 50 karakter |
card_number(string) | Kart numarası | Evet | 16 karakter |
expiry_month(string) | Kart son kullanma tarihi(Ay) | Evet | 1, 2, 3, .. , 11, 12 |
expiry_year(string) | Kart son kullanma tarihi(Yıl) | Evet | 20, 21, 22,… |
cvv(string) | Kart güvenlik kodu | Evet | 3 karakter |
merchant_ok_url(string) | Müşterinin başarılı ödeme sonrası yönledirileceği sayfa (Örn.Siparişlerim takip sayfası)(Uyarı: Müşteri bu sayfaya ulaştığında henüz sipariş onaylanmış olmaz) | Evet | En fazla 400 karakter Uyarı: Tam URL olmalıdır |
merchant_fail_url(string) | Müşterinin ödemesi sırasında beklenmeyen bir hatada yönlendirileceği sayfa | Evet | En fazla 400 karakter Uyarı: Tam URL olmalıdır |
user_name (string) | Müşteri adı ve soyadı: Müşterinin sisteminizde kayıtlı olan veya form aracılığıyla aldığınız adı ve soyadı | Evet | En fazla 60 karakter |
user_address (string) | Müşteri adresi: Müşterinin sipariş sırasında ilettiği adresi | Evet | En fazla 400 karakter |
user_phone (string) | Müşteri telefon numarası: Müşterinin sipariş sırasında ilettiği telefon numarası | Evet | En fazla 20 karakter |
user_basket (string) | Sepet içeriği: Müşterinin siparişindeki ürün/hizmet bilgilerini içermelidir | Evet | JSON tipinde(Örnek kodları inceleyin) |
debug_on (int) | Hata döndür: PayTR’a yanlış veya eksik bilgi iletilmesi durumunda sistemden hata mesajı döndürülmesi için 1 gönderilmelidir | Hayır | 0 veya 1(Entegrasyon ve test sürecinde hataları tespit etmek için mutlaka 1 |
sync_mode (int) | Sync Mode: Ödeme isteğinin gönderilmesi ardından işlem sonucuna göre başarılı veya başarısız sayfasına yönlendirme yapılmadan, JSON formatında olan yanıt direkt olarak istek sonucuna döner. Ek olarak; işleme ait detaylar tanımlı olan Bildirim URL adresine gönderilir. Sync mode sonucunda dönen status alanının alabileceği değerler “failed”, “wait_callback” ve “success” şeklindedir.Not: Bu işlem için mağazanızda Non3D yetkisinin açık olması gerekmektedir. | Hayır | 0 veya 1(İlgili yetkinin mağazaya tanımlanabilmesi için tarafımıza talep iletilmesi gerekmektedir. Birimlerimizin onayından geçmesi halinden yetki mağazaya tanımlanacaktır.) |
SYNC MODE YANITLARI
status | msg (Açıklama) | utoken, ctoken (Kart saklama yapıldıysa) |
---|---|---|
failed | “Henüz devam eden bir işleminiz bulunmaktadır, sonuçlandıktan sonra tekrar deneyebilirsiniz.” veya farklı bir hata mesajı. | Hayır |
wait_callback | Ödeme Kontrol Ediliyor, Bildirimi Bekleyin. | Evet |
success | Ödeme Başarılı. | Evet |
5) PAYTR sistemi, gönderilen bilgiler üzerinden kontrol ve doğrulamaları yapar ve ödeme sonucuna göre üye işyerinin vermiş olduğu merchant_ok_url veya merchant_fail_url adresine müşteriyi yönlendirir. Merchant_ok_url’e yönlenme durumunda POST içeriğinde herhangi bir veri gönderilmez. Merchant_fail_url’e yönlendirme durumunda POST içeriğinde fail_message alanında ödemenin neden başarısız olduğu bilgisi bulunur. Bu bilgi müşteriye doğrudan gösterilebilir şekilde formatlanmış bir mesajdır
6) Ödeme girişiminin sonucu, Üye işyeri web sitesindeki Bildirim URL’e(Callback URL), token, üye işyeri sipariş numarası ve ödeme durumu vb. bilgisinin post edilmesiyle üye işyerine bildirilir.
Yukarıda anlatılan aşamaların tamamlanmasıyla birlikte, ödeme işleminde müşterinin etkileşimde bulunacağı kısım entegrasyonda böylece tamamlanmış olur. ANCAK; entegrasyonunuz henüz tamamlanmamıştır, 2. ADIM ödeme sonucunu (başarılı/başarısız) almanız ve siparişi onaylamanız / iptal etmeniz için gereklidir.
ÖNEMLİ UYARI: PayTR ödeme alt yapısı asenkron olarak çalışmaktadır. Bu nedenle ödeme tamamlandığında müşteri merchant_ok_url'e yönlendirilirken, ödemenin kesin sonucu (Başarılı ya da Başarısız sonucu) Bildirim URL'ye POST ile gönderilmektedir. merchant_ok_url'e herhangi bir veri POST edilmemektedir, bu nedenle merchant_ok_url olarak belirttiğiniz sayfada sipariş onay/iptal gibi işlem yapmamalısınız.
Odeabank Kartlar Hakkında: Odeabank Axess Bank'O Card kartlar ile en fazla 3 taksit yapılmaktadır. Bu nedenle ilgili kartlar için taksit sayısını 3’ten fazla gönderemezsiniz.
<!doctype html>
<html>
<head>
<meta charset="UTF-8">
</head>
<?php
$merchant_id = 'MAGAZA_NO';
$merchant_key = 'XXXXXXXXXXX';
$merchant_salt = 'YYYYYYYYYYY';
$merchant_ok_url="http://site-ismi/basarili";
$merchant_fail_url="http://site-ismi/basarisiz";
$user_basket = htmlentities(json_encode(array(
array("Altis Renkli Deniz Yatağı - Mavi", "18.00", 1),
array("Pharmasol Güneş Kremi 50+ Yetişkin & Bepanthol Cilt Bakım Kremi", "33,25", 2),
array("Bestway Çocuklar İçin Plaj Seti Beach Set ÇANTADA DENİZ TOPU-BOT-KOLLUK", "45,42", 1)
)));
srand(time(null));
$merchant_oid = rand();
$test_mode="0";
//3d'siz işlem
$non_3d="0";
//Ödeme süreci dil seçeneği tr veya en
$client_lang = "tr";
//non3d işlemde, başarısız işlemi test etmek için 1 gönderilir (test_mode ve non_3d değerleri 1 ise dikkate alınır!)
$non3d_test_failed="0";
if( isset( $_SERVER["HTTP_CLIENT_IP"] ) ) {
$ip = $_SERVER["HTTP_CLIENT_IP"];
} elseif( isset( $_SERVER["HTTP_X_FORWARDED_FOR"] ) ) {
$ip = $_SERVER["HTTP_X_FORWARDED_FOR"];
} else {
$ip = $_SERVER["REMOTE_ADDR"];
}
$user_ip = $ip;
$email = "testnon3d@paytr.com";
// 100.99 TL ödeme
$payment_amount = "100.99";
$currency="TL";
//
$payment_type = "card";
// $card_type = "bonus"; // Alabileceği değerler; advantage, axess, combo, bonus, cardfinans, maximum, paraf, world, saglamkart
// $installment_count = "5";
$post_url = "https://www.paytr.com/odeme";
$hash_str = $merchant_id . $user_ip . $merchant_oid . $email . $payment_amount . $payment_type . $installment_count. $currency. $test_mode. $non_3d;
$token = base64_encode(hash_hmac('sha256',$hash_str.$merchant_salt,$merchant_key,true));
?>
<body>
<form action="<?php echo $post_url;?>" method="post">
Kart Sahibi Adı: <input type="text" name="cc_owner" value="TEST KARTI"><br>
Kart Numarası: <input type="text" name="card_number" value="9792030394440796"><br>
Kart Son Kullanma Ay: <input type="text" name="expiry_month" value="12" ><br>
Kart Son Kullanma Yıl: <input type="text" name="expiry_year" value="99"><br>
Kart Güvenlik Kodu: <input type="text" name="cvv" value="000"><br>
<input type="hidden" name="merchant_id" value="<?php echo $merchant_id;?>">
<input type="hidden" name="user_ip" value="<?php echo $user_ip;?>">
<input type="hidden" name="merchant_oid" value="<?php echo $merchant_oid;?>">
<input type="hidden" name="email" value="<?php echo $email;?>">
<input type="hidden" name="payment_type" value="<?php echo $payment_type;?>">
<input type="hidden" name="payment_amount" value="<?php echo $payment_amount;?>">
<input type="hidden" name="currency" value="<?php echo $currency;?>">
<input type="hidden" name="test_mode" value="<?php echo $test_mode;?>">
<input type="hidden" name="non_3d" value="<?php echo $non_3d;?>">
<input type="hidden" name="merchant_ok_url" value="<?php echo $merchant_ok_url;?>">
<input type="hidden" name="merchant_fail_url" value="<?php echo $merchant_fail_url;?>">
<input type="hidden" name="user_name" value="Paytr Test">
<input type="hidden" name="user_address" value="test test test">
<input type="hidden" name="user_phone" value="05555555555">
<input type="hidden" name="user_basket" value="<?php echo $user_basket; ?>">
<input type="hidden" name="debug_on" value="1">
<input type="hidden" name="client_lang" value="<?php echo $client_lang; ?>">
<input type="hidden" name="paytr_token" value="<?php echo $token; ?>">
<input type="hidden" name="non3d_test_failed" value="<?php echo $non3d_test_failed; ?>">
<input type="hidden" name="installment_count" value="<?php echo $installment_count; ?>">
<input type="hidden" name="card_type" value="<?php echo $card_type; ?>">
<input type="submit" value="Submit">
</form>
</body>
</html>
Direkt API 1. Adım örnek kodları indirmek için tıklayın.