API V2

İstek Parametreleri (Request Parameters)

API Gateway Adresi :

                
                    POST https://api.payreks.com/gateway/v2
                
            

Payreks API Gateway'ine aşağıda belirtilen parametreler gelmelidir. Yanında * işareti olanlar zorunlu parametrelerdir.

  • api_key* (Zorunlu)
  • token* (Zorunlu)
  • return_type (Opsiyonel)
  • return_data* (Zorunlu)
  • callback_url* (Zorunlu)
  • redirect_url* (Zorunlu)
  • product_name* (Zorunlu)
  • user_id* (Zorunlu)
  • user_info* (Zorunlu)
  • user_ip* (Zorunlu)
  • amount* (Zorunlu)
  • payment* (Zorunlu)
  • commission_type (Opsiyonel)

Parametre Ayrıntıları :

Parametre Türü Açıklama Örnek
api_key string Oluşturduğunuz mağazanıza ait sisteme tanımlanmış api key'iniz. (Zorunlu) XXXX-XXXXXX-XXXXXX-XXXX
token string Oluşturduğunuz mağazanıza ait sisteme tanımlanmış api key ve secret key'in HMAC-MD5(HMAC-256) standartlarına göre şifrelenmiş hali. (Zorunlu) XXXXXXXXXX
return_type string API servisimizin sizin belirttiğiniz geri dönüş adresine verdiği cevabın formatını belirtir. (Opsiyonel) json
return_data string API servisimize gelen bu verinin aynı şekilde geri dönüş adresinize ileteceği değeri belirtir. Uygulamanızda yüklenecek bakiye, fatura numarası vs. değerini gönderiniz. (Zorunlu) 123
callback_url string Ödeme sonrası API servisimizin hangi adrese veri göndereceğini belirtir. (Opsiyonel) https://payreks.com/payreks_notify.php
redirect_url string Ödeme işlemi sonra alıcıyı yönlendirmek istediğiniz adresi giriniz. Ödeme sonucuna göre GET methoduyla status parametresi içinde "success,error,pending" sonucu döner. Örnek : https://payreks.com/payreks_redirect.php?status=success (Opsiyonel) https://payreks.com/payreks_redirect.php
product_name string Ödemesi yapılacak ürünün adını belirtir. (Zorunlu) 30 Kredi
user_id integer Alıcının sisteminizde kayıtlı ID numarasını belirtir. (Zorunlu) 801808
user_info string Alıcının sisteminize kayıtlı kullanıcı adı veya e-posta adresini belirtir. (Zorunlu) demouser, [email protected]
user_ip string Alıcının sisteminize giriş yaptığı anlık IP adresini belirtir. (Zorunlu) 123.12.34.123
amount string Ödemesi yapılacak ürünün fiyatını belirtir. (Zorunlu) 5.95
payment string Ödeme yöntemini belirtir. Alıcıya ödeme ekranında ödeme yöntemi seçtirmek istiyorsanız ödeme yöntemlerini virgül ile ayırarak gönderiniz. Örnek: 1,2,3,4 (Kredi Kartı : 1) (Havale/EFT : 2) (Mobil Ödeme : 3) (İninal Kart : 4) (Zorunlu) 1 veya 1,2,3,4
commission_type string Komisyonu kimin ödeyeceğini belirtir.
Siz ödemek istiyorsanız 1
Alıcının ödemesini istiyorsanız 2 (Opsiyonel)
1 veya 2

Cevap Parametreleri (Response Parameters)

Payreks Elektronik Cüzdan sisteminde kayıtlı mağazanızın belirttiğiniz geri dönüş linkine, aşağıdaki parametreler ile JSON formatında cevap verilmektedir.

  • status
  • link
  • message

Parametre Ayrıntıları :

Parametre Türü Açıklama
status integer API cevabının durumunu belirtir. 200,500,502,503,504,505,506 değerlerini içerir.
link string API cevabına göre mağaza ödeme ekranınızın URL'sini belirtir.
message string API cevabına göre hata mesajını belirtir.

status Parametresinin Alabileceği Değerler Ve Anlamları :

Değer Türü Anlam
200 integer İşlemin başarılı olması halinde dönen cevaptır.
502 integer Payreks API servisinin bakımda olduğunu ifade eder.
301,302,321,322,304,305,306,323 integer Parametrelerin eksik gönderildiğinde dönen cevaptır.
307,308,324,325,310,311,312,326 integer Parametrelerin hatalı gönderildiğinde dönen cevaptır.
328 integer Gönderdiğiniz ödeme yöntemi (payment) verisinin hatalı olduğunda dönen cevaptır.
313,314,315,316 integer Gönderdiğiniz parametrelere ait bir mağazanın bulunamadığında dönen cevaptır.
327 integer Gönderdiğiniz tutarın (amount) hatalı olduğunda dönen cevaptır.
314 integer Gönderdiğiniz tutarın (amount) hatalı olduğunda dönen cevaptır.
317 integer İstek atan servis IP'sinin, erişim izni olmadığında dönen cevaptır.
318 integer token parametresiyle gönderilen hash değerinin hatalı olduğunda dönen cevaptır.
318,320 integer Sistemsel hatayı ifade eder.

API Token Oluşturma

Bu bölüm Payreks API Gateway'ine gönderilen token değerinin nasıl oluşturulacağını gösterir.

Token İçin Gereken Değerler :

  • api_key
  • secret_key
Parametre Türü Açıklama Örnek
api_key string Oluşturduğunuz mağazanıza ait sisteme tanımlanmış api key'iniz. XXXX-XXXXXX-XXXXXX-XXXX
secret_key string Oluşturduğunuz mağazanıza ait sisteme tanımlanmış secret key'iniz. XXXXXXXXXX

Token Oluşturma Fonksiyonu (PHP) :

                
<?php
    $apiKey = "XXXX-XXXXXX-XXXXXX-XXXX";
    $secretKey = "XXXXXXXXXX";
    function APITokenCreate($apiKey, $secretKey)
    {
		$context = hash_init("sha256", HASH_HMAC, $secretKey);
		hash_update($context, $apiKey);
		$return = hash_final($context);
		$context2 = hash_init("md5", HASH_HMAC, $secretKey);
		hash_update($context2, $return);
		return hash_final($context2);
	}
    $APIToken = APITokenCreate($apiKey, $secretKey);
?>
                
            

İstek Örnek Kodlama

Bu bölüm Payreks API Gateway'ine gönderilen örnek bir kodlama (PHP) içerir.

                
<?php
    //Curl Function
    function curlRequest($url,$data)
	{
		$_ch = curl_init($url);
		curl_setopt($_ch, CURLOPT_CUSTOMREQUEST, "POST");
		if (is_array($data))
			curl_setopt($_ch, CURLOPT_POSTFIELDS, http_build_query($data));
		curl_setopt($_ch, CURLOPT_RETURNTRANSFER, true);
		curl_setopt($_ch, CURLOPT_SSL_VERIFYPEER, false);
		$_output = curl_exec($_ch);
		curl_close($_ch);
		return $_output;
	}

    //Token Create Function
    function APITokenCreate($apiKey, $secretKey)
    {
		$context = hash_init("sha256", HASH_HMAC, $secretKey);
		hash_update($context, $apiKey);
		$return = hash_final($context);
		$context2 = hash_init("md5", HASH_HMAC, $secretKey);
		hash_update($context2, $return);
		return hash_final($context2);
	}

    //Client IP Address Function
    function getRealIpAddress()
	{
		$ipAddress = null;
		if (isset($_SERVER['HTTP_CLIENT_IP']))
			$ipAddress = $_SERVER['HTTP_CLIENT_IP'];
		else if(isset($_SERVER['HTTP_X_FORWARDED_FOR']))
			$ipAddress = $_SERVER['HTTP_X_FORWARDED_FOR'];
		else if(isset($_SERVER['HTTP_X_FORWARDED']))
			$ipAddress = $_SERVER['HTTP_X_FORWARDED'];
		else if(isset($_SERVER['HTTP_X_CLUSTER_CLIENT_IP']))
			$ipAddress = $_SERVER['HTTP_X_CLUSTER_CLIENT_IP'];
		else if(isset($_SERVER['HTTP_FORWARDED_FOR']))
			$ipAddress = $_SERVER['HTTP_FORWARDED_FOR'];
		else if(isset($_SERVER['HTTP_FORWARDED']))
			$ipAddress = $_SERVER['HTTP_FORWARDED'];
		else if(isset($_SERVER['REMOTE_ADDR']))
			$ipAddress = $_SERVER['REMOTE_ADDR'];
		else
			$ipAddress = 'UNKNOWN';
		return $ipAddress;
	}

    $apiKey = "XXXX-XXXXXX-XXXXXX-XXXX"; //Mağaza api key
    $secretKey = "XXXXXXXXXX"; //Mağaza secret key

    $APIToken = APITokenCreate($apiKey, $secretKey); //Api token
    $userID = "801808"; //Alıcı ID numarası
    $userInfo = "[email protected]"; //Alıcı e-posta adresi veya kullanıcı adı
    $userIP = getRealIpAddress(); //Alıcı IP adresi
    $callbackUrl = "https://payreks.com/payreks_notify.php"; //Ödeme sonrası verilerin gönderileceği geri dönüş adresi
    $redirectUrl = "https://payreks.com/payreks_redirect.php"; //Ödeme sonrası alıcının yönlendirileceği adres
    $productName = "30 TL Bakiye"; //Ürün Adı
    $returnData = "30"; // Ödeme sonra hesaba yüklenecek değer (Aynı şekilde geri döner)
    $amount = 5.95; //Ödemesi yapılacak ürünün fiyatı
    $payment = "1,2,3,4"; //Kredi kartı : 1 , Havale/EFT : 2 , Mobil Ödeme : 3 , İninal Kart : 4
    $commission_type = "1"; //Komisyonu ben ödeyeceğim : 1 , Komisyonu alıcı ödeyecek : 2

    //Api istek adresi
    $requestURL = "https://api.payreks.com/gateway/v2";
    //Api istek dizisi
    $requestData = [
        "api_key" => $apiKey, // Zorunlu
		"token" => $APIToken, // Zorunlu
		"return_type" => "json", // Opsiyonel
        "return_data" => $returnData, // Zorunlu
        "callback_url" => $callbackUrl, // Opsiyonel
        "redirect_url" => $redirectUrl, // Opsiyonel
        "product_name" => $productName, // Zorunlu
		"user_id" => $userID, // Zorunlu
	    "user_info" => $userInfo, // Zorunlu
	    "user_ip" => $userIP, // Zorunlu
        "amount" => $amount, // Zorunlu
		"payment" => $payment, // Zorunlu
		"commission_type" => $commission_type, // Opsiyonel
	];

    $APIRequest = curlRequest($requestURL,$requestData);
    $APIResponse =  json_decode($APIRequest);

    $APIStatus = $APIResponse->status; //Api cevap durum kodu
    $APILink = $APIResponse->link; //Payreks ortak ödeme sayfası adresi
    $APIMessage = $APIResponse->message; //Payreks hata mesajı
?>
                
            

Geri Dönüş Parametreleri (Callback Parameters)

Bu bölüm ödeme sonrası belirtiğiniz geri dönüş adresine gönderilen parametreleri içerir.

  • order_id
  • credit
  • user_id
  • user_info
  • pay_label
  • total_price
  • net_price
  • hash

Parametre Ayrıntıları :

Parametre Türü Açıklama Örnek
order_id string Ödemeye ait sipariş numarasını belirtir. XXXXXXXX
credit integer Ödemesi yapılan ürünün dijital değerini belirtir. (Alıcının hesabına yüklenecek kredi) 10
user_id integer Payreks API Gateway'ine gönderdiğiniz user_id parametresini belirtir. 801808
user_info integer Payreks API Gateway'ine gönderdiğiniz user_info parametresini belirtir. demouser, [email protected]
pay_label string Ödemenin hangi kanaldan yapıldığını belirtir. CREDIT, MOBILE, EFT, ININAL
net_price float Ödeme sonrası Payreks Elektronik Cüzdanınıza yüklenecek bakiyeyi belirtir. 10.00
hash string Ödeme işlemi sırasında oluşan hash (sha256) kodunu belirtir. (Güvenlik için hash kontrolü yapınız) xxxxxxxxxxxxxxxxxxxxxxxx

UYARI : Geri dönüş sayfanıza işlemler başarılıysa OK yazdırmalısınız. Aksi bir durumda ödeme onaya düşmez.

Geri Dönüş Örnek Kodlama (Callback Example)

Bu bölüm geri dönüş sayfası için örnek bir kodlama (PHP) içerir.

                
<?php
    //Payreks Filter Function
    function payreksFilter($string)
	{
		$escapes = ["--",";","/*","*/","//","#","||","<","|","&",">","'",")","(","*","\""];
		$filterString = $string;
		foreach ($escapes as $row)
			$filterString = str_replace($row,"",$filterString);
		return $filterString;
	}

    //Payreks Hash Control Function
    function payreksHashControl($type, $data, $key)
	{
		$context = hash_init($type, HASH_HMAC, $key);
		hash_update($context, $data);
		return hash_final($context);
	}

    //Post Control
    if (!$_POST)
	    die("do not have post values");

    //Get Post Values
    $orderID = isset($_POST['order_id']) ? payreksFilter($_POST['order_id']) : null;
    $credit = isset($_POST['credit']) ? payreksFilter($_POST['credit']) : null;
    $userID = isset($_POST['user_id']) ? payreksFilter($_POST['user_id']) : null;
    $userInfo = isset($_POST['user_info']) ? payreksFilter($_POST['user_info']) : null;
    $payLabel = isset($_POST['pay_label']) ? payreksFilter($_POST['pay_label']) : null;
    $totalPrice = isset($_POST['total_price']) ? payreksFilter($_POST['total_price']) : null;
    $netPrice = isset($_POST['net_price']) ? payreksFilter($_POST['net_price']) : null;
    $hash = isset($_POST['hash']) ? $_POST['hash'] : null;

    //Control Post Keys
    if ($orderID === null || $credit === null || $userID === null || $userInfo === null || $payLabel === null ||
                    $totalPrice === null || $netPrice === null || $hash === null)
	    die("missing value");

    //Control Post Values
    if ($orderID === "" || $credit === "" || $userID === "" || $userInfo === "" || $payLabel === "" ||
                    $totalPrice === "" || $netPrice === "" || $hash === "")
	    die("empty value");

    $apiKey = "XXXX-XXXXXX-XXXXXX-XXXX"; //Mağaza api key
    $secretKey = "XXXXXXXXXX"; //Mağaza secret key

    $hashData = md5($orderID . $credit . $userID . $userInfo . $payLabel . $totalPrice . $netPrice . $apiKey);
    $hashCreate = payreksHashControl('sha256', $hashData, $secretKey);

    //Hash Control
    if ($hash !== $hashCreate)
	    die("wrong hash");

    #Bu bölüme user_id ve user_info parametreleriyle gelen değerleri kontrol ettirerek alıcının doğrulunu kontrol ettiriniz.
    #Örnek (Kendi altyapınıza göre düzenleyiniz)
    $controlUser = $db->prepare("SELECT id FROM users WHERE email = ? && id = ?");
    $controlUser->execute(array($userInfo, $userID));

    //User Control
    if ($controlUser->rowCount() <= 0)
	    die("user not found");

    #Bu bölüme sipariş log kaydı ve order_id parametresini kullanarak log kaydı olup olmadığını kontrol ettiriniz.
    #Örnek (Kendi altyapınıza göre düzenleyiniz)
    $controlLog = $db->prepare("SELECT id FROM payreks_log WHERE order_id = ? ");
    $controlLog->execute(array($orderID));

    //Log Control
    if ($controlLog->rowCount() > 0)
	    die("order already have");

    //Insert Log Data
    $insertLogData = $db->prepare("INSERT INTO payreks_log (order_id,user_id,user_info,pay_label,credit,net_price,date_time) VALUES
                    ('$orderID','$userID','$userInfo','$payLabel','$credit','$netPrice','" . date("Y-m-d H:i:s") . "')");
    $insertLogData->execute();

    //If Log Can Not Insert
    if (!$insertLogData)
	    die("log can not insert");

    #Bu bölüme alıcı hesabına kredi yükleme işlemini yaptırınız.
    #Örnek (Kendi altyapınıza göre düzenleyiniz)
    //Update Customer Credit
    $updateCredit = $db->prepare("UPDATE user SET credit = credit + '$credit'  WHERE id = ? and email = ");
    $updateCredit->execute();

    //If Credit Can Not Upload
    if (!$updateCredit)
	    die("credit can not upload");

    //Tüm kontroller sağlandıktan ve alıcıya kredi yüklendikten sonra ekrana OK yazdırmalısınız.
    die("OK");
?>